Skip to content

Commit 39dc6fb

Browse files
authored
Self-hosted runners for builds (#74)
**What does this PR do?** It changes the build workflow to utilize our newly installed self-hosted runners **Why is this change needed?** We need these runners to circumvent the free GitHub compute time
1 parent 9f50881 commit 39dc6fb

File tree

4 files changed

+140
-34
lines changed

4 files changed

+140
-34
lines changed

.github/workflows/build.yml

Lines changed: 64 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,47 @@ on:
77

88
concurrency:
99
group: ${{ github.workflow }}-${{ github.ref }}
10-
cancel-in-progress: true
1110

1211
jobs:
12+
check-runner:
13+
runs-on: ubuntu-latest
14+
15+
outputs:
16+
runner-label: ${{ steps.set-runner.outputs.runner-label }}
17+
18+
steps:
19+
- name: Set runner
20+
id: set-runner
21+
run: |
22+
runners=$(curl -v -s -H "Accept: application/vnd.github+json" -H "Authorization: token ${{ secrets.REPO_ACCESS_TOKEN }}" "https://api.github.com/repos/${{ github.repository }}/actions/runners" --http1.1)
23+
if [ $? -ne 0 ]; then
24+
echo "Error: Failed to fetch runners from GitHub API" >&2
25+
exit 1
26+
fi
27+
28+
runners_count=$(echo "$runners" | jq '.runners | length')
29+
if [ "$runners_count" -eq 0 ]; then
30+
echo "No runners available or failed to retrieve runners." >&2
31+
echo "runner-label=ubuntu-latest" >> $GITHUB_OUTPUT
32+
exit 0
33+
fi
34+
35+
available=$(echo "$runners" | jq '.runners[] | select(.status == "online" and .busy == false and .labels[] .name == "self-hosted")')
36+
if [ $? -ne 0 ]; then
37+
echo "Error: Failed to parse JSON response" >&2
38+
exit 1
39+
fi
40+
41+
if [ -n "$available" ]; then
42+
echo "runner-label=lambda-linux-runner" >> $GITHUB_OUTPUT
43+
else
44+
echo "runner-label=ubuntu-latest" >> $GITHUB_OUTPUT
45+
fi
1346
build:
47+
needs: check-runner
48+
runs-on: ${{ needs.check-runner.outputs.runner-label }}
49+
1450
name: Build Lambda
15-
runs-on: ubuntu-latest
1651
permissions:
1752
contents: write
1853
env:
@@ -21,6 +56,9 @@ jobs:
2156
- name: Checkout Repository
2257
uses: actions/checkout@v4.1.1
2358

59+
- name: Set current date as env variable
60+
run: echo "DATE=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV
61+
2462
- name: Get Short Commit Hash
2563
id: vars
2664
run: echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
@@ -32,8 +70,6 @@ jobs:
3270
java-version: '17'
3371
architecture: x64
3472
cache: 'gradle'
35-
cache-dependency-path: |
36-
build.gradle.kts
3773

3874
- name: Read Gradle Properties
3975
uses: BrycensRanch/read-properties-action@v1.0.4
@@ -43,22 +79,34 @@ jobs:
4379
all: true
4480

4581
- name: Build Lambda
46-
run: ./gradlew --build-cache build
47-
82+
run: ./gradlew build
83+
4884
- name: Upload Lambda Fabric
49-
uses: actions/upload-artifact@v4.3.6
85+
uses: ryand56/r2-upload-action@latest
5086
with:
51-
name: lambda-fabric-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}-${{ env.COMMIT_HASH }}
52-
path: fabric/build/libs/
53-
87+
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
88+
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY }}
89+
r2-secret-access-key: ${{ secrets.R2_ACCESS_SECRET }}
90+
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
91+
source-dir: './fabric/build/libs/lambda-fabric-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}.jar'
92+
destination-dir: ${{ env.DATE }}-${{ env.COMMIT_HASH }}
93+
5494
- name: Upload Lambda Forge
55-
uses: actions/upload-artifact@v4.3.6
95+
uses: ryand56/r2-upload-action@latest
5696
with:
57-
name: lambda-forge-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}-${{ env.COMMIT_HASH }}
58-
path: forge/build/libs/
97+
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
98+
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY }}
99+
r2-secret-access-key: ${{ secrets.R2_ACCESS_SECRET }}
100+
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
101+
source-dir: './forge/build/libs/lambda-forge-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}.jar'
102+
destination-dir: ${{ env.DATE }}-${{ env.COMMIT_HASH }}
59103

60104
- name: Upload Lambda API
61-
uses: actions/upload-artifact@v4.3.6
105+
uses: ryand56/r2-upload-action@latest
62106
with:
63-
name: lambda-api-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}-${{ env.COMMIT_HASH }}
64-
path: common/build/libs/
107+
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
108+
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY }}
109+
r2-secret-access-key: ${{ secrets.R2_ACCESS_SECRET }}
110+
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
111+
source-dir: './common/build/libs/lambda-api-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}.jar'
112+
destination-dir: ${{ env.DATE }}-${{ env.COMMIT_HASH }}

.github/workflows/release.yml

Lines changed: 63 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,45 @@ concurrency:
1010
cancel-in-progress: true
1111

1212
jobs:
13-
build_and_release:
14-
name: Build and Release Lambda
13+
check-runner:
1514
runs-on: ubuntu-latest
15+
16+
outputs:
17+
runner-label: ${{ steps.set-runner.outputs.runner-label }}
18+
19+
steps:
20+
- name: Set runner
21+
id: set-runner
22+
run: |
23+
runners=$(curl -v -s -H "Accept: application/vnd.github+json" -H "Authorization: token ${{ secrets.REPO_ACCESS_TOKEN }}" "https://api.github.com/repos/${{ github.repository }}/actions/runners" --http1.1)
24+
if [ $? -ne 0 ]; then
25+
echo "Error: Failed to fetch runners from GitHub API" >&2
26+
exit 1
27+
fi
28+
29+
runners_count=$(echo "$runners" | jq '.runners | length')
30+
if [ "$runners_count" -eq 0 ]; then
31+
echo "No runners available or failed to retrieve runners." >&2
32+
echo "runner-label=ubuntu-latest" >> $GITHUB_OUTPUT
33+
exit 0
34+
fi
35+
36+
available=$(echo "$runners" | jq '.runners[] | select(.status == "online" and .busy == false and .labels[] .name == "self-hosted")')
37+
if [ $? -ne 0 ]; then
38+
echo "Error: Failed to parse JSON response" >&2
39+
exit 1
40+
fi
41+
42+
if [ -n "$available" ]; then
43+
echo "runner-label=lambda-linux-runner" >> $GITHUB_OUTPUT
44+
else
45+
echo "runner-label=ubuntu-latest" >> $GITHUB_OUTPUT
46+
fi
47+
build:
48+
needs: check-runner
49+
runs-on: ${{ needs.check-runner.outputs.runner-label }}
50+
51+
name: Build and Release Lambda
1652
permissions:
1753
contents: write
1854
env:
@@ -21,6 +57,9 @@ jobs:
2157
- name: Checkout Repository
2258
uses: actions/checkout@v4.1.1
2359

60+
- name: Set current date as env variable
61+
run: echo "DATE=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV
62+
2463
- name: Get Short Commit Hash
2564
id: vars
2665
run: echo "COMMIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
@@ -32,8 +71,6 @@ jobs:
3271
java-version: '17'
3372
architecture: x64
3473
cache: 'gradle'
35-
cache-dependency-path: |
36-
build.gradle.kts
3774

3875
- name: Read Gradle Properties
3976
uses: BrycensRanch/read-properties-action@v1.0.4
@@ -43,25 +80,37 @@ jobs:
4380
all: true
4481

4582
- name: Build Lambda
46-
run: ./gradlew --build-cache build
83+
run: ./gradlew build
4784

4885
- name: Upload Lambda Fabric
49-
uses: actions/upload-artifact@v4.3.6
86+
uses: ryand56/r2-upload-action@latest
5087
with:
51-
name: lambda-fabric-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}-${{ env.COMMIT_HASH }}
52-
path: fabric/build/libs/
88+
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
89+
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY }}
90+
r2-secret-access-key: ${{ secrets.R2_ACCESS_SECRET }}
91+
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
92+
source-dir: './fabric/build/libs/lambda-fabric-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}.jar'
93+
destination-dir: ${{ env.DATE }}-${{ env.COMMIT_HASH }}
5394

5495
- name: Upload Lambda Forge
55-
uses: actions/upload-artifact@v4.3.6
96+
uses: ryand56/r2-upload-action@latest
5697
with:
57-
name: lambda-forge-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}-${{ env.COMMIT_HASH }}
58-
path: forge/build/libs/
98+
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
99+
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY }}
100+
r2-secret-access-key: ${{ secrets.R2_ACCESS_SECRET }}
101+
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
102+
source-dir: './forge/build/libs/lambda-forge-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}.jar'
103+
destination-dir: ${{ env.DATE }}-${{ env.COMMIT_HASH }}
59104

60105
- name: Upload Lambda API
61-
uses: actions/upload-artifact@v4.3.6
106+
uses: ryand56/r2-upload-action@latest
62107
with:
63-
name: lambda-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}-${{ env.COMMIT_HASH }}
64-
path: common/build/libs/
108+
r2-account-id: ${{ secrets.R2_ACCOUNT_ID }}
109+
r2-access-key-id: ${{ secrets.R2_ACCESS_KEY }}
110+
r2-secret-access-key: ${{ secrets.R2_ACCESS_SECRET }}
111+
r2-bucket: ${{ secrets.R2_BUCKET_NAME }}
112+
source-dir: './common/build/libs/lambda-api-${{ steps.all.outputs.modVersion }}+${{ steps.all.outputs.minecraftVersion }}.jar'
113+
destination-dir: ${{ env.DATE }}-${{ env.COMMIT_HASH }}
65114

66115
- name: Create Release
67116
uses: softprops/action-gh-release@v2.0.8

common/build.gradle.kts

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
1+
val modVersion: String by project
2+
val minecraftVersion: String by project
13
val modId: String by project
24
val fabricLoaderVersion: String by project
35
val kotlinxCoroutinesVersion: String by project
46
val discordIPCVersion: String by project
57

8+
base.archivesName = "${base.archivesName.get()}-api"
9+
610
architectury { common("fabric", "forge") }
711

812
loom {
@@ -31,6 +35,12 @@ dependencies {
3135
modImplementation("baritone-api:baritone-unoptimized-fabric:1.10.2")
3236
}
3337

34-
tasks.test {
35-
useJUnitPlatform()
38+
tasks {
39+
remapJar {
40+
archiveVersion = "$modVersion+$minecraftVersion"
41+
}
42+
43+
test {
44+
useJUnitPlatform()
45+
}
3646
}

gradle.properties

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ kotlinForgeVersionMax=4.11.0
3434
kotlin.code.style=official
3535

3636
# Gradle https://gradle.org/
37-
org.gradle.jvmargs=-Xmx2048M \
38-
-XX:MaxMetaspaceSize=256m \
37+
org.gradle.jvmargs=-Xmx8192M \
3938
-XX:+HeapDumpOnOutOfMemoryError
4039
org.gradle.parallel=true

0 commit comments

Comments
 (0)