Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
87 changes: 55 additions & 32 deletions .docker/entrypoint.sh
Original file line number Diff line number Diff line change
@@ -1,9 +1,37 @@
#!/usr/bin/env bash

set -e
SD=".scroll"
SD="./"
input=$@

# Global args derived from envs that apply to multiple commands
global_args=()
if [ ! -z "${DRUID_CWD}" ];
then
global_args+=("--cwd=$DRUID_CWD")
fi

if [ ! -z "${DRUID_CONFIG}" ];
then
global_args+=("--config=$DRUID_CONFIG")
fi

# Migrate legacy .scroll layout:
# Before: .scroll/<scroll files> + <serverfiles>
# After: <scroll files> + data/<serverfiles>
if [ -d "${SD}.scroll" ]; then
echo "Migrating legacy .scroll layout..."
mkdir -p "${SD}data"
for item in "${SD}"* "${SD}".[!.]*; do
[ -e "$item" ] || continue
name=$(basename "$item")
[ "$name" != "data" ] && [ "$name" != ".scroll" ] && mv "$item" "${SD}data/"
done
mv "${SD}.scroll"/* "${SD}"
rm -rf "${SD}.scroll"
echo "Legacy migration complete"
fi

echo "Druid Version: $(druid version)"

if [ "${ENSURE_NIX}" = "true" ];
Expand All @@ -26,38 +54,18 @@ if [ -z "$input" ] || [[ $input =~ ([^/]+)/([^:]+):([^/]+) ]] && [[ $input != *

echo "Artifact: $artifact"



#Update command
if [ "${DRUID_AUTO_UPDATE}" = "true" ] && [ -f "${SD}/scroll.yaml" ];
then

echo "Updating artifact"
druid update
echo "Updated artifact"
fi

# Build args for `druid update` so that global envs apply as well
update_args=(update "${global_args[@]}")

#Run command
if [ ! -z "${artifact}" ] && [ -f "${SD}/scroll.yaml" ];
then
if ! command -v yq &> /dev/null
then
echo "WARN: yq not installed, skipping artifact check"
else
current=$(cat ${SD}/scroll.yaml | yq .name):$(cat ${SD}/scroll.yaml | yq .app_version)
#compare desired artifact with current installed

if [ "$current" != "$artifact" ];
then
echo "Switching from $current to $artifact"
druid run scroll-switch.$artifact
else
echo "Desired artifact $artifact already installed"
fi
fi
druid "${update_args[@]}"
echo "Updated artifact"
fi


#ignore-version-check otherwise we have missmatch after update
args=(serve --ignore-version-check --additional-endpoints annotations)
Expand All @@ -67,7 +75,7 @@ if [ -z "$input" ] || [[ $input =~ ([^/]+)/([^:]+):([^/]+) ]] && [[ $input != *
args+=($artifact)
fi

#Map envs to args
# Map envs to args (--cwd = scroll dir, --config = path to .druid.yaml)
if [ ! -z "${DRUID_JWKS_SERVER}" ];
then
args+=("--jwks-server" "${DRUID_JWKS_SERVER}")
Expand Down Expand Up @@ -112,10 +120,8 @@ if [ -z "$input" ] || [[ $input =~ ([^/]+)/([^:]+):([^/]+) ]] && [[ $input != *
args+=("--skip-artifact-download")
fi

if [ ! -z "${DRUID_CWD}" ];
then
args+=("--cwd=$DRUID_CWD")
fi
# Reuse global args (cwd/config) for serve as well
args+=("${global_args[@]}")

if [ ! -z "${PPROF_BIND}" ];
then
Expand All @@ -126,5 +132,22 @@ if [ -z "$input" ] || [[ $input =~ ([^/]+)/([^:]+):([^/]+) ]] && [[ $input != *
exec druid "${args[@]}"
else
echo "Running druid with args: $@"
exec druid "$@"

# Start with user-provided args
args=("$@")

# Append global args unless explicitly specified by the user
for g in "${global_args[@]}"; do
key="${g%%=*}" # e.g. --cwd or --config
skip=false
for a in "${args[@]}"; do
if [[ "$a" == "$key" || "$a" == "$key="* ]]; then
skip=true
break
fi
done
$skip || args+=("$g")
done

exec druid "${args[@]}"
fi
195 changes: 5 additions & 190 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,200 +72,15 @@ jobs:
.docker/entrypoint.sh
.docker/druid-install-command.sh

docker-base-amd64:
docker-builds:
needs: release
uses: ./.github/workflows/docker-build-reusable.yml
uses: ./.github/workflows/docker-builds.yml
with:
dockerfile: Dockerfile
runs_on: ubuntu-latest
tags: |
highcard/druid:${{ needs.release.outputs.version_tag }}-amd64
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-amd64
build_args: |
VERSION=${{ needs.release.outputs.version_tag }}
version_tag: ${{ needs.release.outputs.version_tag }}
version: ${{ needs.release.outputs.version }}
is_pr: false
secrets:
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
docker-base-arm64:
needs: release
uses: ./.github/workflows/docker-build-reusable.yml
with:
dockerfile: Dockerfile
runs_on: ubuntu-24.04-arm
tags: |
highcard/druid:${{ needs.release.outputs.version_tag }}-arm64
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-arm64
build_args: |
VERSION=${{ needs.release.outputs.version_tag }}
secrets:
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
docker-base-manifest:
name: Create multi-arch base manifests
needs: [release, docker-base-amd64, docker-base-arm64]
runs-on: ubuntu-latest
if: ${{ needs.release.outputs.version != '' }}
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create and push base manifests
uses: Noelware/docker-manifest-action@v1
with:
inputs: highcard/druid:${{ needs.release.outputs.version_tag }}-amd64,highcard/druid:${{ needs.release.outputs.version_tag }}-arm64
tags: >-
highcard/druid:latest,
highcard/druid:stable,
highcard/druid:${{ needs.release.outputs.version }},
highcard/druid:${{ needs.release.outputs.version_tag }}
push: true

docker-base-manifest-artifacts:
name: Create multi-arch base manifests (artifacts registry)
needs: [release, docker-base-amd64, docker-base-arm64]
runs-on: ubuntu-latest
if: ${{ needs.release.outputs.version != '' }}
steps:
- name: Login to Artifacts Registry
uses: docker/login-action@v3
with:
registry: artifacts.druid.gg
username: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
password: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
- name: Create and push base manifests (artifacts)
uses: Noelware/docker-manifest-action@v1
with:
inputs: artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-amd64,artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-arm64
tags: >-
artifacts.druid.gg/druid-team/druid:latest,
artifacts.druid.gg/druid-team/druid:stable,
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version }},
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}
push: true

docker-steamcmd:
needs: [release, docker-base-manifest, docker-base-manifest-artifacts]
uses: ./.github/workflows/docker-build-reusable.yml
with:
dockerfile: Dockerfile.steamcmd
tags: |
highcard/druid:latest-steamcmd
highcard/druid:stable-steamcmd
highcard/druid:${{ needs.release.outputs.version }}-steamcmd
highcard/druid:${{ needs.release.outputs.version_tag }}-steamcmd
artifacts.druid.gg/druid-team/druid:latest-steamcmd
artifacts.druid.gg/druid-team/druid:stable-steamcmd
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version }}-steamcmd
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-steamcmd
build_args: |
VERSION=${{ needs.release.outputs.version_tag }}
secrets:
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}

docker-nix-amd64:
needs: [release, docker-base-manifest, docker-base-manifest-artifacts]
uses: ./.github/workflows/docker-build-reusable.yml
with:
dockerfile: Dockerfile.nix
runs_on: ubuntu-latest
tags: |
highcard/druid:${{ needs.release.outputs.version_tag }}-nix-amd64
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix-amd64
build_args: |
VERSION=${{ needs.release.outputs.version_tag }}
secrets:
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
docker-nix-arm64:
needs: [release, docker-base-manifest, docker-base-manifest-artifacts]
uses: ./.github/workflows/docker-build-reusable.yml
with:
dockerfile: Dockerfile.nix
runs_on: ubuntu-24.04-arm
tags: |
highcard/druid:${{ needs.release.outputs.version_tag }}-nix-arm64
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix-arm64
build_args: |
VERSION=${{ needs.release.outputs.version_tag }}
secrets:
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
docker-nix-steamcmd:
needs: [release, docker-steamcmd]
uses: ./.github/workflows/docker-build-reusable.yml
with:
dockerfile: Dockerfile.nix
tags: |
highcard/druid:latest-nix-steamcmd
highcard/druid:stable-nix-steamcmd
highcard/druid:${{ needs.release.outputs.version }}-nix-steamcmd
highcard/druid:${{ needs.release.outputs.version_tag }}-nix-steamcmd
artifacts.druid.gg/druid-team/druid:latest-nix-steamcmd
artifacts.druid.gg/druid-team/druid:stable-nix-steamcmd
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version }}-nix-steamcmd
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix-steamcmd
build_args: |
VERSION=${{ needs.release.outputs.version_tag }}-steamcmd
secrets:
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}

docker-nix-manifest:
name: Create multi-arch nix manifests
needs: [release, docker-nix-amd64, docker-nix-arm64]
runs-on: ubuntu-latest
if: ${{ needs.release.outputs.version != '' }}
steps:
- name: Login to Docker Hub
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Create and push nix manifests
uses: Noelware/docker-manifest-action@v1
with:
inputs: highcard/druid:${{ needs.release.outputs.version_tag }}-nix-amd64,highcard/druid:${{ needs.release.outputs.version_tag }}-nix-arm64
tags: >-
highcard/druid:latest-nix,
highcard/druid:stable-nix,
highcard/druid:${{ needs.release.outputs.version }}-nix,
highcard/druid:${{ needs.release.outputs.version_tag }}-nix
push: true

docker-nix-manifest-artifacts:
name: Create multi-arch nix manifests (artifacts registry)
needs: [release, docker-nix-amd64, docker-nix-arm64]
runs-on: ubuntu-latest
if: ${{ needs.release.outputs.version != '' }}
steps:
- name: Login to Artifacts Registry
uses: docker/login-action@v3
with:
registry: artifacts.druid.gg
username: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
password: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
- name: Create and push nix manifests (artifacts)
uses: Noelware/docker-manifest-action@v1
with:
inputs: artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix-amd64,artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix-arm64
tags: >-
artifacts.druid.gg/druid-team/druid:latest-nix,
artifacts.druid.gg/druid-team/druid:stable-nix,
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version }}-nix,
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix
push: true
Loading
Loading