From f871f261e1e48ac32f44a5604125e2111c2a8f08 Mon Sep 17 00:00:00 2001 From: Jordan Jones Date: Sat, 16 Mar 2024 22:57:39 -0700 Subject: [PATCH] Add Docker Support (#2486) * chore(docker): add build workflow * chore(docker): update gradle image * chore(docker): this really shouldnt be running on raspberry pi's right now. * chore(docker): not sure why we need unzip here * chore(docker): attempt to add nodejs to allow the handbook to build * chore(docker): whoops, needs to be done during build * chore(docker): i dont know if this is going to work * chore(docker): replace my username with repo org as I am no longer testing this * chore(docker): version will change in the future, so fix it now. --- .github/workflows/build-container.yml | 51 +++++++++++++++++++++++++++ .gitignore | 1 + Dockerfile | 38 ++++++++++++++++++++ entrypoint.sh | 3 ++ 4 files changed, 93 insertions(+) create mode 100644 .github/workflows/build-container.yml create mode 100644 Dockerfile create mode 100644 entrypoint.sh diff --git a/.github/workflows/build-container.yml b/.github/workflows/build-container.yml new file mode 100644 index 000000000..190ac1d1e --- /dev/null +++ b/.github/workflows/build-container.yml @@ -0,0 +1,51 @@ +--- +name: Build Docker Container +on: + push: + release: + types: [published] + +jobs: + publish: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout Project + uses: actions/checkout@v4 + + - name: Generate Docker Meta + uses: docker/metadata-action@v5 + id: meta + with: + images: ghcr.io/${{ github.repository_owner }} + tags: | + type=ref,event=branch + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=sha + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + + - name: Setup Docker Buildx + uses: docker/setup-buildx-action@v3.1.0 + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3.0.0 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and Push Docker image + uses: docker/build-push-action@v5.2.0 + with: + context: . + push: true + platforms: linux/amd64 + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} diff --git a/.gitignore b/.gitignore index 33047ac1d..0ee3fb69f 100644 --- a/.gitignore +++ b/.gitignore @@ -64,6 +64,7 @@ tmp/ /*.jar /*.sh +!entrypoint.sh GM Handbook*.txt handbook.html diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..6c4dbd677 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,38 @@ +# Builder +FROM gradle:jdk17-alpine as builder + +RUN apk add --update nodejs npm + +WORKDIR /app +COPY ./ /app/ + +RUN gradle jar --no-daemon + +# Fetch Data +FROM bitnami/git:2.43.0-debian-11-r1 as data + +ARG DATA_REPOSITORY=https://gitlab.com/YuukiPS/GC-Resources.git +ARG DATA_BRANCH=4.0 + +WORKDIR /app + +RUN git clone --branch ${DATA_BRANCH} --depth 1 ${DATA_REPOSITORY} + +# Result Container +FROM amazoncorretto:17-alpine + +WORKDIR /app + +# Copy built assets +COPY --from=builder /app/grasscutter-*.jar /app/grasscutter.jar +COPY --from=builder /app/keystore.p12 /app/keystore.p12 + +# Copy the resources +COPY --from=data /app/GC-Resources/Resources /app/resources/ + +# Copy startup files +COPY ./entrypoint.sh /app/ + +CMD [ "sh", "/app/entrypoint.sh" ] + +EXPOSE 80 443 8888 22102 diff --git a/entrypoint.sh b/entrypoint.sh new file mode 100644 index 000000000..41bfceffa --- /dev/null +++ b/entrypoint.sh @@ -0,0 +1,3 @@ +#/bin/sh + +java -jar /app/grasscutter.jar