-
Notifications
You must be signed in to change notification settings - Fork 0
150 lines (132 loc) · 4.71 KB
/
Copy pathsnapshot.yml
File metadata and controls
150 lines (132 loc) · 4.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
name: Snapshot Build
on:
push:
branches:
- main
- feature/**
- enhancement/**
- fix/**
- chore/**
- claude/**
- codex/**
pull_request:
branches: [main]
workflow_dispatch:
inputs:
build_type:
description: 'Build type'
required: false
default: 'release'
type: choice
options:
- release
- debug
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: 'true'
concurrency:
group: snapshot-${{ github.event.pull_request.number || github.ref }}
cancel-in-progress: true
jobs:
build-snapshot:
if: >-
github.event_name == 'workflow_dispatch' ||
github.event_name == 'pull_request' ||
github.ref == 'refs/heads/main'
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Setup JDK 17
uses: actions/setup-java@v4
with:
distribution: temurin
java-version: 17
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Set Build Vars
id: build_vars
run: |
BUILD_TYPE="${{ github.event.inputs.build_type || 'release' }}"
if [ "$BUILD_TYPE" = "debug" ]; then
echo "GRADLE_TASK=assembleGithubSnapshotDebug" >> "$GITHUB_OUTPUT"
echo "APK_DIR=debug" >> "$GITHUB_OUTPUT"
echo "VERSION_SUFFIX=-debug" >> "$GITHUB_OUTPUT"
else
echo "GRADLE_TASK=assembleGithubSnapshotRelease" >> "$GITHUB_OUTPUT"
echo "APK_DIR=release" >> "$GITHUB_OUTPUT"
echo "VERSION_SUFFIX=" >> "$GITHUB_OUTPUT"
fi
- name: Decode Keystore
if: steps.build_vars.outputs.APK_DIR == 'release'
run: |
echo "${{ secrets.SIGNING_KEY }}" | base64 --decode > ${{ github.workspace }}/keystore.jks
- name: Set Version Vars
id: set_env
run: |
echo "TIMESTAMP=$(date +%Y%m%dT%H%M%S)" >> "$GITHUB_OUTPUT"
echo "COMMIT_SHA=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
- name: Build Snapshot APK
run: ./gradlew ${{ steps.build_vars.outputs.GRADLE_TASK }}
env:
SNAPSHOT_VERSION_NAME: ${{ steps.set_env.outputs.TIMESTAMP }}-${{ steps.set_env.outputs.COMMIT_SHA }}${{ steps.build_vars.outputs.VERSION_SUFFIX }}
KEY_ALIAS: ${{ secrets.ALIAS }}
KEYSTORE_PASSWORD: ${{ secrets.KEY_STORE_PASSWORD }}
KEY_PASSWORD: ${{ secrets.KEY_PASSWORD }}
KEYSTORE: ${{ github.workspace }}/keystore.jks
- name: Create Checksum
id: create_checksum
run: |
FILENAME=$(echo app/build/outputs/apk/githubSnapshot/${{ steps.build_vars.outputs.APK_DIR }}/*.apk)
sha256sum $FILENAME > checksums.txt
echo "ARTIFACT_FILENAME=$FILENAME" >> "$GITHUB_OUTPUT"
# Every run produces a tester-downloadable snapshot artifact.
- name: Upload Snapshot Artifact
uses: actions/upload-artifact@v4
with:
name: tester-snapshot-${{ steps.build_vars.outputs.APK_DIR }}
path: |
${{ steps.create_checksum.outputs.ARTIFACT_FILENAME }}
checksums.txt
retention-days: 7
publish-latest-snapshot:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
needs: build-snapshot
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download Snapshot Artifact
uses: actions/download-artifact@v4
with:
name: tester-snapshot-release
path: ./artifacts
- name: Update Latest Snapshot Release
uses: joutvhu/create-tag@v1
with:
tag_name: latest-snapshot
tag_sha: ${{ github.sha }}
message: latest-snapshot
on_tag_exists: update
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Publish to GitHub Releases
uses: ncipollo/release-action@v1.16.0
with:
allowUpdates: true
prerelease: true
name: MyDeck Continuous Snapshot
body: |
This is an automated snapshot build from the `main` branch. It is a **Release-optimized** build but uses a separate package ID so it can be installed alongside your production version.
**Last updated from:** ${{ github.sha }}
commit: ${{ github.sha }}
tag: latest-snapshot
removeArtifacts: true
omitDraftDuringUpdate: true
artifacts: "./artifacts/*.apk,./artifacts/checksums.txt"
token: ${{ secrets.GITHUB_TOKEN }}