ci: apply tests to publish flow #96
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Publish Beta Docker Images 🐋 📦 | |
on: | |
push: | |
branches: | |
- beta | |
jobs: | |
build: | |
name: Build Beta Docker Images 🐳 | |
runs-on: ubuntu-latest | |
permissions: | |
packages: write | |
contents: write | |
attestations: write | |
id-token: write | |
strategy: | |
matrix: | |
game: | |
[ | |
cstrike, | |
cstrike-legacy, | |
valve, | |
valve-legacy, | |
czero, | |
czero-legacy, | |
dmc, | |
gearbox, | |
ricochet, | |
dod, | |
tfc, | |
] | |
steps: | |
- name: Checkout 🛎️ | |
uses: actions/checkout@v4 | |
with: | |
fetch-depth: "0" | |
- name: Set up Docker Buildx 🛠️ | |
uses: docker/setup-buildx-action@v3 | |
- name: Login to DockerHub 🐳 | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKERHUB_USERNAME }} | |
password: ${{ secrets.DOCKERHUB_PASSWORD }} | |
- name: Login to GitHub Container Registry 🐳 | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Set GAME environment variable 🎮 | |
working-directory: ./container | |
run: | | |
GAME=${{ matrix.game }} | |
GAME=${GAME%-legacy} | |
echo "GAME=$GAME" >> $GITHUB_ENV | |
- name: Replace fallback value in Dockerfile and entrypoint.sh | |
working-directory: ./container | |
run: | | |
sed -i "s/\${GAME:-valve}/\${GAME:-${{ env.GAME }}}/g" Dockerfile | |
sed -i "s/\${GAME:-valve}/\${GAME:-${{ env.GAME }}}/g" entrypoint.sh | |
- name: Configure SteamCMD to install the legacy engine version 🚒 | |
if: contains(matrix.game, 'legacy') | |
run: echo "FLAG=-beta steam_legacy" >> $GITHUB_ENV | |
- name: Build Docker Image 🐳 | |
uses: docker/build-push-action@v6 | |
env: | |
GAME: ${{ env.GAME }} | |
FLAG: ${{ env.FLAG }} | |
VERSION: beta | |
IMAGE: jives/hlds:${{ matrix.game }}-beta | |
with: | |
context: ./container | |
push: false | |
load: true | |
tags: jives/hlds:${{ matrix.game }}-beta | |
build-args: | | |
GAME=${{ env.GAME }} | |
FLAG=${{ env.FLAG }} | |
IMAGE=jives/hlds:${{ matrix.game }}-beta | |
VERSION=beta | |
- name: Get Docker Image ID 🆔 | |
id: get_image_id | |
run: echo "image_id=$(docker images -q | head -n 1)" >> $GITHUB_ENV | |
- name: Add Custom Mod Content 📂 | |
run: | | |
mkdir -p ./mods/decay | |
touch ./mods/decay/plugin.ini | |
- name: Add Configuration 📂 | |
run: | | |
mkdir -p ./config | |
mkdir -p ./config/maps | |
touch ./config/test.cfg | |
touch ./config/maps/crazytank.bsp | |
- name: Run Docker Container 🐳 | |
run: | | |
docker run -d -ti \ | |
--name hlds \ | |
-v "./config:/temp/config" \ | |
-v "./mods:/temp/mods" \ | |
-p 27015:27015/udp \ | |
-p 27015:27015 \ | |
-p 26900:26900/udp \ | |
-e GAME=${GAME} \ | |
${{ env.image_id }} \ | |
"+log on +rcon_password changeme +maxplayers 12" | |
sleep 5 | |
- name: Validate Directory Mappings 📂 | |
run: | | |
# Check if plugin.ini exists in the decay directory | |
if [ "$(docker exec hlds ls /opt/steam/hlds/decay | grep -c 'plugin.ini')" -eq 0 ]; then | |
echo "plugin.ini file is missing in the decay directory!" | |
exit 1 | |
fi | |
# Check if test.cfg exists in the game directory | |
if [ "$(docker exec hlds ls /opt/steam/hlds/${{ env.GAME }} | grep -c 'test.cfg')" -eq 0 ]; then | |
echo "test.cfg file is missing in the ${{ env.GAME }} directory!" | |
exit 1 | |
fi | |
# Check if crazytank.bsp exists in the maps directory | |
if [ "$(docker exec hlds ls /opt/steam/hlds/${{ env.GAME }}/maps | grep -c 'crazytank.bsp')" -eq 0 ]; then | |
echo "crazytank.bsp file is missing in the maps directory!" | |
exit 1 | |
fi | |
echo "Volume mappings work as expectected!" | |
- name: Validate Game Data Is Available 📂 | |
run: | | |
GAME_NAME=$(echo "${{ env.GAME }}" | sed 's/-legacy//') | |
if [ "$(docker exec hlds ls /opt/steam/hlds | grep -c "$GAME_NAME")" -eq 0 ]; then | |
echo "$GAME_NAME directory is missing!" | |
exit 1 | |
fi | |
- name: Build and Push Docker Image to DockerHub 🐳 | |
uses: docker/build-push-action@v6 | |
env: | |
GAME: ${{ env.GAME }} | |
FLAG: ${{ env.FLAG }} | |
VERSION: beta | |
IMAGE: jives/hlds:${{ matrix.game }}-beta | |
with: | |
context: ./container | |
push: true | |
tags: jives/hlds:${{ matrix.game }}-beta | |
build-args: | | |
GAME=${{ env.GAME }} | |
FLAG=${{ env.FLAG }} | |
IMAGE=jives/hlds:${{ matrix.game }}-beta | |
VERSION=beta | |
- name: Set repo owner to lowercase | |
id: repo_owner | |
run: | | |
REPO_OWNER=$(echo ${{ github.repository_owner }} | awk '{print tolower($0)}') | |
echo "repo_owner=$REPO_OWNER" >> $GITHUB_ENV | |
- name: Build and Push Docker Image to GitHub Container Registry 🐳 | |
uses: docker/build-push-action@v6 | |
env: | |
GAME: ${{ env.GAME }} | |
FLAG: ${{ env.FLAG }} | |
VERSION: beta | |
IMAGE: ghcr.io/${{ env.repo_owner }}/hlds:${{ matrix.game }}-beta | |
with: | |
context: ./container | |
push: true | |
tags: ghcr.io/${{ env.repo_owner }}/hlds:${{ matrix.game }}-beta | |
build-args: | | |
GAME=${{ env.GAME }} | |
FLAG=${{ env.FLAG }} | |
VERSION=beta | |
IMAGE=ghcr.io/${{ env.repo_owner }}/hlds:${{ matrix.game }}-beta | |
- name: Cleanup 🧹 | |
if: always() | |
run: | | |
docker stop hlds | |
docker rm hlds | |
docker system prune --all --force |