Compare commits
8
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
6bd6207bbc
|
||
|
|
63fca899a9 | ||
|
|
88da04a124 | ||
|
|
0b88114c81 | ||
|
|
cd034e0aab | ||
|
|
674246bbe8 | ||
|
|
5c9a829f7f | ||
|
|
f49fc8e3d2 |
No files matched your search
+10
-164
@@ -1,168 +1,14 @@
|
||||
version: 2.1
|
||||
|
||||
setup: true
|
||||
orbs:
|
||||
android: circleci/android@2.5.0
|
||||
gcp-cli: circleci/gcp-cli@3.2.2
|
||||
|
||||
jobs:
|
||||
unit-test:
|
||||
executor:
|
||||
name: android/android-machine
|
||||
tag: default
|
||||
steps:
|
||||
- checkout
|
||||
- android/restore-gradle-cache
|
||||
- android/run-tests:
|
||||
test-command: ./gradlew testDebug
|
||||
- android/save-gradle-cache
|
||||
- run:
|
||||
name: Save test results
|
||||
command: |
|
||||
mkdir -p ~/test-results/junit/
|
||||
find . -type f -regex ".*/build/test-results/.*xml" -exec cp {} ~/test-results/junit/ \;
|
||||
when: always
|
||||
- store_test_results:
|
||||
path: ~/test-results
|
||||
- store_artifacts:
|
||||
path: ~/test-results/junit
|
||||
|
||||
android-test:
|
||||
parameters:
|
||||
system-image:
|
||||
type: string
|
||||
default: system-images;android-30;google_apis;x86
|
||||
executor:
|
||||
name: android/android-machine
|
||||
tag: default
|
||||
steps:
|
||||
- checkout
|
||||
- android/start-emulator-and-run-tests:
|
||||
test-command: ./gradlew connectedDebugAndroidTest
|
||||
system-image: << parameters.system-image >>
|
||||
- run:
|
||||
name: Save test results
|
||||
command: |
|
||||
mkdir -p ~/test-results/junit/
|
||||
find . -type f -regex ".*/build/outputs/androidTest-results/.*xml" -exec cp {} ~/test-results/junit/ \;
|
||||
when: always
|
||||
- store_test_results:
|
||||
path: ~/test-results
|
||||
- store_artifacts:
|
||||
path: ~/test-results/junit
|
||||
|
||||
benchmarks-ftl:
|
||||
executor:
|
||||
name: android/android-docker
|
||||
tag: default
|
||||
steps:
|
||||
- checkout
|
||||
- android/restore-gradle-cache
|
||||
- run:
|
||||
name: Build app and test app
|
||||
command: ./gradlew app:assembleRelease macrobenchmark:assemble
|
||||
- gcp-cli/initialize:
|
||||
gcloud-service-key: GCP_SA_KEY
|
||||
google-project-id: GCP_PROJECT_ID
|
||||
- run:
|
||||
name: run on FTL
|
||||
command: |
|
||||
gcloud firebase test android run \
|
||||
--type instrumentation \
|
||||
--app app/build/outputs/apk/release/app-release.apk \
|
||||
--test macrobenchmark/build/outputs/apk/release/macrobenchmark-release.apk \
|
||||
--device model=redfin:,version=30,locale=en,orientation=portrait \
|
||||
--directories-to-pull /sdcard/Download \
|
||||
--results-bucket gs://android-sample-benchmarks \
|
||||
--results-dir macrobenchmark \
|
||||
--environment-variables clearPackageData=true,additionalTestOutputDir=/sdcard/Download,no-isolated-storage=true
|
||||
- run:
|
||||
name: Download benchmark data
|
||||
command: |
|
||||
mkdir ~/benchmarks
|
||||
gsutil cp -r 'gs://android-sample-benchmarks/macrobenchmark/**/artifacts/sdcard/Download/*' ~/benchmarks
|
||||
gsutil rm -r gs://android-sample-benchmarks/macrobenchmark
|
||||
- store_artifacts:
|
||||
path: ~/benchmarks
|
||||
- run:
|
||||
name: Evaluate benchmark results
|
||||
command: node scripts/eval_startup_benchmark_output.js
|
||||
|
||||
maven-deploy:
|
||||
executor:
|
||||
name: android/android-machine
|
||||
tag: default
|
||||
steps:
|
||||
- checkout
|
||||
- android/restore-gradle-cache
|
||||
- run:
|
||||
name: Write credentials to gradle.properties
|
||||
command: |
|
||||
echo "" >> gradle.properties
|
||||
echo "githubQqqMavenRegistryUsername=${QQQ_ANDROID_MAVEN_REGISTRY_USERNAME}" >> gradle.properties
|
||||
echo "githubQqqMavenRegistryPassword=${QQQ_ANDROID_MAVEN_REGISTRY_PASSWORD}" >> gradle.properties
|
||||
- run:
|
||||
name: Publish (Deploy) to Maven
|
||||
command: |
|
||||
./gradlew publishMavenPublicationToGithubQqqMavenRegistryRepository
|
||||
|
||||
release-build:
|
||||
executor:
|
||||
name: android/android-docker
|
||||
tag: default
|
||||
steps:
|
||||
- checkout
|
||||
- android/restore-gradle-cache
|
||||
- run:
|
||||
name: Assemble release build
|
||||
command: |
|
||||
./gradlew assembleRelease
|
||||
- store_artifacts:
|
||||
path: app/build/outputs/apk/release/app-release-unsigned.apk
|
||||
|
||||
qqq-orb: kingsrook/qqq-orb@0.8
|
||||
workflows:
|
||||
test-and-build:
|
||||
setup:
|
||||
jobs:
|
||||
- unit-test
|
||||
|
||||
- android-test:
|
||||
filters:
|
||||
branches:
|
||||
## main will run all the versions below.
|
||||
ignore: main
|
||||
|
||||
## todo? - android-test:
|
||||
## todo? matrix:
|
||||
## todo? alias: android-test-all
|
||||
## todo? parameters:
|
||||
## todo? system-image:
|
||||
## todo? - system-images;android-35;google_apis;x86
|
||||
## todo? - system-images;android-34;google_apis;x86
|
||||
## todo? - system-images;android-33;google_apis;x86
|
||||
## todo? - system-images;android-32;google_apis;x86
|
||||
## todo? - system-images;android-31;google_apis;x86
|
||||
## todo? - system-images;android-30;google_apis;x86
|
||||
## todo? - system-images;android-29;google_apis;x86
|
||||
## todo? - system-images;android-28;google_apis;x86
|
||||
## todo? - system-images;android-27;google_apis;x86
|
||||
## todo? - system-images;android-26;google_apis;x86
|
||||
## todo? name: android-test-<<matrix.system-image>>
|
||||
## todo? filters:
|
||||
## todo? branches:
|
||||
## todo? only: main
|
||||
|
||||
## todo? - release-build:
|
||||
## todo? requires:
|
||||
## todo? - unit-test
|
||||
## todo? - android-test
|
||||
## todo? - android-test-all
|
||||
## todo? filters:
|
||||
## todo? branches:
|
||||
## todo? only: main
|
||||
|
||||
- maven-deploy:
|
||||
requires:
|
||||
- unit-test
|
||||
- android-test
|
||||
filters:
|
||||
branches:
|
||||
only: main
|
||||
- qqq-orb/generate_pipeline:
|
||||
orb_version: '0.8'
|
||||
filters:
|
||||
branches:
|
||||
ignore: automation/qbit-rc-pending
|
||||
tags:
|
||||
only: /.*/
|
||||
@@ -0,0 +1,103 @@
|
||||
name: Cache roundtrip fixture
|
||||
# Manual proof of the builtin runner cache plus the HTTPS artifact path.
|
||||
# Synthetic public data only. Requires the exact upstream actions/cache v4.2.3
|
||||
# (5a3ec84eff668545956fd18022155c47e93e2684), using the reviewed public upstream refs.
|
||||
on:
|
||||
workflow_dispatch:
|
||||
permissions:
|
||||
contents: read
|
||||
env:
|
||||
HOME: /tmp
|
||||
MARKER_DIR: /tmp/.m2/repository/kof-cache-roundtrip
|
||||
MARKER_FILE: /tmp/.m2/repository/kof-cache-roundtrip/marker.txt
|
||||
ARTIFACT_DIR: /tmp/cache-roundtrip/artifact
|
||||
DOWNLOAD_DIR: /tmp/cache-roundtrip/downloaded
|
||||
CACHE_KEY: kof-cache-roundtrip-${{ github.run_id }}-${{ github.run_attempt }}
|
||||
jobs:
|
||||
save:
|
||||
runs-on: android-build
|
||||
timeout-minutes: 15
|
||||
container:
|
||||
image: git.kof22.com/koftwentytwo/ci-android-runtime@sha256:838a1a494794a7c0705930e9a13d744498c6e01dc481a29bdda5ecae85f1a466
|
||||
options: --init --shm-size=256m --volume /var/lib/gitea-job-workspace:${{ github.workspace }}
|
||||
outputs:
|
||||
marker-sha256: ${{ steps.marker.outputs.sha256 }}
|
||||
steps:
|
||||
- name: Install the pinned action runtime without root
|
||||
run: |
|
||||
set -eu
|
||||
mkdir -p /tmp/java-actions-node
|
||||
curl -fsSL https://nodejs.org/dist/v22.20.0/node-v22.20.0-linux-x64.tar.gz -o /tmp/java-actions-node/node.tar.gz
|
||||
printf '%s\n' 'eeaccb0378b79406f2208e8b37a62479c70595e20be6b659125eb77dd1ab2a29 /tmp/java-actions-node/node.tar.gz' | sha256sum -c -
|
||||
tar -xzf /tmp/java-actions-node/node.tar.gz -C /tmp/java-actions-node --strip-components=1
|
||||
echo /tmp/java-actions-node/bin >> "$GITHUB_PATH"
|
||||
- name: Create the synthetic public marker and artifact
|
||||
id: marker
|
||||
run: |
|
||||
set -eu
|
||||
rm -rf "$MARKER_DIR" /tmp/cache-roundtrip
|
||||
mkdir -p "$MARKER_DIR" "$ARTIFACT_DIR"
|
||||
printf 'synthetic public cache marker %s\n' "$CACHE_KEY" > "$MARKER_FILE"
|
||||
printf 'synthetic public artifact marker %s\n' "$CACHE_KEY" > "$ARTIFACT_DIR/artifact.txt"
|
||||
echo "sha256=$(sha256sum "$MARKER_FILE" | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
|
||||
sha256sum "$MARKER_FILE" "$ARTIFACT_DIR/artifact.txt"
|
||||
- name: Save the cache entry
|
||||
uses: https://github.com/actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684
|
||||
with:
|
||||
path: /tmp/.m2/repository/kof-cache-roundtrip
|
||||
key: ${{ env.CACHE_KEY }}
|
||||
- name: Upload the artifact
|
||||
uses: self:KofTwentyTwo/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02
|
||||
with:
|
||||
name: cache-roundtrip-artifact
|
||||
path: /tmp/cache-roundtrip/artifact/artifact.txt
|
||||
if-no-files-found: error
|
||||
retention-days: 1
|
||||
restore:
|
||||
needs: save
|
||||
runs-on: android-build
|
||||
timeout-minutes: 15
|
||||
container:
|
||||
image: git.kof22.com/koftwentytwo/ci-android-runtime@sha256:838a1a494794a7c0705930e9a13d744498c6e01dc481a29bdda5ecae85f1a466
|
||||
options: --init --shm-size=256m --volume /var/lib/gitea-job-workspace:${{ github.workspace }}
|
||||
steps:
|
||||
- name: Install the pinned action runtime without root
|
||||
run: |
|
||||
set -eu
|
||||
mkdir -p /tmp/java-actions-node
|
||||
curl -fsSL https://nodejs.org/dist/v22.20.0/node-v22.20.0-linux-x64.tar.gz -o /tmp/java-actions-node/node.tar.gz
|
||||
printf '%s\n' 'eeaccb0378b79406f2208e8b37a62479c70595e20be6b659125eb77dd1ab2a29 /tmp/java-actions-node/node.tar.gz' | sha256sum -c -
|
||||
tar -xzf /tmp/java-actions-node/node.tar.gz -C /tmp/java-actions-node --strip-components=1
|
||||
echo /tmp/java-actions-node/bin >> "$GITHUB_PATH"
|
||||
- name: Start from a clean path
|
||||
run: |
|
||||
set -eu
|
||||
rm -rf "$MARKER_DIR" /tmp/cache-roundtrip
|
||||
mkdir -p "$DOWNLOAD_DIR"
|
||||
- name: Restore the cache entry
|
||||
id: restore
|
||||
uses: https://github.com/actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684
|
||||
with:
|
||||
path: /tmp/.m2/repository/kof-cache-roundtrip
|
||||
key: ${{ env.CACHE_KEY }}
|
||||
fail-on-cache-miss: true
|
||||
- name: Assert exact cache hit and marker checksum
|
||||
env:
|
||||
CACHE_HIT: ${{ steps.restore.outputs.cache-hit }}
|
||||
EXPECTED_SHA256: ${{ needs.save.outputs.marker-sha256 }}
|
||||
run: |
|
||||
set -eu
|
||||
[ "$CACHE_HIT" = 'true' ] || { echo "cache-hit was '$CACHE_HIT', expected true"; exit 1; }
|
||||
[ -n "$EXPECTED_SHA256" ] || { echo 'missing expected checksum'; exit 1; }
|
||||
printf '%s %s\n' "$EXPECTED_SHA256" "$MARKER_FILE" | sha256sum -c -
|
||||
- name: Download the artifact
|
||||
uses: self:KofTwentyTwo/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093
|
||||
with:
|
||||
name: cache-roundtrip-artifact
|
||||
path: /tmp/cache-roundtrip/downloaded
|
||||
- name: Assert artifact content
|
||||
run: |
|
||||
set -eu
|
||||
expected="synthetic public artifact marker $CACHE_KEY"
|
||||
[ "$(cat "$DOWNLOAD_DIR/artifact.txt")" = "$expected" ] || { echo 'artifact content mismatch'; exit 1; }
|
||||
sha256sum "$DOWNLOAD_DIR/artifact.txt"
|
||||
@@ -0,0 +1,3 @@
|
||||
profile: android
|
||||
orb_version: '0.8'
|
||||
default_branch: main
|
||||
@@ -10,7 +10,7 @@ publishing {
|
||||
repositories {
|
||||
maven {
|
||||
name = "githubQqqMavenRegistry"
|
||||
url = uri("https://maven.pkg.github.com/Kingsrook/qqq-maven-registry")
|
||||
url = uri("https://maven.pkg.github.com/QRun-IO/qqq-maven-registry")
|
||||
// username and password (a personal Github access token) should be specified as
|
||||
// `githubPackagesUsername` and `githubPackagesPassword` Gradle properties
|
||||
credentials(PasswordCredentials::class)
|
||||
|
||||
@@ -10,7 +10,7 @@ publishing {
|
||||
repositories {
|
||||
maven {
|
||||
name = "githubQqqMavenRegistry"
|
||||
url = uri("https://maven.pkg.github.com/Kingsrook/qqq-maven-registry")
|
||||
url = uri("https://maven.pkg.github.com/QRun-IO/qqq-maven-registry")
|
||||
// username and password (a personal Github access token) should be specified as
|
||||
// `githubPackagesUsername` and `githubPackagesPassword` Gradle properties
|
||||
credentials(PasswordCredentials::class)
|
||||
|
||||
Reference in new issue
Block a user