Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
6c764ea
ci/test-nginx: show mock-sentry logs (#1816)
alxndrsn Apr 18, 2026
0379dcf
ci/ghcr: update deprecated docker action versions (#1821)
alxndrsn Apr 18, 2026
ae72624
test/nginx/csp: rename backend-strict policy (#1823)
alxndrsn Apr 22, 2026
963b9dc
ci: only publish containers if tests passed (#1820)
alxndrsn Apr 22, 2026
94aa904
test/nginx/csp: remove duplicate test (#1860)
alxndrsn Apr 29, 2026
1431cb1
nginx/csp: blank.html: allow form-action 'self' (#1857)
alxndrsn Apr 29, 2026
e6df530
nginx/csp: enforce policy for blank.html (#1858)
alxndrsn Apr 29, 2026
9122bb2
csp: allow data: URLs in worker-src for web-forms (#1776)
alxndrsn Apr 30, 2026
711c6ad
nginx/csp: tighten favicon allowance for blank.html (#1855)
alxndrsn Apr 30, 2026
c9b359a
nginx/csp: allow favicons for backend requests (#1854)
alxndrsn Apr 30, 2026
d3eb696
Merge branch 'master' into next
matthew-white May 4, 2026
af64f1d
nginx/csp: enforce policy for central-backend (#1859)
alxndrsn May 5, 2026
625eb98
nginx: fix escaping in /fonts/ matcher (#1863)
alxndrsn May 7, 2026
97b3251
ci: simplify checkout (#1890)
alxndrsn May 9, 2026
fe411c8
Fixes: expected docker context is increased due to WF merge
sadiqkhoja May 14, 2026
448b96a
Merge pull request #1893 from sadiqkhoja/fixes/docker-context
sadiqkhoja May 14, 2026
1a9c7f9
Fixes: install openssl in service container
sadiqkhoja May 13, 2026
b9a1d3f
Merge pull request #1892 from sadiqkhoja/fixes/install-openssl
sadiqkhoja May 15, 2026
e4c7b83
service: move DB_SSL check back to runtime (#1889)
alxndrsn May 25, 2026
95717b1
nginx: enable Content Security Policies (#1909)
alxndrsn May 26, 2026
a4e5b06
test/nginx: fix comment typo (#1938)
alxndrsn Jun 4, 2026
48b7478
test/nginx/docker-compose: restrict open ports to local machine (#1927)
alxndrsn Jun 4, 2026
fc457ec
nginx: test stream interruption (#1939)
alxndrsn Jun 4, 2026
c182517
dev/docker-compose: restrict open ports to local machine (#1925)
alxndrsn Jun 4, 2026
18b9667
nginx: reject form previews with unexpected query params (#1947)
alxndrsn Jun 5, 2026
007fd5c
test: disable case-sensitive routing for express servers (#1953)
alxndrsn Jun 6, 2026
28206d5
ci: increase docker-context file size expecations (#1948)
alxndrsn Jun 6, 2026
0c07aaa
test/nginx: extract request() and add testing (#1955)
alxndrsn Jun 7, 2026
40868ce
ci: read node version from volta declaration (#1958)
alxndrsn Jun 7, 2026
f098936
test: make ExpressJS host-bindings explicit (#1954)
alxndrsn Jun 7, 2026
4ec096d
test/nginx: prevent request() from normalising paths (#1949)
alxndrsn Jun 7, 2026
0db562e
test/nginx: tidy up (#1941)
alxndrsn Jun 9, 2026
7f7d948
nginx: specify nginx version (#1937)
alxndrsn Jun 10, 2026
c20f3ed
test/check-docker-context: ignore .git directory (#1967)
alxndrsn Jun 11, 2026
96cf4ed
test: disable extended query parser for express servers (#1964)
alxndrsn Jun 11, 2026
ce03665
Upgrade Enketo to 7.6.2 (#1965)
lognaturel Jun 12, 2026
c91fe3d
fix(web-forms#535): separate enketo and web-forms into their own vue app
garethbowen Jun 14, 2026
1f0cf1e
fix: reduce runtime memory usage in nginx service
garethbowen Jun 15, 2026
6f8fe88
nginx/web-forms: assert correct HTML is served (#1980)
alxndrsn Jun 15, 2026
27cc8ef
nginx: narrow scope of NodeJS max-old-space-size (#1993)
alxndrsn Jun 15, 2026
4007043
build/nginx: reduce gc heap space allocation (#1994)
alxndrsn Jun 15, 2026
ddaf82f
service: remove volume: data/transfer (#1992)
alxndrsn Jun 15, 2026
6c70ffb
docker-compose: remove dangling volume: transfer (#1973)
alxndrsn Jun 15, 2026
e67a2fa
check-docker-context: use custom builder explicitly (#1990)
alxndrsn Jun 15, 2026
4a88431
test/nginx: remove comment re: web-forms paths (#1977)
alxndrsn Jun 15, 2026
8ecbaa7
nginx: remove misleading web-forms config (#1982)
alxndrsn Jun 16, 2026
3a437ac
nginx/web-forms: simplify try_files directive (#1983)
alxndrsn Jun 16, 2026
1288db9
nginx: merge duplicate web-forms regexes (#1984)
alxndrsn Jun 16, 2026
8967ba0
test/nginx: add more fake webforms paths (#1985)
alxndrsn Jun 16, 2026
883431c
chore: pass frontend Sentry DSN (#2005)
latin-panda Jun 22, 2026
8b8a038
client: replace submodule with specific release (#1998)
alxndrsn Jun 22, 2026
259f9fa
chore: rename variable to SENTRY_DSN_FRONTEND (#2010)
latin-panda Jun 23, 2026
7489585
chore: updates PR template (#2014)
latin-panda Jun 25, 2026
17ec5a4
Update pyxform image version to v4.5.0 (#2020)
lognaturel Jun 25, 2026
1214873
Upgrade node to 24.16.0
lognaturel Jun 25, 2026
1e4cf82
Upgrade nginx to 1.31.2
lognaturel Jun 25, 2026
ac22116
Upgrade Postgres to 14.23
lognaturel Jun 25, 2026
eb8127f
Upgrade smtp image to latest in 1.2.x
lognaturel Jun 25, 2026
41d0827
Upgrade redis to latest in 8.6.x
lognaturel Jun 25, 2026
d058b88
Upgrade test dependencies
lognaturel Jun 25, 2026
c0898a8
Upgrade playwright to fix CI
lognaturel Jun 25, 2026
2a4967e
Merge pull request #2022 from lognaturel/v2026.2-deps
lognaturel Jun 29, 2026
d30c049
Update FRONTEND_VERSION before regression testing
matthew-white Jun 29, 2026
affc001
Merge branch 'master' into next
matthew-white Jul 2, 2026
52b4df0
chore(web-forms#821): adds template with release steps (#2019)
latin-panda Jul 3, 2026
0416c16
Update client and server for v2026.2.0 (#2039)
lognaturel Jul 3, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .env.template
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ HTTPS_PORT=443
# SENTRY_PROJECT=
# SENTRY_TRACE_RATE=

# Optional: configure frontend error reporting
# SENTRY_DSN_FRONTEND=

# Optional: configure S3-compatible storage for binary files
# S3_SERVER=
# S3_ACCESS_KEY=
Expand Down
Original file line number Diff line number Diff line change
@@ -1,3 +1,12 @@
---
name: Verified bug
about: Issues verified by the team.
title: ''
type: 'Bug'
labels: ''
assignees: ''
---

<!--
The Central team uses GitHub issues for project management. Most bug reports and feature requests should start in the ODK forum: https://forum.getodk.org

Expand All @@ -12,7 +21,7 @@ The QA team uses the template below to file bug reports. If you are not filing a

#### Screenshot

Please don't attach images of QR codes, as those provide access to the server.
<!-- Please don't attach images of QR codes, as those provide access to the server. -->

#### Expected behavior

Expand Down
142 changes: 142 additions & 0 deletions .github/ISSUE_TEMPLATE/release.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
---
name: Release
about: Checklist for releasing a new version of ODK Central
title: 'Release vXXXX.X.Y'
type: 'Task'
labels: ''
assignees: ''
---

Complete the steps below to release a new version of ODK Central.

> **Legend**
> - 🚀 Major release only
> - 🛠 Patch release only
> - 🔎 Requires the second person (reviewer)
> - Unmarked steps apply to **both** major and patch releases.

Releasing requires two people: one person to push PRs and complete other tasks and another person to review the PRs.

---

## Steps

- [ ] Decide the release version (`vXXXX.X.Y`). The same version is used for `central`, `central-backend`, and `central-frontend`, so the `central` release URL (`https://github.com/getodk/central/releases/tag/vXXXX.X.Y`) can be referenced from the `central-frontend` and `central-backend` release bodies.
- [ ] Write an announcement about the release for the forum.
- [ ] 🚀 Create a new topic in the forum for the release. Use the **Scheduled** category and add the `odk-central` label.

### Get the repository

- [ ] Get the latest version of the `central` repository locally.
- If you have **not** cloned the repository: clone it.
- If you had **already** cloned the repository: `git pull`
- [ ] Check out the correct branch.
- 🚀 Check out the `next` branch.
- 🛠 If the patch involves a single change/PR to the `central` repository, check out the `master` branch. Otherwise, a different branch will be used for the patch (possibly `next`); check out that branch.

### Release `central-frontend`

> Applies when `central-frontend` has changed since the last release. Major releases always include `central-frontend`; for patches, skip this section if no central-frontend changes are included.

- [ ] Run `npm run version` in `central-frontend`. This consumes the `.changeset/` files, bumps package versions, and updates each `CHANGELOG.md`.
- [ ] Commit the changes on a new branch (e.g., `release-version-bumps`) and open a PR targeting `master`.
- [ ] 🔎 Review the PR. Verify the version bumps and `CHANGELOG.md` entries match what's expected from the `.changeset/` files.
- [ ] Merge the PR.
- [ ] In `central-frontend`, create a minimal GitHub release on the merged commit. The tag push is what triggers `.github/workflows/wf-publish.yml` to publish packages to npm — full release notes live only in the `central` release.
- Tag: `v*.*.*` (no pre-release suffix).
- Set as the **latest release**. Don't set as a pre-release.
- Body: a single line pointing to the upcoming `central` release, e.g., `See release notes at https://github.com/getodk/central/releases/tag/vX.Y.Z`.
- [ ] Wait for `wf-publish.yml` to complete, then verify:
- The Actions run finished green.
- The expected packages were published to npm.
- Per-package tags were pushed to the repository.
- If the workflow fails, do not proceed with the rest of the release — investigate and resolve before creating the `central` release.

### Release `central-backend`

> Applies when `central-backend` has changed since the last release. Major releases always include `central-backend`; for patches, skip this section if no central-backend changes are included.

- [ ] Create a GitHub release on the latest `master` commit of `central-backend`.
- Tag: `v*.*.*` (no pre-release suffix).
- 🚀 Don't forget the final `XXXX.X.0` in the tag and release title.
- Set as the **latest release**. Don't set as a pre-release.
- Body: a single line pointing to the upcoming `central` release, e.g., `See release notes at https://github.com/getodk/central/releases/tag/vX.Y.Z`.

### Update submodules

- [ ] For each of the server and client submodules, `cd` into the directory and run:
- `git fetch`
- `git switch -d origin/master` or `git checkout origin/master`
- [ ] Commit the submodule updates using a new branch (e.g., `update-submodules`). Create a new PR for the branch.
- 🚀 Target the `next` branch.
- 🛠 If the only change/PR to the `central` repository is the submodule updates, target the `master` branch. Otherwise, a different branch will be used for the patch (possibly `next`); target that branch.
- [ ] 🔎 Review the PR. For each submodule, the diff in GitHub will link to a page that indicates the old and new commit hashes.

### Merge

- [ ] 🚀 Once the submodules PR has been merged into the `next` branch, use the existing release PR to merge `next` into the `master` branch.
- Select **"Create a merge commit"** when you merge.
- Don't delete the `next` branch after merging.
- [ ] 🛠 If the patch involves more than a single change/PR to the `central` repository, then there should be a PR for the patch as a whole. Merge it.
- Select **"Create a merge commit"** when you merge.
- If the PR used the `next` branch, don't delete the `next` branch after merging.

### Release `central`

- [ ] Create a GitHub release for `central`. This will also create a Git tag.
- 🚀 Don't forget the final `XXXX.X.0` in the tag and release title.
- Set as the **latest release**. Don't set as a pre-release.
- Publish once you're ready to create the release and tag.
- [ ] Add release notes to the release.
- 🚀 Link to the release announcement in the forum.

<details>
<summary>📋 Release notes template — expand, fill in links, and paste into the GitHub release</summary>

```markdown
## Release Notes

📢 **[Read the official release announcement on the Forum!](insert-forum-link-here)**

We highly recommend checking out the forum post for a user-friendly overview of new features, enhanced with screenshots and guides.

---

### 🛠 Technical Changelogs
For a detailed list of technical updates, fixes, and improvements, please review the specific changelogs below:

<!-- CHANGELOG section anchors drop dots from the version number: 0.25.0 → #0250 -->
* [back-end](https://github.com/getodk/central-backend/blob/master/docs/api.yaml)
* [apps/central](https://github.com/getodk/central-frontend/tree/master/apps/central/CHANGELOG.md#<version-without-dots>)
* [apps/forms](https://github.com/getodk/central-frontend/tree/master/apps/forms/CHANGELOG.md#<version-without-dots>)
* [packages/web-forms](https://github.com/getodk/central-frontend/blob/master/packages/web-forms/CHANGELOG.md#<version-without-dots>)
* [packages/xforms-engine](https://github.com/getodk/central-frontend/blob/master/packages/xforms-engine/CHANGELOG.md#<version-without-dots>)
* [packages/xpath](https://github.com/getodk/central-frontend/tree/master/packages/xpath/CHANGELOG.md#<version-without-dots>)
```

</details>

### Update API docs

- [ ] Update the API docs in the `docs` repository. Using a new branch in your fork of the `docs` repository, copy `central-backend/docs/api.yaml` to `docs/docs/_static/api-spec/central.yaml`. Create a new PR for the branch.
- [ ] 🔎 Review the PR.
- [ ] Merge any other relevant docs PRs.
- [ ] Check future release PRs. When you merge one of these, remove the `future release` label.

### Announce the release

- [ ] 🚀 Move the forum topic from the **Scheduled** category to the **Releases** category.
- [ ] 🛠 Reply to the topic for the latest release.

### Update news

- [ ] Create a new PR to update `central/docs/news.html`, branching off the `master` branch.
- Link to the forum post. Limit the number of news items to 2. Target the `master` branch.
- [ ] 🔎 Review the PR. Feel free to "Squash and merge" when you merge.

### Update the `next` branch

> Do this once the news PR has been merged.

- [ ] 🚀 Reset the `next` branch to the tip of the `master` branch. The `master` branch will be ahead of the `next` branch, so this doesn't require a force-push.
- [ ] 🛠 If there has been a commit to the `next` branch that isn't on the `master` branch, then merge the `master` branch into the `next` branch. If there has not been a commit, then reset the `next` branch to the tip of the `master` branch.
10 changes: 4 additions & 6 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -1,14 +1,12 @@
> [!WARNING]
> Branch off and target `next`, not `master`. The `master` is stable and used in production (exception: documentation/infrastructure-only changes).

Closes #

#### What has been done to verify that this works as intended?

#### Why is this the best possible solution? Were any other approaches considered?

#### How does this change affect users? Describe intentional changes to behavior and behavior that could have accidentally been affected by code changes. In other words, what are the regression risks?
#### How does this change impact users? Describe intentional behavior changes from code updates. What are the regression risks?

#### Does this change require updates to documentation? If so, please file an issue [here](https://github.com/getodk/docs/issues/new) and include the link below.

#### Before submitting this PR, please make sure you have:

- [ ] branched off and targeted the `next` branch OR only changed documentation/infrastructure (`master` is stable and used in production)
- [ ] verified that any code or assets from external sources are properly credited in comments or that everything is internally sourced
61 changes: 0 additions & 61 deletions .github/workflows/ghcr.yml

This file was deleted.

Loading