From 4de567b989ca9080ba90f8bda8fbcda82faf5d3e Mon Sep 17 00:00:00 2001 From: Yamada_Ika <73375669+Yamada-Ika@users.noreply.github.com> Date: Sun, 21 Jul 2024 21:27:02 +0900 Subject: [PATCH] chore: enable apk distribution --- .github/workflows/build.yml | 40 ++++++++++ .github/workflows/drop-staging.yml | 31 ++++++++ .github/workflows/stage-app-pull-request.yml | 80 ++++++++++++++++++++ .github/workflows/stage-app-push.yml | 50 ++++++++++++ 4 files changed, 201 insertions(+) create mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/drop-staging.yml create mode 100644 .github/workflows/stage-app-pull-request.yml create mode 100644 .github/workflows/stage-app-push.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 000000000..1348af14e --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,40 @@ +name: build +# From now in android +# https://github.com/android/nowinandroid + +on: + push: + branches: + - main + pull_request: + paths-ignore: + - 'app-ios/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.head_ref || github.ref }} + cancel-in-progress: true + +permissions: {} + +jobs: + build: + permissions: + contents: read + + runs-on: ubuntu-latest + timeout-minutes: 60 + + steps: + - name: Checkout + uses: actions/checkout@v4.1.7 + + - uses: ./.github/actions/setup-java + + - run: ./gradlew :app-android:assemble --stacktrace + + - name: Upload build outputs (APKs) + uses: actions/upload-artifact@v4.3.4 + with: + name: build-outputs + path: app-android/build/outputs + retention-days: 14 diff --git a/.github/workflows/drop-staging.yml b/.github/workflows/drop-staging.yml new file mode 100644 index 000000000..cadf4a118 --- /dev/null +++ b/.github/workflows/drop-staging.yml @@ -0,0 +1,31 @@ +name: drop-staging + +on: + pull_request: + types: [closed] + +# Disable all permissions. We have to enable required permissions at job-level. +permissions: {} + +jobs: + drop-stage: + name: "Drop from staging" + + runs-on: ubuntu-latest + + permissions: + contents: read # for checkout + + steps: + - uses: actions/checkout@v4.1.7 + with: + repository: droidkaigi/conference-app-2024 + ref: gh-actions + path: gh-actions + - uses: ./gh-actions/actions/destroy-distribution-by-name + with: + api-token: ${{ secrets.DEPLOYGATE_API_TOKEN }} + app-owner-name: droidkaigi + platform: android + app-id: io.github.droidkaigi.confsched2023.dev + distribution-name: ${{ format('debug/refs/pull/{0}/head', github.event.pull_request.number) }} diff --git a/.github/workflows/stage-app-pull-request.yml b/.github/workflows/stage-app-pull-request.yml new file mode 100644 index 000000000..a9b0aefd6 --- /dev/null +++ b/.github/workflows/stage-app-pull-request.yml @@ -0,0 +1,80 @@ +name: stage-app-pull-request + +on: + workflow_run: + workflows: + - build + types: + - completed + +# Disable all permissions. We have to enable required permissions at job-level. +permissions: {} + +jobs: + stage-epic: + if: > + github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' + + permissions: + actions: read # for listJobsForWorkflowRun and listWorkflowRunArtifacts + contents: read # for checkout + deployments: write # for create-deployment + pull-requests: read # for listing pull requests + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4.1.7 + with: + repository: droidkaigi/conference-app-2024 + ref: gh-actions + path: gh-actions + - name: Download build outputs (APKs) + uses: actions/download-artifact@v4.1.8 + with: + name: build-outputs + path: ~/build-outputs + - uses: ./gh-actions/actions/find-files + id: find-dev-debug-apk + with: + pattern: "~/build-outputs/**/app-android-dev-debug.apk" + - uses: ./gh-actions/actions/create-deployment + id: create-deployment + with: + github-token: ${{ github.token }} + ref: refs/pull/${{ fromJSON(steps.get-pr.outputs.result).number }}/head + sha: ${{ fromJSON(steps.get-pr.outputs.result).head.sha }} + artifact-name: build-outputs + environment: deploygate-distribution + - uses: jmatsu/dg-upload-app-action@v0.2 + id: upload + continue-on-error: true + with: + app_owner_name: droidkaigi + api_token: ${{ secrets.DEPLOYGATE_API_TOKEN }} + app_file_path: ${{ fromJSON(steps.find-dev-debug-apk.outputs.paths)[0] }} + message: GitHub Actions have staged an artifact of ${{ fromJSON(steps.get-pr.outputs.result).number }}/head / ${{ fromJSON(steps.get-pr.outputs.result).head.sha }} + distribution_find_by: name + distribution_id: ${{ format('debug/refs/pull/{0}/head', fromJSON(steps.get-pr.outputs.result).number) }} + release_note: ${{ format('Workflow {0}/{1} based on {2}', github.run_id , github.run_number , fromJSON(steps.get-pr.outputs.result).head.sha) }} + pin: false + - name: generate properties based on upload step's status + id: deployment-properties + if: steps.upload.conclusion == 'success' + run: | + if [[ "${{ steps.upload.outcome }}" == "success" ]]; then + echo "deployment-url=${{ steps.upload.outputs.distribution_url }}" >> "$GITHUB_OUTPUT" + echo "description=Deployed an app successfully. Please try it through DeployGate!" >> "$GITHUB_OUTPUT" + else + echo "deployment-url=$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" >> "$GITHUB_OUTPUT" + echo "description=Staging an app failed. Please check the workflow." >> "$GITHUB_OUTPUT" + fi + - uses: ./gh-actions/actions/commit-deployment + if: steps.upload.conclusion == 'success' + with: + github-token: ${{ github.token }} + deployment-id: ${{ fromJSON(steps.create-deployment.outputs.deployment).id }} + state: ${{ steps.upload.outcome }} + deployment-url: ${{ steps.deployment-properties.outputs.deployment-url }} + description: ${{ steps.deployment-properties.outputs.description }} diff --git a/.github/workflows/stage-app-push.yml b/.github/workflows/stage-app-push.yml new file mode 100644 index 000000000..aadc8e0a9 --- /dev/null +++ b/.github/workflows/stage-app-push.yml @@ -0,0 +1,50 @@ +name: stage-app-push + +on: + workflow_run: + workflows: + - build + types: + - completed + +# Disable all permissions. We have to enable required permissions at job-level. +permissions: {} + +jobs: + stage-default: + if: > + github.event.workflow_run.event == 'push' && + github.event.workflow_run.conclusion == 'success' + + permissions: + actions: read # for listing workflow run artifacts + contents: read # for checkout + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@@v4.1.7 + with: + repository: droidkaigi/conference-app-2024 + ref: gh-actions + path: gh-actions + - name: Download build outputs (APKs) + uses: actions/download-artifact@v4.1.8 + with: + name: build-outputs + path: ~/build-outputs + - uses: ./gh-actions/actions/find-files + id: find-dev-debug-apk + with: + pattern: "~/build-outputs/**/app-android-dev-debug.apk" + - uses: jmatsu/dg-upload-app-action@v0.2 + id: upload + with: + app_owner_name: droidkaigi + api_token: ${{ secrets.DEPLOYGATE_API_TOKEN }} + app_file_path: ${{ fromJSON(steps.find-dev-debug-apk.outputs.paths)[0] }} + message: GitHub Actions have staged an artifact of ${{ github.ref }} / ${{ github.sha }} + distribution_find_by: name + distribution_id: ${{ format('staging/{0}', github.ref) }} + release_note: ${{ format('[main] Workflow {0}/{1} based on {2}', github.run_id , github.run_number , github.sha) }} + pin: false