-
Notifications
You must be signed in to change notification settings - Fork 27
152 lines (134 loc) · 5.43 KB
/
build-release.yml
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
151
152
name: Build release (from macOS)
on:
workflow_dispatch:
inputs:
mavenPublish:
description: "Publish artifacts to Maven Central? non-empty to publish, empty to skip publish"
required: false
type: string
schedule:
- cron: "0 0 * * *"
pull_request:
branches:
- "**"
push:
branches:
- main
env:
ALL_ARCHS: 1
RELEASE: 1
CARGO_PROFILE_RELEASE_LTO: fat
ANDROID_NDK_VERSION: "27.0.12077973"
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}-${{ github.event.inputs.mavenPublish }}-release
cancel-in-progress: true
jobs:
build:
runs-on: macos-14
timeout-minutes: 180
steps:
- uses: actions/checkout@v4
- name: Fetch submodules
run: git submodule update --init
- name: Install/Set NDK version
run: |
export PATH="$PATH:$ANDROID_HOME/cmdline-tools/latest/bin"
./.github/scripts/install_ndk.sh ${ANDROID_NDK_VERSION}
./.github/scripts/purge_ndk.sh ${ANDROID_NDK_VERSION}
export ANDROID_NDK_LATEST_HOME="${ANDROID_SDK_ROOT}/ndk/${ANDROID_NDK_VERSION}"
echo "ANDROID_NDK_HOME=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
echo "ANDROID_NDK_ROOT=$ANDROID_NDK_LATEST_HOME" >> $GITHUB_ENV
- name: Configure JDK
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "21" # matches Anki-Android
- name: Install Windows cross compiler
run: brew install mingw-w64 && x86_64-w64-mingw32-gcc -v
- name: Install Linux cross compiler
run: |
brew tap SergioBenitez/osxct
brew install x86_64-unknown-linux-gnu
x86_64-unknown-linux-gnu-gcc -v
- name: Restore Rust Cache
uses: actions/cache/restore@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
anki/out/rust
anki/out/extracted
anki/out/node_modules
key: ${{ runner.os }}-rust-release-v7-${{ hashFiles('Cargo.lock') }}-${{ hashFiles('anki/yarn.lock') }}
restore-keys: |
${{ runner.os }}-rust-release-v7
- name: Setup N2
run: ./anki/tools/install-n2
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
timeout-minutes: 5
with:
# Only write to the cache for builds on the 'main' branches, stops branches evicting main cache
# Builds on other branches will only read from main branch cache writes
# Comment this and the with: above out for performance testing on a branch
cache-read-only: ${{ github.ref != 'refs/heads/main' }}
gradle-home-cache-cleanup: true
- name: Build all
# We use retries as the build fetches network resources and those may flake
uses: nick-fields/retry@v3
with:
timeout_minutes: 60
max_attempts: 3
retry_wait_seconds: 0
retry_on: error
command: cargo run -p build_rust
- name: Upload rsdroid AAR as artifact
uses: actions/upload-artifact@v4
with:
name: rsdroid-aar
if-no-files-found: error
path: rsdroid/build/outputs/aar
- name: Upload rsdroid-robo JAR as artifact
uses: actions/upload-artifact@v4
with:
name: rsdroid-robo
if-no-files-found: error
path: rsdroid-testing/build/libs
# following steps only run on workflow dispatch
- name: Publish AAR to Maven
if: "${{ github.event.inputs.mavenPublish != '' && github.event_name == 'workflow_dispatch'}}"
env:
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_PRIVATE_KEY }}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
run: |
./gradlew rsdroid:publishAllPublicationsToMavenCentral -DtestBuildType=release -Dorg.gradle.daemon=false -Dorg.gradle.console=plain
- name: Publish JAR to Maven
if: "${{ github.event.inputs.mavenPublish != '' && github.event_name == 'workflow_dispatch'}}"
env:
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_PRIVATE_KEY }}
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_PASSWORD }}
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
run: |
export ANKIDROID_LINUX_CC=x86_64-unknown-linux-gnu-gcc
export ANKIDROID_MACOS_CC=cc
export RUST_DEBUG=1
export RUST_BACKTRACE=1
export RUST_LOG=trace
export NO_CROSS=true
./gradlew rsdroid-testing:publishAllPublicationsToMavenCentral -Dorg.gradle.project.macCC=$ANKIDROID_MACOS_CC -DtestBuildType=debug -Dorg.gradle.daemon=false -Dorg.gradle.console=plain
- name: Save Rust Cache
uses: actions/cache/save@v4
if: github.ref == 'refs/heads/main'
with:
path: |
~/.cargo/registry
~/.cargo/git
target
anki/out/rust
anki/out/download
anki/out/node_modules
key: ${{ runner.os }}-rust-release-v7-${{ hashFiles('Cargo.lock') }}-${{ hashFiles('anki/yarn.lock') }}