Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
10 changes: 5 additions & 5 deletions .github/workflows/analysis.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@ on:
branches:
- main
paths:
- "adc-analysis/**"
- "particeps-analysis/**"
- "protocol/v1/**"
- "tools/generate_protocol_vectors.mjs"
- "tools/validate_protocol_vectors.py"
- ".github/workflows/analysis.yml"
pull_request:
paths:
- "adc-analysis/**"
- "particeps-analysis/**"
- "protocol/v1/**"
- "tools/generate_protocol_vectors.mjs"
- "tools/validate_protocol_vectors.py"
Expand All @@ -33,7 +33,7 @@ jobs:
timeout-minutes: 20
defaults:
run:
working-directory: adc-analysis
working-directory: particeps-analysis

steps:
- name: Check out source
Expand All @@ -46,9 +46,9 @@ jobs:
with:
version: "0.11.26"
python-version: "3.13"
working-directory: adc-analysis
working-directory: particeps-analysis
enable-cache: true
cache-dependency-glob: adc-analysis/uv.lock
cache-dependency-glob: particeps-analysis/uv.lock

- name: Install locked dependencies
run: uv sync --locked
Expand Down
5 changes: 3 additions & 2 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,7 @@ jobs:
python3 tools/catalog.py check
python3 tools/catalog_parity.py
python3 tools/validate_protocol_vectors.py
python3 tools/retired_identity_audit.py
python3 -m unittest discover -s tools/tests -v

# The wrapper JAR is a binary in the tree; this checks it against Gradle's published
Expand Down Expand Up @@ -100,15 +101,15 @@ jobs:
./gradlew --no-daemon
-I tools/protocol-conformance.init.gradle
:core:export:test
--tests adc.conformance.ProtocolConformanceTest
--tests particeps.conformance.ProtocolConformanceTest

- name: Enforce collector capability boundary
run: python3 tools/collector_assurance.py

- name: Upload debug APK
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: android-data-collector-debug-${{ github.sha }}
name: particeps-debug-${{ github.sha }}
path: app/build/outputs/apk/debug/app-debug.apk
if-no-files-found: error
retention-days: 14
11 changes: 6 additions & 5 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -114,9 +114,9 @@ jobs:
run: |
umask 077
mkdir -p .signing
printf '%s' "$KEYSTORE_BASE64" | base64 --decode > .signing/android-data-collector-release.jks
printf '%s' "$KEYSTORE_BASE64" | base64 --decode > .signing/particeps-release.jks
{
printf 'storeFile=.signing/android-data-collector-release.jks\n'
printf 'storeFile=.signing/particeps-release.jks\n'
printf 'storePassword=%s\n' "$KEYSTORE_PASSWORD"
printf 'keyAlias=%s\n' "$KEY_ALIAS"
printf 'keyPassword=%s\n' "$KEY_PASSWORD"
Expand All @@ -134,11 +134,12 @@ jobs:
python3 tools/catalog.py check
python3 tools/catalog_parity.py
python3 tools/validate_protocol_vectors.py
python3 tools/retired_identity_audit.py
python3 tools/collector_assurance.py
./gradlew --no-daemon \
-I tools/protocol-conformance.init.gradle \
:core:export:test \
--tests adc.conformance.ProtocolConformanceTest
--tests particeps.conformance.ProtocolConformanceTest

- name: Verify and package signed APK
id: signed_apk
Expand All @@ -147,7 +148,7 @@ jobs:
build_tools="$ANDROID_SDK_ROOT/build-tools/$ANDROID_BUILD_TOOLS_VERSION"
signed_apk="app/build/outputs/apk/release/app-release.apk"
release_dir="$RUNNER_TEMP/android-release"
release_apk="$release_dir/android-data-collector-$GITHUB_REF_NAME.apk"
release_apk="$release_dir/particeps-$GITHUB_REF_NAME.apk"

test -f "$signed_apk"
mkdir -p "$release_dir"
Expand Down Expand Up @@ -185,4 +186,4 @@ jobs:

- name: Remove materialized signing files
if: always()
run: rm -f .signing/android-data-collector-release.jks .signing/release-signing.properties
run: rm -f .signing/particeps-release.jks .signing/release-signing.properties
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -57,6 +57,6 @@ bin/
*-private.json
*.jks
*.keystore
*.adcexp
*.partexp
!researcher-tools/examples/INSECURE-demo-signing-private.key
!researcher-tools/examples/INSECURE-demo-hpke-private.key
24 changes: 14 additions & 10 deletions CITATION.cff
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
cff-version: 1.2.0
title: Android Data Collector
title: Particeps
message: If you use this software in published work, please cite it.
type: software
authors:
Expand All @@ -8,13 +8,13 @@ authors:
family-names: Lin
alias: JacobLinCool
email: jacoblincool@gmail.com
repository-code: https://github.com/JacobLinCool/android-data-collector
url: https://github.com/JacobLinCool/android-data-collector
repository-code: https://github.com/JacobLinCool/particeps
url: https://github.com/JacobLinCool/particeps
abstract: >-
A local-first, participant-controlled Android platform for research data
collection. Study content is fixed by an Ed25519-signed configuration that can
only select collectors already compiled into the application. Events are
encrypted on device with a non-exportable Android Keystore key. Data reaches
Particeps is a local-first, participant-first Android platform for research
data collection. Study content is fixed by an Ed25519-signed configuration
that can only select collectors already compiled into the application. Events
are encrypted on device with a non-exportable Android Keystore key. Data reaches
the research team as a bundle encrypted to the researcher's HPKE public key,
either through a participant-initiated export or, when the signed
configuration declares an endpoint and the consent screen discloses it,
Expand All @@ -28,6 +28,10 @@ keywords:
- participant control
- android
license: MIT
# TODO: update version and date-released at each tagged release.
version: 1.0.0-rc.3
date-released: "2026-08-05"
# No `version` or `date-released` here, on purpose. Every tag this repository has published
# (v1.0.0-rc.1 through v1.0.0-rc.3) predates the rename: those builds carry the pre-rename
# identity, a different applicationId, and different file formats, and the project does not
# support them. Naming one of them as a version of Particeps would cite a release that does
# not exist, so this file cites the repository instead and a citation of it carries no version.
# TODO: when the first post-rename tag ships, add `version` and `date-released` back as part of
# cutting it, and keep updating both at each tagged release thereafter.
Loading
Loading