diff --git a/.github/workflows/action-docker-publish.yml b/.github/workflows/action-docker-publish.yml index 7fe0eb7..f1fd821 100644 --- a/.github/workflows/action-docker-publish.yml +++ b/.github/workflows/action-docker-publish.yml @@ -10,6 +10,54 @@ on: - cron: "0 1 * * 6" jobs: + build-ubuntu-2604: + name: Build Ubuntu 26.04 + runs-on: ubuntu-latest + permissions: + packages: write + contents: read + attestations: write + id-token: write + steps: + - name: Checkout + uses: actions/checkout@v5 + + - name: Setup QEMU + uses: docker/setup-qemu-action@v3 + + - name: Login to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_HUB_USERNAME }} + password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }} + + - name: Login to GitHub Container Registry + uses: docker/login-action@v3 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: | + gameservermanagers/steamcmd + ghcr.io/gameservermanagers/steamcmd + tags: | + ubuntu-26.04 + + - name: Build and push (Ubuntu 26.04) + uses: docker/build-push-action@v6 + with: + context: . + file: ./Dockerfile.ubuntu-2604 + platforms: linux/amd64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-ubuntu-2404: name: Build Ubuntu 24.04 runs-on: ubuntu-latest @@ -158,7 +206,7 @@ jobs: package-cleanup: name: Cleanup Old GitHub Packages - needs: [build-ubuntu-2004, build-ubuntu-2204, build-ubuntu-2404] + needs: [build-ubuntu-2004, build-ubuntu-2204, build-ubuntu-2404, build-ubuntu-2604] runs-on: ubuntu-latest steps: - name: Delete Package Versions diff --git a/Dockerfile.ubuntu-2604 b/Dockerfile.ubuntu-2604 new file mode 100644 index 0000000..ac82fd7 --- /dev/null +++ b/Dockerfile.ubuntu-2604 @@ -0,0 +1,64 @@ +FROM ubuntu:26.04 + +## Remove ubuntu user added by default +RUN touch /var/mail/ubuntu && chown ubuntu /var/mail/ubuntu && userdel -r ubuntu + +ARG DEBIAN_FRONTEND=noninteractive +ARG PUID=1000 +ARG PGID=1000 +ARG BUILD_DATE +ARG VCS_REF + +LABEL maintainer="LinuxGSM " \ + org.opencontainers.image.title="SteamCMD" \ + org.opencontainers.image.description="SteamCMD headless image for acquiring dedicated server files" \ + org.opencontainers.image.url="https://github.com/GameServerManagers/docker-steamcmd" \ + org.opencontainers.image.source="https://github.com/GameServerManagers/docker-steamcmd" \ + org.opencontainers.image.vendor="GameServerManagers" \ + org.opencontainers.image.licenses="MIT" \ + org.opencontainers.image.created=$BUILD_DATE \ + org.opencontainers.image.revision=$VCS_REF + +SHELL ["/bin/bash", "-o", "pipefail", "-c"] + +# Install SteamCMD +RUN echo "**** Install SteamCMD ****" \ + && echo steam steam/question select "I AGREE" | debconf-set-selections \ + && echo steam steam/license note '' | debconf-set-selections \ + && dpkg --add-architecture i386 \ + && apt-get update \ + && apt-get install -y --no-install-recommends \ + ca-certificates \ + locales \ + lib32gcc-s1 \ + libsdl2-2.0-0:i386 \ + tzdata \ + steamcmd \ + gosu \ + && ln -s /usr/games/steamcmd /usr/bin/steamcmd \ + && locale-gen en_US.UTF-8 \ + && apt-get -y autoremove \ + && apt-get -y clean \ + && rm -rf /usr/share/man /usr/share/doc /usr/share/info /usr/share/lintian /usr/share/locale/* \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +# Add unicode support +ENV LANG=en_US.UTF-8 + +# Create non-root user (default IDs; can be adjusted at runtime by entrypoint) +RUN groupadd -g "${PGID}" steam \ + && useradd -l -u "${PUID}" -g steam -m -d /home/steam -s /bin/bash steam \ + && mkdir -p /home/steam/Steam \ + && chown -R steam:steam /home/steam + +WORKDIR /home/steam + +# Bootstrap SteamCMD as steam user +RUN su -s /bin/bash - steam -c 'steamcmd +login anonymous +quit || true' + +# Copy entrypoint +COPY docker-entrypoint.sh /docker-entrypoint.sh +RUN chmod +x /docker-entrypoint.sh + +ENTRYPOINT ["/docker-entrypoint.sh"] +CMD ["+help", "+quit"] diff --git a/README.md b/README.md index 4bc2abf..ee79084 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,13 @@ SteamCMD is a command-line version of the Steam client. It allows you to downloa ## Tags -| Tag(s) | Ubuntu Release | Standard Support Ends\* | Notes | -| ------------------ | --------------------------- | ----------------------- | ---------------------------------- | -| `latest`, `ubuntu` | 24.04 LTS (Noble) | April 2029 | Current LTS | -| `ubuntu-24.04` | 24.04 LTS (Noble Numbat) | April 2029 | Current LTS | -| `ubuntu-22.04` | 22.04 LTS (Jammy Jackalope) | April 2027 | Previous LTS | -| `ubuntu-20.04` | 20.04 LTS (Focal Fossa) | April 2025 | Legacy (receives security updates) | +| Tag(s) | Ubuntu Release | Standard Support Ends\* | Notes | +| ------------------ | -------------------------------- | ----------------------- | ---------------------------------- | +| `latest`, `ubuntu` | 24.04 LTS (Noble Numbat) | April 2029 | Current LTS | +| `ubuntu-26.04` | 26.04 LTS (Resolute Raccoon) | April 2031 | Upcoming LTS | +| `ubuntu-24.04` | 24.04 LTS (Noble Numbat) | April 2029 | Current LTS | +| `ubuntu-22.04` | 22.04 LTS (Jammy Jellyfish) | April 2027 | Previous LTS | +| `ubuntu-20.04` | 20.04 LTS (Focal Fossa) | April 2025 | Legacy (ESM only; may be removed) | \*Dates are end of standard (free) security updates per Canonical's published LTS schedule. Extended Security Maintenance (ESM) may continue beyond these dates, but images may be deprecated earlier if upstream packages (e.g. SteamCMD dependencies) become unavailable. @@ -50,7 +51,7 @@ SteamCMD stores its own library data (manifests, depots, workshop cache) in `/ho /home/steam/.local/share/Steam/steamapps/common/ ``` -Using a distinct mount (e.g. `/data`) along with `+force_install_dir /data` keeps app files seperate from the Steam library cache. +Using a distinct mount (e.g. `/data`) along with `+force_install_dir /data` keeps app files separate from the Steam library cache. ### Bind Mount Example