Skip to content

Commit fb235e7

Browse files
authored
feat: distroless docker image (#1131)
1 parent 22838cc commit fb235e7

File tree

8 files changed

+139
-143
lines changed

8 files changed

+139
-143
lines changed

.github/workflows/build.yml

Lines changed: 92 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -10,41 +10,30 @@ on:
1010
- '.github/workflows/docs-pr.yml'
1111
workflow_call:
1212
secrets:
13+
DOCKER_REGISTRY:
14+
required: false
1315
DOCKER_USERNAME:
1416
required: false
1517
DOCKER_TOKEN:
1618
required: false
17-
DOCKER_REGISTRY:
18-
required: false
1919
DOCKER_IMAGE:
2020
required: false
2121
MAVEN_USERNAME:
2222
required: false
2323
MAVEN_PASSWORD:
2424
required: false
25-
ORG_GRADLE_PROJECT_mavenCentralPassword:
25+
MAVEN_CENTRAL_USERNAME:
2626
required: false
27-
ORG_GRADLE_PROJECT_mavenCentralUsername:
27+
MAVEN_CENTRAL_PASSWORD:
2828
required: false
29-
ORG_GRADLE_PROJECT_signingInMemoryKey:
29+
SIGNING_IN_MEMORY_KEY:
3030
required: false
31-
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword:
31+
SIGNING_IN_MEMORY_KEY_PASSWORD:
3232
required: false
3333

3434
jobs:
3535
build:
3636
runs-on: ubuntu-latest
37-
env:
38-
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
39-
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
40-
DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
41-
DOCKER_IMAGE: ${{ secrets.DOCKER_IMAGE }}
42-
MAVEN_USERNAME: ${{ vars.MAVEN_USERNAME }}
43-
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
44-
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.ORG_GRADLE_PROJECT_MAVENCENTRALPASSWORD }}
45-
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.ORG_GRADLE_PROJECT_MAVENCENTRALUSERNAME }}
46-
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGINMEMORYKEY }}
47-
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGINMEMORYKEYPASSWORD }}
4837
steps:
4938
- name: Checkout
5039
uses: actions/checkout@v4
@@ -56,56 +45,75 @@ jobs:
5645
java-version: 17
5746

5847
- name: Setup Gradle
59-
uses: gradle/actions/setup-gradle@v3
48+
uses: gradle/actions/setup-gradle@v4
6049

61-
- name: Execute Gradle build
50+
- name: Build Lavalink
6251
run: ./gradlew build
6352

64-
- name: Execute Gradle build
53+
- name: Build Lavalink musl
6554
run: ./gradlew build -PtargetPlatform=musl
6655

6756
- name: Publish to Maven
68-
run: ./gradlew publish -PMAVEN_USERNAME=$MAVEN_USERNAME -PMAVEN_PASSWORD=$MAVEN_PASSWORD
69-
70-
- name: Upload Artifacts
57+
env:
58+
ORG_GRADLE_PROJECT_MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
59+
ORG_GRADLE_PROJECT_MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
60+
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
61+
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
62+
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.SIGNING_IN_MEMORY_KEY }}
63+
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.SIGNING_IN_MEMORY_KEY_PASSWORD }}
64+
if: |
65+
(env.ORG_GRADLE_PROJECT_MAVEN_USERNAME != '' && env.ORG_GRADLE_PROJECT_MAVEN_PASSWORD != '') ||
66+
(env.ORG_GRADLE_PROJECT_mavenCentralUsername != '' && env.ORG_GRADLE_PROJECT_mavenCentralPassword != '' && env.ORG_GRADLE_PROJECT_signingInMemoryKey != '' && env.ORG_GRADLE_PROJECT_signingInMemoryKeyPassword != '')
67+
run: ./gradlew publish
68+
69+
- name: Upload Lavalink.jar
7170
uses: actions/upload-artifact@v4
7271
with:
7372
name: Lavalink.jar
74-
path: |
75-
LavalinkServer/build/libs/Lavalink.jar
76-
LavalinkServer/build/libs/Lavalink-musl.jar
73+
path: LavalinkServer/build/libs/Lavalink.jar
7774

78-
- name: Docker Meta
79-
id: meta
80-
uses: docker/metadata-action@v5
75+
- name: Upload Lavalink-musl.jar
76+
uses: actions/upload-artifact@v4
8177
with:
82-
images: |
83-
ghcr.io/${{ github.repository }}
84-
${{ env.DOCKER_IMAGE }}
85-
tags: |
86-
type=ref,event=branch
87-
type=ref,event=pr
88-
type=semver,pattern={{version}}
89-
type=semver,pattern={{major}}.{{minor}}
90-
type=semver,pattern={{major}}
91-
type=sha,prefix=
78+
name: Lavalink-musl.jar
79+
path: LavalinkServer/build/libs/Lavalink-musl.jar
9280

93-
- name: Docker Meta Alpine
94-
id: meta-alpine
95-
uses: docker/metadata-action@v5
81+
build-docker:
82+
needs: build
83+
runs-on: ubuntu-latest
84+
strategy:
85+
fail-fast: false
86+
matrix:
87+
include:
88+
- name: Ubuntu
89+
dockerfile: LavalinkServer/docker/Dockerfile
90+
suffix: ''
91+
platforms: linux/amd64,linux/arm/v7,linux/arm64/v8
92+
- name: Alpine
93+
dockerfile: LavalinkServer/docker/alpine.Dockerfile
94+
suffix: '-alpine'
95+
platforms: linux/amd64,linux/arm64/v8
96+
- name: Distroless
97+
dockerfile: LavalinkServer/docker/distroless.Dockerfile
98+
suffix: '-distroless'
99+
platforms: linux/amd64,linux/arm64/v8
100+
steps:
101+
- name: Checkout
102+
uses: actions/checkout@v4
103+
104+
- name: Download Lavalink.jar
105+
if: ${{ matrix.name == 'Ubuntu' || matrix.name == 'Distroless' }}
106+
uses: actions/download-artifact@v4
96107
with:
97-
images: |
98-
ghcr.io/${{ github.repository }}
99-
${{ env.DOCKER_IMAGE }}
100-
flavor: |
101-
suffix=-alpine,onlatest=true
102-
tags: |
103-
type=ref,event=branch
104-
type=ref,event=pr
105-
type=semver,pattern={{version}}
106-
type=semver,pattern={{major}}.{{minor}}
107-
type=semver,pattern={{major}}
108-
type=sha,prefix=
108+
name: Lavalink.jar
109+
path: LavalinkServer/build/libs/Lavalink.jar
110+
111+
- name: Download Lavalink-musl.jar
112+
if: ${{ matrix.name == 'Alpine' }}
113+
uses: actions/download-artifact@v4
114+
with:
115+
name: Lavalink-musl.jar
116+
path: LavalinkServer/build/libs/Lavalink-musl.jar
109117

110118
- name: Set up QEMU
111119
uses: docker/setup-qemu-action@v3
@@ -121,29 +129,41 @@ jobs:
121129
password: ${{ secrets.GITHUB_TOKEN }}
122130

123131
- name: Log in to docker registry
124-
if: env.DOCKER_USERNAME && env.DOCKER_TOKEN && env.DOCKER_REGISTRY && env.DOCKER_IMAGE
132+
env:
133+
DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
134+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
135+
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
136+
DOCKER_IMAGE: ${{ secrets.DOCKER_IMAGE }}
137+
if: env.DOCKER_REGISTRY != '' && env.DOCKER_USERNAME != '' && env.DOCKER_TOKEN != '' && env.DOCKER_IMAGE != ''
125138
uses: docker/login-action@v3
126139
with:
127-
registry: ${{ env.DOCKER_REGISTRY }}
128-
username: ${{ env.DOCKER_USERNAME }}
129-
password: ${{ env.DOCKER_TOKEN }}
140+
registry: ${{ secrets.DOCKER_REGISTRY }}
141+
username: ${{ secrets.DOCKER_USERNAME }}
142+
password: ${{ secrets.DOCKER_TOKEN }}
130143

131-
- name: Build Ubuntu and Push
132-
uses: docker/build-push-action@v5
144+
- name: Docker Meta ${{ matrix.name }}
145+
id: meta
146+
uses: docker/metadata-action@v5
133147
with:
134-
file: LavalinkServer/docker/Dockerfile
135-
context: .
136-
platforms: linux/amd64,linux/arm/v7,linux/arm64/v8
137-
push: true
138-
tags: ${{ steps.meta.outputs.tags }}
139-
labels: ${{ steps.meta.outputs.labels }}
148+
images: |
149+
ghcr.io/${{ github.repository }}
150+
${{ secrets.DOCKER_IMAGE }}
151+
flavor: |
152+
suffix=${{ matrix.suffix }},onlatest=true
153+
tags: |
154+
type=ref,event=branch
155+
type=ref,event=pr
156+
type=semver,pattern={{version}}
157+
type=semver,pattern={{major}}.{{minor}}
158+
type=semver,pattern={{major}}
159+
type=sha,prefix=
140160
141-
- name: Build Alpine and Push
142-
uses: docker/build-push-action@v5
161+
- name: Docker Build ${{ matrix.name }} and Push
162+
uses: docker/build-push-action@v6
143163
with:
144-
file: LavalinkServer/docker/alpine.Dockerfile
164+
file: ${{ matrix.dockerfile }}
145165
context: .
146-
platforms: linux/amd64,linux/arm64/v8
166+
platforms: ${{ matrix.platforms }}
147167
push: true
148-
tags: ${{ steps.meta-alpine.outputs.tags }}
149-
labels: ${{ steps.meta-alpine.outputs.labels }}
168+
tags: ${{ steps.meta.outputs.tags }}
169+
labels: ${{ steps.meta.outputs.labels }}

.github/workflows/docs-pr.yml

Lines changed: 0 additions & 49 deletions
This file was deleted.

.github/workflows/docs.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ on:
88
- '.github/workflows/docs.yml'
99

1010
concurrency:
11-
group: pages-${{ github.ref }}
12-
cancel-in-progress: true
11+
group: pages-${{ github.ref }}
12+
cancel-in-progress: true
1313

1414
jobs:
1515
deploy:
@@ -33,7 +33,7 @@ jobs:
3333
mkdocs-material-
3434
- run: pip install -r requirements.txt
3535
working-directory: docs
36-
# - run: mkdocs build --verbose --strict
36+
# - run: mkdocs build --verbose --strict
3737
- run: mkdocs build --verbose
3838
working-directory: docs
3939
- uses: actions/upload-pages-artifact@v3

.github/workflows/release.yml

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: Release
22

33
on:
44
release:
5-
types: [published]
5+
types: [ published ]
66

77
jobs:
88
build:
@@ -12,12 +12,12 @@ jobs:
1212
DOCKER_TOKEN: ${{ secrets.DOCKER_TOKEN }}
1313
DOCKER_REGISTRY: ${{ secrets.DOCKER_REGISTRY }}
1414
DOCKER_IMAGE: ${{ secrets.DOCKER_IMAGE }}
15-
MAVEN_USERNAME: ${{ vars.MAVEN_USERNAME }}
15+
MAVEN_USERNAME: ${{ secrets.MAVEN_USERNAME }}
1616
MAVEN_PASSWORD: ${{ secrets.MAVEN_PASSWORD }}
17-
ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.ORG_GRADLE_PROJECT_MAVENCENTRALPASSWORD }}
18-
ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.ORG_GRADLE_PROJECT_MAVENCENTRALUSERNAME }}
19-
ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGINMEMORYKEY }}
20-
ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.ORG_GRADLE_PROJECT_SIGNINGINMEMORYKEYPASSWORD }}
17+
MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
18+
MAVEN_CENTRAL_PASSWORD: ${{ secrets.MAVEN_CENTRAL_PASSWORD }}
19+
SIGNING_IN_MEMORY_KEY: ${{ secrets.SIGNING_IN_MEMORY_KEY }}
20+
SIGNING_IN_MEMORY_KEY_PASSWORD: ${{ secrets.SIGNING_IN_MEMORY_KEY_PASSWORD }}
2121

2222
release:
2323
needs: build
@@ -26,15 +26,20 @@ jobs:
2626
- name: Checkout
2727
uses: actions/checkout@v4
2828

29-
- name: Download Artifacts
29+
- name: Download Lavalink.jar
3030
uses: actions/download-artifact@v4
3131
with:
3232
name: Lavalink.jar
3333

34+
- name: Download Lavalink-musl.jar
35+
uses: actions/download-artifact@v4
36+
with:
37+
name: Lavalink-musl.jar
38+
3439
- name: Upload Artifacts to GitHub Release
3540
uses: ncipollo/release-action@v1
3641
with:
37-
artifacts: Lavalink.jar
42+
artifacts: Lavalink.jar,Lavalink-musl.jar
3843
allowUpdates: true
3944
omitBodyDuringUpdate: true
4045
omitDraftDuringUpdate: true

LavalinkServer/docker/alpine.Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM azul/zulu-openjdk-alpine:17-jre-headless-latest
1+
FROM azul/zulu-openjdk-alpine:21-jre-headless-latest
22

33
RUN apk add --no-cache libgcc
44

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
FROM gcr.io/distroless/java21-debian12:nonroot
2+
3+
WORKDIR /opt/Lavalink
4+
5+
COPY LavalinkServer/build/libs/Lavalink.jar Lavalink.jar
6+
7+
ENTRYPOINT ["java", "-jar"]
8+
9+
CMD ["Lavalink.jar"]

0 commit comments

Comments
 (0)