diff --git a/.github/workflows/multipaper.yml b/.github/workflows/multipaper.yml index 8b13789..88055ed 100644 --- a/.github/workflows/multipaper.yml +++ b/.github/workflows/multipaper.yml @@ -1 +1,221 @@ +name: Build Docker Images +on: [push, pull_request] +env: + TARGET_PLATFORMS_ALPINE: linux/amd64,linux/arm64,linux/arm/v7 + TARGET_PLATFORMS_DEBIAN: linux/amd64,linux/arm64 + TARGET_PLATFORMS: linux/amd64,linux/arm64,linux/arm/v7 + +jobs: + + build-multipaper-docker-alpine: + + runs-on: ubuntu-latest + + steps: + + - uses: actions/checkout@v3 + name: Checkout repository + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + with: + install: true + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker meta for MultiPaperK8s/multipaper-init + id: multipaper-init-meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/${{ github.repository_owner }}/multipaper-init + + - name: Build and push multipaper-init for ${{ env.TARGET_PLATFORMS_ALPINE }} + uses: docker/build-push-action@v3 + with: + context: ./build/alpine + file: build/alpine/Dockerfile.init + platforms: ${{ env.TARGET_PLATFORMS_ALPINE }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.multipaper-init-meta.outputs.tags }} + labels: ${{ steps.multipaper-init-meta.outputs.labels }} + + build-multipaper-docker-debian: + + runs-on: ubuntu-latest + + steps: + + - uses: actions/checkout@v3 + name: Checkout repository + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + with: + install: true + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker meta for MultiPaperK8s/multipaper-master + id: multipaper-master-meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/${{ github.repository_owner }}/multipaper-master-debian-unstable + + - name: Build and push multipaper-master for ${{ env.TARGET_PLATFORMS_DEBIAN }} + uses: docker/build-push-action@v3 + with: + context: ./build/debian-slim + file: build/debian-slim/Dockerfile.master + platforms: ${{ env.TARGET_PLATFORMS_DEBIAN }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.multipaper-master-meta.outputs.tags }} + labels: ${{ steps.multipaper-master-meta.outputs.labels }} + + - name: Docker meta for MultiPaperK8s/multipaper + id: multipaper-server-meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/${{ github.repository_owner }}/multipaper-debian-unstable + + - name: Build and push multipaper for ${{ env.TARGET_PLATFORMS_DEBIAN }} + uses: docker/build-push-action@v3 + with: + context: ./build/debian-slim + file: build/debian-slim/Dockerfile.server + platforms: ${{ env.TARGET_PLATFORMS_DEBIAN }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.multipaper-server-meta.outputs.tags }} + labels: ${{ steps.multipaper-server-meta.outputs.labels }} + + build-multipaper-docker-ubuntu-jammy: + + runs-on: ubuntu-latest + + steps: + + - uses: actions/checkout@v3 + name: Checkout repository + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + with: + install: true + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker meta for MultiPaperK8s/multipaper-master + id: multipaper-master-meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/${{ github.repository_owner }}/multipaper-master-jammy + + - name: Build and push multipaper-master for ${{ env.TARGET_PLATFORMS }} + uses: docker/build-push-action@v3 + with: + context: ./build/ubuntu-jammy + file: build/ubuntu-jammy/Dockerfile.master + platforms: ${{ env.TARGET_PLATFORMS }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.multipaper-master-meta.outputs.tags }} + labels: ${{ steps.multipaper-master-meta.outputs.labels }} + + - name: Docker meta for MultiPaperK8s/multipaper + id: multipaper-server-meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/MultiPaperK8s/multipaper-jammy + + - name: Build and push multipaper for ${{ env.TARGET_PLATFORMS }} + uses: docker/build-push-action@v3 + with: + context: ./build/ubuntu-jammy + file: build/ubuntu-jammy/Dockerfile.server + platforms: ${{ env.TARGET_PLATFORMS }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.multipaper-server-meta.outputs.tags }} + labels: ${{ steps.multipaper-server-meta.outputs.labels }} + + build-multipaper-docker-ubuntu-focal: + + runs-on: ubuntu-latest + + steps: + + - uses: actions/checkout@v3 + name: Checkout repository + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + with: + install: true + + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Docker meta for MultiPaperK8s/multipaper-master-focal + id: multipaper-master-meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/${{ github.repository_owner }}/multipaper-master-focal + + - name: Build and push multipaper-master for ${{ env.TARGET_PLATFORMS }} + uses: docker/build-push-action@v3 + with: + context: ./build/ubuntu-focal + file: build/ubuntu-focal/Dockerfile.master + platforms: ${{ env.TARGET_PLATFORMS }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.multipaper-master-meta.outputs.tags }} + labels: ${{ steps.multipaper-master-meta.outputs.labels }} + + - name: Docker meta for MultiPaperK8s/multipaper + id: multipaper-server-meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/MultiPaperK8s/multipaper-focal + + - name: Build and push multipaper for ${{ env.TARGET_PLATFORMS }} + uses: docker/build-push-action@v3 + with: + context: ./build/ubuntu-focal + file: build/ubuntu-focal/Dockerfile.server + platforms: ${{ env.TARGET_PLATFORMS }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.multipaper-server-meta.outputs.tags }} + labels: ${{ steps.multipaper-server-meta.outputs.labels }} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c036379 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +tmp/ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 3da4a72..18c1393 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,27 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## [Unreleased] +### Added +- Add ubuntu-jammy distribution (build + Docker support) +- Add ubuntu-focal distribution (build + Docker support) + +### Changed +- Update Eclipse Temurin Ubuntu image from 17.0.3_7-jre -> 17.0.5_8-jre-(jammy|focal) +- Update Eclipse Temurin Debian image from 17.0.3_7-jdk -> 17.0.5_8-jdk +- Update Debian slim image from stable-20220622-slim -> stable-20221205-slim +- Update Debian slim dependency tzdata (using bullseye-updates repository) 2021a-1+deb11u4 -> 2021a-1+deb11u8 +- Update Debian slim dependency curl 7.74.0-1.3+deb11u1 -> 7.74.0-1.3+deb11u3 +- Update Debian slim dependency locales 2.31-13+deb11u3 -> 2.31-13+deb11u4 +- Docker images tags from Ubuntu generic to specific ((multipaper|multipaper-master) -> (multipaper|multipaper-master)-(jammy|focal)) +- Update Alpine init image from Alpine 3.16.0 -> 3.17.0 +- Update Alpine init image dependency libintl 0.21-r2 -> 0.21.1-r1 +- Update Alpine init image dependency gettext 0.21-r2 -> 0.21.1-r1 +- Downgrade Ubuntu focal dependency dumb-init 1.2.5-2 -> 1.2.2-1.2 +- Building Debian Slim now only for AMD64 and ARM64v8 (Aarch64) +- Update Multipaper to 1.19.2 + +### Removed +- Generic ubuntu distribution ## [0.1.2] - 2022-06-07 ### Changed diff --git a/Dockerfile.master b/Dockerfile.master index 0f89189..9f4a759 100644 --- a/Dockerfile.master +++ b/Dockerfile.master @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1.4.1 -FROM eclipse-temurin:17.0.3_7-jre-alpine +FROM eclipse-temurin:17.0.3_7-jre # Versioning ARG MULTIPAPER_VERSION=1.18.2 @@ -8,8 +8,8 @@ ARG MASTER_VERSION=2.8.8 # Setup groups and install dumb init RUN addgroup --gid 1001 multipaper && \ - adduser --home /multipaper --uid 1001 -S -G multipaper multipaper && \ - apk add --no-cache dumb-init=1.2.5-r1 + adduser --system --home /multipaper --uid 1001 --gid 1001 multipaper && \ + apt update && apt install -y --no-install-recommends dumb-init=1.2.5-2 # Use the multipaper's home directory as our work directory WORKDIR /multipaper diff --git a/Dockerfile.server b/Dockerfile.server index cfa7c7f..31ff248 100644 --- a/Dockerfile.server +++ b/Dockerfile.server @@ -1,5 +1,5 @@ # syntax=docker/dockerfile:1.4.1 -FROM eclipse-temurin:17.0.3_7-jre-alpine +FROM eclipse-temurin:17.0.3_7-jre # Versioning ARG VERSION=1.18.2 @@ -8,8 +8,8 @@ ARG FULL_VERSION="$VERSION-$BUILD" # Setup groups and install dumb init RUN addgroup --gid 1001 multipaper && \ - adduser --home /multipaper --uid 1001 -S -G multipaper multipaper && \ - apk add --no-cache dumb-init=1.2.5-r1 + adduser --system --home /multipaper --uid 1001 --gid 1001 multipaper && \ + apt update && apt install -y --no-install-recommends dumb-init=1.2.5-2 # Use the multipaper's home directory as our work directory WORKDIR /multipaper diff --git a/build/alpine/Dockerfile.init b/build/alpine/Dockerfile.init new file mode 100644 index 0000000..d5c4805 --- /dev/null +++ b/build/alpine/Dockerfile.init @@ -0,0 +1,12 @@ +# syntax=docker/dockerfile:1.4.1 +FROM alpine:3.17.0 + +RUN addgroup --gid 1001 multipaper && \ + adduser --home /multipaper --uid 1001 -S -G multipaper multipaper + +RUN apk add --no-cache --update libintl=0.21.1-r1 && \ + apk add --no-cache --virtual build_deps gettext=0.21.1-r1 && \ + cp /usr/bin/envsubst /usr/local/bin/envsubst && \ + apk del build_deps + +USER multipaper \ No newline at end of file diff --git a/build/debian-slim/Dockerfile.master b/build/debian-slim/Dockerfile.master new file mode 100644 index 0000000..a02cdde --- /dev/null +++ b/build/debian-slim/Dockerfile.master @@ -0,0 +1,59 @@ +# syntax=docker/dockerfile:1.4.1 +FROM eclipse-temurin:17.0.5_8-jdk AS jre-build + +# Create a custom Java runtime for MultiPaper Server +RUN jlink \ + --add-modules java.base,java.desktop,java.logging,java.naming,java.xml,jdk.sctp,jdk.unsupported \ + --strip-debug \ + --no-man-pages \ + --no-header-files \ + --compress=2 \ + --output /multipaper/java + +FROM debian:stable-20221205-slim + +# Initialising language +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8' + +# Setting up Java +ENV JAVA_HOME=/opt/java/openjdk \ + PATH="/opt/java/openjdk/bin:$PATH" + +## Taken from eclipse-temurin setup, but with version pinning and dumb-init +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata=2021a-1+deb11u8 curl=7.74.0-1.3+deb11u3 ca-certificates=20210119 fontconfig=2.13.1-4.2 locales=2.31-13+deb11u4 binutils=2.35.2-2 dumb-init=1.2.5-1 \ + && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \ + && locale-gen en_US.UTF-8 \ + && rm -rf /var/lib/apt/lists/* + +# Copy over JRE +COPY --from=jre-build /multipaper/java $JAVA_HOME + +# Versioning +ARG MULTIPAPER_VERSION=1.19.2 +ARG MULTIPAPER_BUILD=37 +ARG MASTER_VERSION=2.10.1 + +# Setup groups +RUN addgroup --gid 1001 multipaper && \ + adduser --system --home /multipaper --uid 1001 --gid 1001 multipaper + +# Use the multipaper's home directory as our work directory +WORKDIR /multipaper + +# Switch from root to multipaper +USER multipaper + +# Download multipaper +ADD --chown=multipaper:multipaper https://multipaper.io/api/v2/projects/multipaper/versions/$MULTIPAPER_VERSION/builds/$MULTIPAPER_BUILD/downloads/MultiPaper-Master-$MASTER_VERSION-all.jar multipaper-master.jar + +# Expose the ports of the master server and proxy +EXPOSE 35353/tcp +EXPOSE 25565/tcp + +# Start the process using dumb-init +ENTRYPOINT ["/usr/bin/dumb-init", "--"] +CMD ["java", "-jar", "/multipaper/multipaper-master.jar"] + +# Switch to the data directory +WORKDIR /multipaper/data \ No newline at end of file diff --git a/build/debian-slim/Dockerfile.server b/build/debian-slim/Dockerfile.server new file mode 100644 index 0000000..8fa4dd2 --- /dev/null +++ b/build/debian-slim/Dockerfile.server @@ -0,0 +1,58 @@ +# syntax=docker/dockerfile:1.4.1 +FROM eclipse-temurin:17.0.5_8-jdk AS jre-build + +# Create a custom Java runtime for MultiPaper Server +RUN jlink \ + --add-modules java.base,java.compiler,java.logging,java.management,java.net.http,java.sql,java.desktop,java.security.sasl,java.naming,java.transaction.xa,java.xml,jdk.crypto.ec,jdk.zipfs,jdk.security.auth,jdk.unsupported \ + --strip-debug \ + --no-man-pages \ + --no-header-files \ + --compress=2 \ + --output /multipaper/java + +FROM debian:stable-20221205-slim + +# Initialising language +ENV LANG='en_US.UTF-8' LANGUAGE='en_US:en' LC_ALL='en_US.UTF-8' + +# Setting up Java +ENV JAVA_HOME=/opt/java/openjdk \ + PATH="/opt/java/openjdk/bin:$PATH" + +## Taken from eclipse-temurin setup, but with version pinning and dumb-init +RUN apt-get update \ + && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends tzdata=2021a-1+deb11u8 curl=7.74.0-1.3+deb11u3 ca-certificates=20210119 fontconfig=2.13.1-4.2 locales=2.31-13+deb11u4 binutils=2.35.2-2 dumb-init=1.2.5-1 \ + && echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen \ + && locale-gen en_US.UTF-8 \ + && rm -rf /var/lib/apt/lists/* + +# Copy over JRE +COPY --from=jre-build /multipaper/java $JAVA_HOME + +# Versioning +ARG VERSION=1.19.2 +ARG BUILD=37 +ARG FULL_VERSION="$VERSION-$BUILD" + +# Setup groups +RUN addgroup --gid 1001 multipaper && \ + adduser --system --home /multipaper --uid 1001 --gid 1001 multipaper + +# Use the multipaper's home directory as our work directory +WORKDIR /multipaper + +# Switch from root to multipaper +USER multipaper + +# Download multipaper +ADD --chown=multipaper:multipaper https://multipaper.io/api/v2/projects/multipaper/versions/$VERSION/builds/$BUILD/downloads/multipaper-$FULL_VERSION.jar multipaper.jar + +# Expose the required ports +EXPOSE 25565/tcp + +# Start the process using dumb-init +ENTRYPOINT ["/usr/bin/dumb-init", "--"] +CMD ["java", "-jar", "/multipaper/multipaper.jar"] + +# Switch to the data directory +WORKDIR /multipaper/data \ No newline at end of file diff --git a/build/ubuntu-focal/Dockerfile.master b/build/ubuntu-focal/Dockerfile.master new file mode 100644 index 0000000..257eb2d --- /dev/null +++ b/build/ubuntu-focal/Dockerfile.master @@ -0,0 +1,32 @@ +# syntax=docker/dockerfile:1.4.1 +FROM eclipse-temurin:17.0.5_8-jre-focal + +# Versioning +ARG MULTIPAPER_VERSION=1.19.2 +ARG MULTIPAPER_BUILD=37 +ARG MASTER_VERSION=2.10.1 + +# Setup groups and install dumb init +RUN addgroup --gid 1001 multipaper && \ + adduser --system --home /multipaper --uid 1001 --gid 1001 multipaper && \ + apt update && apt install -y --no-install-recommends dumb-init=1.2.2-1.2 + +# Use the multipaper's home directory as our work directory +WORKDIR /multipaper + +# Switch from root to multipaper +USER multipaper + +# Download multipaper +ADD --chown=multipaper:multipaper https://multipaper.io/api/v2/projects/multipaper/versions/$MULTIPAPER_VERSION/builds/$MULTIPAPER_BUILD/downloads/MultiPaper-Master-$MASTER_VERSION-all.jar multipaper-master.jar + +# Expose the ports of the master server and proxy +EXPOSE 35353/tcp +EXPOSE 25565/tcp + +# Start the process using dumb-init +ENTRYPOINT ["/usr/bin/dumb-init", "--"] +CMD ["java", "-jar", "/multipaper/multipaper-master.jar"] + +# Switch to the data directory +WORKDIR /multipaper/data \ No newline at end of file diff --git a/build/ubuntu-focal/Dockerfile.server b/build/ubuntu-focal/Dockerfile.server new file mode 100644 index 0000000..5625902 --- /dev/null +++ b/build/ubuntu-focal/Dockerfile.server @@ -0,0 +1,31 @@ +# syntax=docker/dockerfile:1.4.1 +FROM eclipse-temurin:17.0.5_8-jre-focal + +# Versioning +ARG VERSION=1.19.2 +ARG BUILD=37 +ARG FULL_VERSION="$VERSION-$BUILD" + +# Setup groups and install dumb init +RUN addgroup --gid 1001 multipaper && \ + adduser --system --home /multipaper --uid 1001 --gid 1001 multipaper && \ + apt update && apt install -y --no-install-recommends dumb-init=1.2.2-1.2 + +# Use the multipaper's home directory as our work directory +WORKDIR /multipaper + +# Switch from root to multipaper +USER multipaper + +# Download multipaper +ADD --chown=multipaper:multipaper https://multipaper.io/api/v2/projects/multipaper/versions/$VERSION/builds/$BUILD/downloads/multipaper-$FULL_VERSION.jar multipaper.jar + +# Expose the required ports +EXPOSE 25565/tcp + +# Start the process using dumb-init +ENTRYPOINT ["/usr/bin/dumb-init", "--"] +CMD ["java", "-jar", "/multipaper/multipaper.jar"] + +# Switch to the data directory +WORKDIR /multipaper/data \ No newline at end of file diff --git a/build/ubuntu-jammy/Dockerfile.master b/build/ubuntu-jammy/Dockerfile.master new file mode 100644 index 0000000..711b6d4 --- /dev/null +++ b/build/ubuntu-jammy/Dockerfile.master @@ -0,0 +1,32 @@ +# syntax=docker/dockerfile:1.4.1 +FROM eclipse-temurin:17.0.5_8-jre-jammy + +# Versioning +ARG MULTIPAPER_VERSION=1.19.2 +ARG MULTIPAPER_BUILD=37 +ARG MASTER_VERSION=2.10.1 + +# Setup groups and install dumb init +RUN addgroup --gid 1001 multipaper && \ + adduser --system --home /multipaper --uid 1001 --gid 1001 multipaper && \ + apt update && apt install -y --no-install-recommends dumb-init=1.2.5-2 + +# Use the multipaper's home directory as our work directory +WORKDIR /multipaper + +# Switch from root to multipaper +USER multipaper + +# Download multipaper +ADD --chown=multipaper:multipaper https://multipaper.io/api/v2/projects/multipaper/versions/$MULTIPAPER_VERSION/builds/$MULTIPAPER_BUILD/downloads/MultiPaper-Master-$MASTER_VERSION-all.jar multipaper-master.jar + +# Expose the ports of the master server and proxy +EXPOSE 35353/tcp +EXPOSE 25565/tcp + +# Start the process using dumb-init +ENTRYPOINT ["/usr/bin/dumb-init", "--"] +CMD ["java", "-jar", "/multipaper/multipaper-master.jar"] + +# Switch to the data directory +WORKDIR /multipaper/data \ No newline at end of file diff --git a/build/ubuntu-jammy/Dockerfile.server b/build/ubuntu-jammy/Dockerfile.server new file mode 100644 index 0000000..5251bc7 --- /dev/null +++ b/build/ubuntu-jammy/Dockerfile.server @@ -0,0 +1,31 @@ +# syntax=docker/dockerfile:1.4.1 +FROM eclipse-temurin:17.0.5_8-jre-jammy + +# Versioning +ARG VERSION=1.19.2 +ARG BUILD=37 +ARG FULL_VERSION="$VERSION-$BUILD" + +# Setup groups and install dumb init +RUN addgroup --gid 1001 multipaper && \ + adduser --system --home /multipaper --uid 1001 --gid 1001 multipaper && \ + apt update && apt install -y --no-install-recommends dumb-init=1.2.5-2 + +# Use the multipaper's home directory as our work directory +WORKDIR /multipaper + +# Switch from root to multipaper +USER multipaper + +# Download multipaper +ADD --chown=multipaper:multipaper https://multipaper.io/api/v2/projects/multipaper/versions/$VERSION/builds/$BUILD/downloads/multipaper-$FULL_VERSION.jar multipaper.jar + +# Expose the required ports +EXPOSE 25565/tcp + +# Start the process using dumb-init +ENTRYPOINT ["/usr/bin/dumb-init", "--"] +CMD ["java", "-jar", "/multipaper/multipaper.jar"] + +# Switch to the data directory +WORKDIR /multipaper/data \ No newline at end of file