Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
dd64e4c
testing config to push to instance/kfmain
olive-KTB Dec 8, 2025
13f47f3
pr ready
olive-KTB Dec 8, 2025
0097a8d
fix(mfa): change MFA modal copywriting (#6536)
Guitlle Dec 9, 2025
2c1c8a4
fix(mfa): Update copy in MFA authenticate form (#6538)
Guitlle Dec 9, 2025
d1c27f4
fix(exports): handle errors properly (for 2.025.47) DEV-1382 (#6539)
magicznyleszek Dec 9, 2025
a6e5db4
Merge branch 'release/2.025.47'
Dec 9, 2025
cfc2473
Merge branch 'release/2.025.47'
Dec 9, 2025
797146d
ci: update gha authentication to oidc (#6541)
olive-KTB Dec 10, 2025
ae51d57
feat: add support to AWS SES configuration sets (#6540)
noliveleger Dec 10, 2025
9038dcb
Merge branch 'release/2.025.43' into release/2.025.47
Dec 10, 2025
d96e047
Merge branch 'release/2.025.47'
Dec 10, 2025
ee2293b
Merge branch 'release/2.025.43' into release/2.025.47
Dec 10, 2025
21942ee
Merge branch 'release/2.025.47'
Dec 10, 2025
c09557a
feat(gallery): paginated modal for images DEV-1212 (#6521)
magicznyleszek Dec 10, 2025
574042d
docs(deprecation): update API v1 removal date (#6544)
noliveleger Dec 10, 2025
19b792b
Merge branch 'release/2.025.43' into release/2.025.47
Dec 10, 2025
87b80df
Merge branch 'release/2.025.47'
Dec 10, 2025
b497285
chore(submissions): update anonymous submissions help link DEV-1365 (…
duvld Dec 10, 2025
4839c19
ci(releases): changelog job should handle all cases DEV-1285 (#6543)
Akuukis Dec 11, 2025
9db4cd1
Merge branch 'release/2.025.43' into release/2.025.47
Dec 11, 2025
9776a72
Merge branch 'release/2.025.47'
Dec 11, 2025
cd1b7ff
chore(deps): bump actions/cache from 4 to 5 in the actions-deps group…
dependabot[bot] Dec 15, 2025
628814c
ci(releases): changelog job should handle all cases DEV-1285 (#6546)
Akuukis Dec 15, 2025
03545a6
update ci
olive-KTB Dec 15, 2025
3d0c7e7
testing config to push to instance/kfmain
olive-KTB Dec 8, 2025
0229980
pr ready
olive-KTB Dec 8, 2025
de5e73c
update ci
olive-KTB Dec 15, 2025
cc95ddb
Merge branch 'ci-move-kfmain' of https://github.com/kobotoolbox/kpi i…
olive-KTB Dec 15, 2025
e8b1d4e
update test trigger
olive-KTB Dec 16, 2025
fee907d
remove testing triggers
olive-KTB Dec 16, 2025
f0da25c
update kpi output
olive-KTB Dec 17, 2025
7c5e1d3
space
olive-KTB Dec 17, 2025
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
2 changes: 1 addition & 1 deletion .github/workflows/biome.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:

# Cache: Use cache for node_modules
# Keyed on os, node version, package-lock, and patches
- uses: actions/cache@v4
- uses: actions/cache@v5
name: Check for cached node_modules
id: cache-nodemodules
env:
Expand Down
3 changes: 2 additions & 1 deletion .github/workflows/find-releases.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ jobs:
steps:
- uses: actions/checkout@v6
with:
fetch-depth: "0"
fetch-depth: 0
fetch-tags: true
- name: Find next release tag and branch
id: version
run: |
Expand Down
39 changes: 33 additions & 6 deletions .github/workflows/nonprod-releases.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,11 +21,16 @@ jobs:
packages: write
env:
CI_REGISTRY_IMAGE: ghcr.io/kobotoolbox/kpi

outputs:
kpi_image_sha: ${{ steps.sha.outputs.sha }}
steps:
- name: Checkout code
uses: actions/checkout@v6

- name: Store commit SHA
id: sha
run: echo "sha=${GITHUB_SHA}" >> $GITHUB_OUTPUT

- name: Configure AWS Credentials
uses: aws-actions/[email protected]
with:
Expand Down Expand Up @@ -70,15 +75,36 @@ jobs:
BRANCH_TITLE=${GITHUB_REF_NAME#feature/}
helm -n kobo-dev upgrade --install $BRANCH_TITLE oci://ghcr.io/kobotoolbox/kobo --atomic --set-string kpi.version=${GITHUB_SHA} --set kpi.image.repository=$CI_REGISTRY_IMAGE --reuse-values

- name: Deploy main
if: github.ref_name == 'main'
run: |
helm -n kobo-dev upgrade staging-main oci://ghcr.io/kobotoolbox/kobo --atomic --set-string kpi.version=${GITHUB_SHA} --set kpi.image.repository=$CI_REGISTRY_IMAGE --reuse-values
helm -n kobo-dev upgrade staging-nobill oci://ghcr.io/kobotoolbox/kobo --atomic --set-string kpi.version=${GITHUB_SHA} --set kpi.image.repository=$CI_REGISTRY_IMAGE --reuse-values
trigger-main-deploy:
needs: deploy
runs-on: ubuntu-latest
if: github.ref_name == 'main'
steps:
- name: Generate GitHub App Token
id: app-token
uses: actions/create-github-app-token@v1
with:
app-id: ${{ secrets.KOBO_BOT_APP_ID }}
private-key: ${{ secrets.KOBO_BOT_PRIVATE_KEY }}
owner: kobotoolbox
repositories: "devops"

- name: Trigger kfmain deploy build
uses: benc-uk/workflow-dispatch@v1
with:
workflow: deploy-kfmain.yml
repo: kobotoolbox/devops
ref: instance/kfmain
token: ${{ steps.app-token.outputs.token }}
inputs: |
{
"kpi_image_sha": "${{ needs.deploy.outputs.kpi_image_sha }}"
}

notify-success:
needs:
- deploy
- trigger-main-deploy
if: ${{ !cancelled() && !failure() }}
uses: './.github/workflows/zulip.yml'
secrets: inherit
Expand All @@ -89,6 +115,7 @@ jobs:
notify-failure:
needs:
- deploy
- trigger-main-deploy
if: ${{ !cancelled() && failure() }}
uses: './.github/workflows/zulip.yml'
secrets: inherit
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/npm-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ jobs:

# Cache: Use cache for node_modules
# Keyed on os, node version, package-lock, and patches
- uses: actions/cache@v4
- uses: actions/cache@v5
name: Check for cached node_modules
id: cache-nodemodules
env:
Expand Down Expand Up @@ -94,7 +94,7 @@ jobs:

# Install Playwright (with cache) for Storybook tests
- name: "Playwright: cache binaries"
uses: actions/cache@v4
uses: actions/cache@v5
id: playwright-cache
with:
path: ~/.cache/ms-playwright
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/openapi.yml
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ jobs:

# Cache: Use cache for node_modules
# Keyed on os, node version, package-lock, and patches
- uses: actions/cache@v4
- uses: actions/cache@v5
name: Check for cached node_modules
id: cache-nodemodules
env:
Expand Down
9 changes: 2 additions & 7 deletions .github/workflows/release-2-stabilize.yml
Original file line number Diff line number Diff line change
Expand Up @@ -104,14 +104,10 @@ jobs:

- name: draft a changelog
run: |
set -xe
npx git-cliff -u $(git log --format=format:%H origin/$PREV_BRANCH..origin/$CURRENT_BRANCH | tail -1)..origin/$CURRENT_BRANCH --tag $CURRENT_PATCH
npx git-cliff -u --tag $CURRENT_PATCH

- name: commit the changelog to a dedicated branch
run: |
set -xe
git config user.name '${{ steps.app-token.outputs.app-slug }}[bot]'
git config user.email '${{ steps.get-user-id.outputs.user-id }}+${{ steps.app-token.outputs.app-slug }}[bot]@users.noreply.github.com'
git checkout -B changelog/$CURRENT_PATCH
git add -f CHANGELOG.md
git commit -m "chore(releases): generate CHANGELOG.md for $CURRENT_PATCH"
Expand Down Expand Up @@ -140,7 +136,6 @@ jobs:

- name: deploy to beta
run: |
set -xe
git checkout -B public-beta
git push -f --set-upstream origin public-beta

Expand Down Expand Up @@ -221,7 +216,7 @@ jobs:
&& format(':warning: failed to update changelog: @*devs* please investigate [run #{0}]({1}/{2}/actions/runs/{3})!', github.run_number, github.server_url, github.repository, github.run_id)
|| needs.changelog.result == 'skipped'
&& ':skip_forward: changelog update skipped due failed automated tests.'
|| format(':check: updated [changelog](https://github.com/kobotoolbox/kpi/blob/changelog/{0}/CHANGELOG.md)', needs.version.outputs.current_patch)
|| format(':check: updated [changelog](https://github.com/kobotoolbox/kpi/blob/changelog/{0}/CHANGELOG.md) for `{1}..{0}`', needs.version.outputs.current_patch, needs.version.outputs.prev_patch)
}}
- ${{ (needs.deploy-to-beta.result == 'failure' || needs.deploy-to-beta.result == 'timed_out')
&& format(':warning: failed to queue to deploy to beta: @*devs* please investigate [run #{0}]({1}/{2}/actions/runs/{3})!', github.run_number, github.server_url, github.repository, github.run_id)
Expand Down
2 changes: 1 addition & 1 deletion DEPRECATION.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Endpoint deprecation as of release 2.025.29

⚠️ The deprecated endpoints listed below will be permanently removed with the first release of 2026, scheduled for the week of **January 19, 2026**.
⚠️ The deprecated endpoints listed below will be permanently removed with the first release of June 2026, scheduled for **June 2, 2026**.

We strongly encourage all developers and users with integrations to update their systems as soon as possible to avoid disruption.
A new support article will be available soon to guide users through the migration from KoboCAT `v1` to KPI `v2`.
Expand Down
2 changes: 1 addition & 1 deletion cliff.toml
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,7 @@ filter_commits = false
## An array of link parsers for extracting external references, and turning them into URLs, using regex.
link_parsers = []
## Include only the tags that belong to the current branch.
use_branch_tags = false
use_branch_tags = true
## Order releases topologically instead of chronologically.
topo_order = false
## Order releases topologically instead of chronologically.
Expand Down
11 changes: 9 additions & 2 deletions jsapp/js/actions/exportsActions.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
* exports related actions
*/

import * as Sentry from '@sentry/react'
import Reflux from 'reflux'
import { dataInterface } from '#/dataInterface'
import { notify } from '#/utils'
Expand Down Expand Up @@ -51,8 +52,14 @@ exportsActions.createExport.listen((assetUid, data) => {
.done(exportsActions.createExport.completed)
.fail(exportsActions.createExport.failed)
})
exportsActions.createExport.failed.listen(() => {
notify(t('Failed to create export'), 'error')

exportsActions.createExport.failed.listen((response) => {
let errorMessage = t('Failed to create export')
if (typeof response === 'object' && response.responseJSON?.error) {
errorMessage = response.responseJSON.error
}
notify(errorMessage, 'error')
Sentry.captureMessage(errorMessage)
})

/**
Expand Down
10 changes: 4 additions & 6 deletions jsapp/js/components/bigModal/mfaModals.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -411,14 +411,12 @@ const MFAModals = class MFAModals extends React.Component<MFAModalsProps, MFAMod
<strong>
{/*This is safe as this step only shows if not on qr step*/}
{this.props.modalType === 'regenerate' &&
t('Please enter your ##number##-digit authenticator token to regenerate your backup codes.').replace(
'##number##',
String(envStore.data.mfa_code_length),
)}

t(
'Please enter your ##number##-digit authenticator token or one of your recovery codes to regenerate your backup codes.',
).replace('##number##', String(envStore.data.mfa_code_length))}
{this.props.modalType !== 'regenerate' &&
t(
'Please enter your ##number##-digit authenticator token to deactivate two-factor authentication.',
'Please enter your ##number##-digit authenticator token or one of your recovery codes to deactivate two-factor authentication.',
).replace('##number##', String(envStore.data.mfa_code_length))}
</strong>
</bem.MFAModal__p>
Expand Down
3 changes: 3 additions & 0 deletions jsapp/js/components/formGallery/formGallery.actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,3 +17,6 @@ export type FormGalleryAction =
| { type: 'setFilterQuestion'; question: string }
| { type: 'setStartDate'; value: string }
| { type: 'toggleFullscreen' }
| { type: 'openModal'; index: number }
| { type: 'closeModal' }
| { type: 'setModalImageIndex'; index: number }
Loading