-
Notifications
You must be signed in to change notification settings - Fork 50
160 lines (135 loc) · 5.21 KB
/
build.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
153
154
155
156
157
158
159
160
name: CI
on:
push:
branches:
- '**' # Run on all branches, ignore tags.
pull_request:
env:
GRADLE_OPTS: "-Dorg.gradle.internal.launcher.welcomeMessageEnabled=false"
concurrency:
cancel-in-progress: true
group: build-${{ github.event.pull_request.number || github.event.after }}
jobs:
test-matrix:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
tasks: check
- os: windows-latest
tasks: mingwX64Test
- os: macos-13
tasks: macosX64Test iosX64Test tvosX64Test watchosX64Test
- os: macos-latest
tasks: macosArm64Test iosSimulatorArm64Test tvosSimulatorArm64Test watchosSimulatorArm64Test
runs-on: ${{ matrix.os }}
name: Test on ${{ matrix.os }}
steps:
- name: Check out code
uses: actions/[email protected]
with:
fetch-depth: 0
- name: Validate Gradle wrapper
uses: gradle/actions/[email protected]
- name: Set up JDK
uses: actions/[email protected]
with:
java-version: 17
distribution: temurin
- name: Setup Gradle
uses: gradle/actions/[email protected]
- name: Cache konan dependencies
uses: actions/cache@v4
with:
path: ~/.konan
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Build
run: ./gradlew ${{ matrix.tasks }}
publish:
name: "Build and Publish"
needs:
- test-matrix
runs-on: macos-latest
env:
TERM: xterm-256color
GPG_KEY_ID: 6D76AD03 # Run `gpg -K` to get this, take last eight characters
permissions:
contents: write # Required to be able to publish releases, see https://docs.github.com/en/rest/reference/permissions-required-for-github-apps#permission-on-contents
issues: write
pull-requests: write
steps:
- name: Check out code
uses: actions/[email protected]
with:
fetch-depth: 0
- name: Validate Gradle wrapper
uses: gradle/actions/[email protected]
- name: Set up JDK
uses: actions/[email protected]
with:
java-version: 17
distribution: temurin
- name: Setup Node.js
uses: actions/[email protected]
with:
node-version: 20
- name: Setup Gradle
uses: gradle/actions/[email protected]
- name: Cache konan dependencies
uses: actions/cache@v4
with:
path: ~/.konan
key: ${{ runner.os }}-gradle-${{ hashFiles('*.gradle.kts') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Install release tooling
run: npm --prefix=.github/workflows/release clean-install
- name: Create release
run: npx --prefix=.github/workflows/release semantic-release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: github.repository == 'charleskorn/kaml' && github.ref == 'refs/heads/main' && github.event_name == 'push'
- name: Build
run: ./gradlew assemble
- name: Get tag
id: get_tag
run: |
echo "Local changes, if any:"
git status
if git describe --tags --abbrev=0 --exact-match >/dev/null; then
tag=$(git describe --tags --abbrev=0 --exact-match)
echo "Found tag $tag."
echo "tag=$tag" >> $GITHUB_OUTPUT
else
echo "git describe failed, skipping release:"
git describe --tags --abbrev=0 --exact-match
echo "skip=true" >> $GITHUB_OUTPUT
fi
if: github.repository == 'charleskorn/kaml' && github.ref == 'refs/heads/main' && github.event_name == 'push'
- name: Assemble release
run: ./gradlew assembleRelease
env:
GPG_KEY_RING: ${{ secrets.GPG_KEY_RING }} # Run `gpg --export-secret-keys "<key user name goes here>" | base64` to get this
GPG_KEY_PASSPHRASE: ${{ secrets.GPG_KEY_PASSPHRASE }}
if: github.repository == 'charleskorn/kaml' && github.ref == 'refs/heads/main' && github.event_name == 'push' && steps.get_tag.outputs.skip != 'true'
- name: Publish release
run: ./gradlew publishRelease
env:
OSSRH_USERNAME: ${{ secrets.OSSRH_USERNAME }}
OSSRH_PASSWORD: ${{ secrets.OSSRH_PASSWORD }}
GPG_KEY_RING: ${{ secrets.GPG_KEY_RING }} # Run `gpg --export-secret-keys "<key user name goes here>" | base64` to get this
GPG_KEY_PASSPHRASE: ${{ secrets.GPG_KEY_PASSPHRASE }}
if: github.repository == 'charleskorn/kaml' && github.ref == 'refs/heads/main' && github.event_name == 'push' && steps.get_tag.outputs.skip != 'true'
- name: Add artifacts to GitHub release
uses: softprops/[email protected]
with:
tag_name: ${{ steps.get_tag.outputs.tag }}
files: build/release/*
fail_on_unmatched_files: true
draft: false
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
if: github.repository == 'charleskorn/kaml' && github.ref == 'refs/heads/main' && github.event_name == 'push' && steps.get_tag.outputs.skip != 'true'