Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
5a91a61
refactor(theme): update header height calculation and add isClampable…
r0ssing Jun 18, 2026
ea99668
feat(formulus): more compact UI in formplayer header, changed autofoc…
r0ssing Jun 18, 2026
874c413
chore: formatting
r0ssing Jun 18, 2026
f22cd4d
feat(formulus): include note to remember formatting before commit
r0ssing Jun 18, 2026
3832dee
fix(formplayer): fix duplicate error message issue
r0ssing Jun 18, 2026
682c931
fix(formplayer): fix validation issues on sub-observations
r0ssing Jun 18, 2026
2d823d1
fix(desktop): automatically clear staging area after import
r0ssing Jun 18, 2026
14dd600
chore: formatting
r0ssing Jun 18, 2026
43ecf5b
chore: formatting
r0ssing Jun 18, 2026
8001be2
Merge pull request #659 from HelloSapiens/feat/ime-keyboard-ux
r0ssing Jun 18, 2026
6865316
chore: formatting
r0ssing Jun 18, 2026
76e7e9f
fix(formulus): UX updates
r0ssing Jun 18, 2026
9b6a7d8
chore: formatting
r0ssing Jun 18, 2026
a70b71d
feat(formulus): various UX improvement re. sub-observations and more …
r0ssing Jun 18, 2026
31ca780
fix(formulus): sub-observation regression fix
r0ssing Jun 18, 2026
5b7df08
wip
r0ssing Jun 18, 2026
59f9f06
fix(desktop): sub-observation regression fix and lint issues addressed
r0ssing Jun 18, 2026
031b99f
fix(formplayer): datahandling on skipFinalize
r0ssing Jun 18, 2026
226d52b
chore: formatting
r0ssing Jun 18, 2026
546ecf2
chore: formatting
r0ssing Jun 18, 2026
c20bd8a
fix(desktop): fix init loop
r0ssing Jun 18, 2026
03073fe
Merge pull request #660 from HelloSapiens/feat/bugfixes
r0ssing Jun 18, 2026
5c4e5e9
fix(packages): update package lockfile to fix cycloneDB action error
r0ssing Jun 18, 2026
467f7cc
Merge pull request #661 from HelloSapiens/fix/fix_sbom_error
Ndacyayisenga-droid Jun 18, 2026
82870a6
feat(formulus): improved autonumbering functionality to include devic…
r0ssing Jun 19, 2026
d5849d4
chore: formatting and release v1.1.1 prep
r0ssing Jun 19, 2026
0105d5c
Merge pull request #662 from HelloSapiens/fix/autonumbering
r0ssing Jun 19, 2026
dae5dfb
fix(desktop): update dekstop API implementation
r0ssing Jun 19, 2026
7c89bb3
Merge pull request #663 from HelloSapiens/fix/desktop_api
r0ssing Jun 19, 2026
720e0f6
wip
r0ssing Jun 19, 2026
8f04f18
fix(formplayer): edit handling
r0ssing Jun 19, 2026
f26804c
fix(formplayer): fix auto change init. data might drop init. values
r0ssing Jun 19, 2026
6b84bf9
Merge pull request #664 from HelloSapiens/fix/formulus_autonumbering
r0ssing Jun 19, 2026
77cf19d
fix(formplayer): Add support for more layout options, and make ODE De…
r0ssing Jun 22, 2026
7e21a2a
Merge pull request #665 from HelloSapiens/fix/formplayer-layout-support
r0ssing Jun 22, 2026
f7bbbdc
fix(formplayer): prevent re-revealing of input fields on resize to el…
r0ssing Jun 23, 2026
d60b76e
fix(formplayer): Avoid changing user input while user is inputting nu…
r0ssing Jun 23, 2026
7881cc2
chore: formatting
r0ssing Jun 23, 2026
1a37513
chore: updated test
r0ssing Jun 23, 2026
65370c4
Merge pull request #666 from HelloSapiens/fix/scroll-behaviour
r0ssing Jun 23, 2026
d314bb5
Merge branch 'dev' of github.com:OpenDataEnsemble/ode into fix/number…
r0ssing Jun 23, 2026
075a2b3
Merge pull request #667 from HelloSapiens/fix/number-input-ux
r0ssing Jun 23, 2026
2434007
chore(deps): update dependency @react-native-community/cli to v20.1.3
renovate[bot] Jun 23, 2026
b52b9e3
Merge pull request #642 from OpenDataEnsemble/renovate/react-native-c…
r0ssing Jun 23, 2026
d6cba3b
chore(deps): update Babel dependencies to version 7.29.7
r0ssing Jun 23, 2026
c86da74
Merge pull request #670 from HelloSapiens/fix/align-deps
r0ssing Jun 23, 2026
72782b1
chore(deps): update dependency @react-native-community/cli-platform-a…
renovate[bot] Jun 23, 2026
9b83d97
chore(deps): update dependency baseline-browser-mapping to v2.10.38
renovate[bot] Jun 23, 2026
0175d2b
chore(deps): update dependency @react-native/typescript-config to v0.…
renovate[bot] Jun 23, 2026
6da2bef
chore(deps): update material-ui monorepo
renovate[bot] Jun 23, 2026
54fe71a
Merge pull request #430 from OpenDataEnsemble/renovate/react-native-t…
r0ssing Jun 23, 2026
69511aa
Merge pull request #432 from OpenDataEnsemble/renovate/baseline-brows…
r0ssing Jun 23, 2026
2b02448
Merge pull request #434 from OpenDataEnsemble/renovate/material-ui-mo…
r0ssing Jun 23, 2026
1940042
chore(deps): update babel monorepo
renovate[bot] Jun 23, 2026
3e23690
Merge pull request #668 from OpenDataEnsemble/renovate/react-native-c…
r0ssing Jun 23, 2026
f21782c
chore(deps): update dependency react-native-safe-area-context to v5.8.0
renovate[bot] Jun 23, 2026
91c47a3
Merge pull request #641 from OpenDataEnsemble/renovate/babel-monorepo
r0ssing Jun 23, 2026
33ae7e3
Merge pull request #436 from OpenDataEnsemble/renovate/react-native-s…
r0ssing Jun 23, 2026
0ec6397
chore(deps): pin dependencies
renovate[bot] Jun 23, 2026
89b7c9c
Merge pull request #669 from OpenDataEnsemble/renovate/pin-dependencies
r0ssing Jun 23, 2026
ab08154
chore(deps): update react-native-safe-area-context to v5.8.0 and impr…
r0ssing Jun 23, 2026
7180b64
Merge pull request #671 from HelloSapiens/dev
r0ssing Jun 23, 2026
83e7540
chore(deps): update dependency @react-native-community/cli-platform-i…
renovate[bot] Jun 23, 2026
b0c88cb
chore(deps): update dependency concurrent-ruby to '< 1.3.8'
renovate[bot] Jun 23, 2026
3a819bf
feat(auth): enhance login command for non-interactive use and update …
r0ssing Jun 23, 2026
41b5415
Merge branch 'dev' into feat/cli-ci-improvements
r0ssing Jun 23, 2026
41ab9fe
Merge branch 'dev' of github.com:OpenDataEnsemble/ode into feat/cli-c…
r0ssing Jun 23, 2026
6e36c75
Merge branch 'feat/cli-ci-improvements' of github.com:HelloSapiens/od…
r0ssing Jun 23, 2026
d8494a0
Merge pull request #673 from OpenDataEnsemble/renovate/concurrent-rub…
r0ssing Jun 23, 2026
98e3b84
Merge pull request #672 from OpenDataEnsemble/renovate/react-native-c…
r0ssing Jun 23, 2026
5ae6247
Merge branch 'dev' into feat/cli-ci-improvements
r0ssing Jun 23, 2026
d604d72
Merge pull request #674 from HelloSapiens/feat/cli-ci-improvements
r0ssing Jun 23, 2026
8eeeaf3
chore(renovate): disable lockFileMaintenance and add packageRules for…
r0ssing Jun 23, 2026
2931c12
Merge pull request #677 from HelloSapiens/fix/renovate-rules
r0ssing Jun 23, 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
25 changes: 25 additions & 0 deletions .cursor/skills/ode-synk-bundle-publish/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,31 @@ description: >-
3. Store **API URLs and tokens** in CI secrets; never embed production credentials in source.
4. For bundle structure reminders, see **[CONTEXT_BUNDLE_AND_CI.md](https://github.com/OpenDataEnsemble/custom_app/blob/main/CONTEXT_BUNDLE_AND_CI.md)** in **custom_app** (summary only).

## CI / GitHub Actions (recommended pattern)

Do **not** build synk from source in app repos. Pin an ODE release:

```yaml
env:
SYNK_CLI_VERSION: v1.1.2 # bump intentionally

- name: Install synk
run: |
curl -fsSL "https://github.com/OpenDataEnsemble/ode/releases/download/${SYNK_CLI_VERSION}/synkronus-cli-linux-amd64.tar.gz" \
| tar -xz -C /tmp
install -m 0755 /tmp/synkronus-cli-linux-amd64 /usr/local/bin/synk
```

Deploy steps:

```bash
synk --config "$CONFIG_FILE" login -u "$USER" --password "$PASS"
synk --config "$CONFIG_FILE" app-bundle upload bundle-v1.0.0.zip
synk --config "$CONFIG_FILE" app-bundle switch "$VERSION"
```

Alternative: `ghcr.io/opendataensemble/synkronus-cli:vX.Y.Z` for Docker-based local tooling.

## Related

- [App bundles (using)](https://opendataensemble.org/docs/using/app-bundles)
Expand Down
26 changes: 26 additions & 0 deletions .github/CICD.md
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,32 @@ The workflow requires these permissions:

- `GITHUB_TOKEN` - Automatically provided by GitHub Actions

### Synkronus CLI Docker Build & Publish

**Workflow File**: `.github/workflows/synkronus-cli-docker.yml`

#### Triggers

- **Push to `main` / `dev`** when `synkronus-cli/**` or `Dockerfile.cli.slim` changes
- **Pull Requests** — build only, no publish
- **Release published** — versioned tags
- **Manual dispatch**

#### Image Registry

- Image: `ghcr.io/opendataensemble/synkronus-cli`
- Dockerfile: `Dockerfile.cli.slim` (pre-built static `synk` binary, Alpine 3.23)

Tagging follows the same strategy as the Synkronus server image (`latest`, `dev`, `main`, `v{X.Y.Z}`, `sha-{short}`, etc.).

#### CLI binaries (primary install path)

**Workflow File**: `.github/workflows/synkronus-cli.yml`

Release assets: `synkronus-cli-{os}-{arch}.tar.gz` attached to GitHub Releases. Custom app CI should pin a release tag via `SYNK_CLI_VERSION` and download `synkronus-cli-linux-amd64.tar.gz`.

Non-interactive CI login: `synk login -u USER --password "$SYNK_PASSWORD"` (v1.1.2+).

### Formulus Android Build

**Workflow File**: `.github/workflows/formulus-android.yml`
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/auto-label.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,10 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Label PR based on changed files
uses: actions/labeler@v5
uses: actions/labeler@8558fd74291d67161a8a78ce36a881fa63b766a9 # v5
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
configuration-path: .github/labeler.yml
Expand Down
24 changes: 12 additions & 12 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,12 +37,12 @@ jobs:
synkronus-cli: ${{ steps.filter.outputs.synkronus-cli }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
fetch-depth: 0

- name: Detect changed components
uses: dorny/paths-filter@v2
uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2
id: filter
with:
filters: |
Expand All @@ -68,15 +68,15 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
with:
version: 10.33.2

- name: Set up Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
Expand Down Expand Up @@ -111,15 +111,15 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
with:
version: 10.33.2

- name: Set up Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
Expand Down Expand Up @@ -160,10 +160,10 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Setup Go
uses: actions/setup-go@v5
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: synkronus/go.sum
Expand Down Expand Up @@ -212,10 +212,10 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Setup Go
uses: actions/setup-go@v5
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: synkronus-cli/go.sum
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/e2e-attachments.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,10 @@ jobs:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Set up Go
uses: actions/setup-go@v5
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
with:
go-version-file: synkronus/go.mod
cache: true
Expand Down Expand Up @@ -73,15 +73,15 @@ jobs:
timeout-minutes: 20
needs: contract
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
with:
version: 10.33.2

- name: Set up Node
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: 20

Expand Down
24 changes: 12 additions & 12 deletions .github/workflows/formulus-android.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,15 +39,15 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
with:
version: 10.33.2

- name: Set up Node.js for assets
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
Expand All @@ -68,7 +68,7 @@ jobs:
run: pnpm run build:copy

- name: Upload formplayer assets artifact
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
name: formplayer-assets
path: formulus/android/app/src/main/assets/formplayer_dist
Expand All @@ -83,21 +83,21 @@ jobs:

steps:
- name: Checkout repository
uses: actions/checkout@v4
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4

- name: Download formplayer assets artifact
uses: actions/download-artifact@v7
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7
with:
name: formplayer-assets
path: formulus/android/app/src/main/assets/formplayer_dist

- name: Setup pnpm
uses: pnpm/action-setup@v4
uses: pnpm/action-setup@b906affcce14559ad1aafd4ab0e942779e9f58b1 # v4
with:
version: 10.33.2

- name: Set up Node.js
uses: actions/setup-node@v4
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: pnpm
Expand Down Expand Up @@ -132,7 +132,7 @@ jobs:
run: pnpm run generate

- name: Set up Java
uses: actions/setup-java@v4
uses: actions/setup-java@c1e323688fd81a25caa38c78aa6df2d33d3e20d9 # v4
with:
distribution: 'temurin'
java-version: '17'
Expand Down Expand Up @@ -182,23 +182,23 @@ jobs:
run: ./gradlew bundleRelease --no-daemon

- name: Upload APK artifact
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
name: formulus-android-apk-${{ github.event_name }}-${{ github.run_id }}
path: |
formulus/android/app/build/outputs/apk/**/**/*.apk

- name: Upload AAB artifact
if: github.event_name != 'pull_request'
uses: actions/upload-artifact@v6
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6
with:
name: formulus-android-aab-${{ github.event_name }}-${{ github.run_id }}
path: |
formulus/android/app/build/outputs/bundle/release/*.aab

- name: Upload APK to GitHub Release
if: github.event_name == 'release'
uses: softprops/action-gh-release@v2
uses: softprops/action-gh-release@3bb12739c298aeb8a4eeaf626c5b8d85266b0e65 # v2
with:
files: |
formulus/android/app/build/outputs/apk/**/**/*.apk
Expand Down
Loading
Loading