Skip to content

Commit d3abe62

Browse files
authored
feat: scroll v2
* Refactor ScrollService and Snapshot functionality - Updated ScrollService to use scrollDir instead of processCwd for better clarity and organization. - Removed unused methods related to file initialization and template rendering in ScrollService. - Deleted SnapshotService and related progress tracking functionality to streamline the codebase. - Introduced AutoChunkDataDir utility to manage data directory chunking more effectively. - Updated health handler to remove snapshot service dependency and related health checks. - Cleaned up mock services to reflect the removal of snapshot-related functionality. * fix: examples. tests * fix: tests * fix: queue for restarts * feat: multiple registries * chore: configureble config * chore: ci * fix: enhance entrypoint script with global arguments for druid commands * chore: better prereleases * chore: entrypoint * chore: entrypoint * chore: push artifact * refactor: update artifact reference parsing and pull command behavior to support @sha:<digest> * feat: push annotations.json
1 parent 0d46fee commit d3abe62

76 files changed

Lines changed: 2295 additions & 2115 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.docker/entrypoint.sh

Lines changed: 55 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,37 @@
11
#!/usr/bin/env bash
22

33
set -e
4-
SD=".scroll"
4+
SD="./"
55
input=$@
66

7+
# Global args derived from envs that apply to multiple commands
8+
global_args=()
9+
if [ ! -z "${DRUID_CWD}" ];
10+
then
11+
global_args+=("--cwd=$DRUID_CWD")
12+
fi
13+
14+
if [ ! -z "${DRUID_CONFIG}" ];
15+
then
16+
global_args+=("--config=$DRUID_CONFIG")
17+
fi
18+
19+
# Migrate legacy .scroll layout:
20+
# Before: .scroll/<scroll files> + <serverfiles>
21+
# After: <scroll files> + data/<serverfiles>
22+
if [ -d "${SD}.scroll" ]; then
23+
echo "Migrating legacy .scroll layout..."
24+
mkdir -p "${SD}data"
25+
for item in "${SD}"* "${SD}".[!.]*; do
26+
[ -e "$item" ] || continue
27+
name=$(basename "$item")
28+
[ "$name" != "data" ] && [ "$name" != ".scroll" ] && mv "$item" "${SD}data/"
29+
done
30+
mv "${SD}.scroll"/* "${SD}"
31+
rm -rf "${SD}.scroll"
32+
echo "Legacy migration complete"
33+
fi
34+
735
echo "Druid Version: $(druid version)"
836

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

2755
echo "Artifact: $artifact"
2856

29-
30-
3157
#Update command
3258
if [ "${DRUID_AUTO_UPDATE}" = "true" ] && [ -f "${SD}/scroll.yaml" ];
3359
then
34-
3560
echo "Updating artifact"
36-
druid update
37-
echo "Updated artifact"
38-
fi
3961

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

41-
#Run command
42-
if [ ! -z "${artifact}" ] && [ -f "${SD}/scroll.yaml" ];
43-
then
44-
if ! command -v yq &> /dev/null
45-
then
46-
echo "WARN: yq not installed, skipping artifact check"
47-
else
48-
current=$(cat ${SD}/scroll.yaml | yq .name):$(cat ${SD}/scroll.yaml | yq .app_version)
49-
#compare desired artifact with current installed
50-
51-
if [ "$current" != "$artifact" ];
52-
then
53-
echo "Switching from $current to $artifact"
54-
druid run scroll-switch.$artifact
55-
else
56-
echo "Desired artifact $artifact already installed"
57-
fi
58-
fi
65+
druid "${update_args[@]}"
66+
echo "Updated artifact"
5967
fi
60-
68+
6169

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

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

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

120126
if [ ! -z "${PPROF_BIND}" ];
121127
then
@@ -126,5 +132,22 @@ if [ -z "$input" ] || [[ $input =~ ([^/]+)/([^:]+):([^/]+) ]] && [[ $input != *
126132
exec druid "${args[@]}"
127133
else
128134
echo "Running druid with args: $@"
129-
exec druid "$@"
135+
136+
# Start with user-provided args
137+
args=("$@")
138+
139+
# Append global args unless explicitly specified by the user
140+
for g in "${global_args[@]}"; do
141+
key="${g%%=*}" # e.g. --cwd or --config
142+
skip=false
143+
for a in "${args[@]}"; do
144+
if [[ "$a" == "$key" || "$a" == "$key="* ]]; then
145+
skip=true
146+
break
147+
fi
148+
done
149+
$skip || args+=("$g")
150+
done
151+
152+
exec druid "${args[@]}"
130153
fi

.github/workflows/build.yml

Lines changed: 5 additions & 190 deletions
Original file line numberDiff line numberDiff line change
@@ -72,200 +72,15 @@ jobs:
7272
.docker/entrypoint.sh
7373
.docker/druid-install-command.sh
7474
75-
docker-base-amd64:
75+
docker-builds:
7676
needs: release
77-
uses: ./.github/workflows/docker-build-reusable.yml
77+
uses: ./.github/workflows/docker-builds.yml
7878
with:
79-
dockerfile: Dockerfile
80-
runs_on: ubuntu-latest
81-
tags: |
82-
highcard/druid:${{ needs.release.outputs.version_tag }}-amd64
83-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-amd64
84-
build_args: |
85-
VERSION=${{ needs.release.outputs.version_tag }}
79+
version_tag: ${{ needs.release.outputs.version_tag }}
80+
version: ${{ needs.release.outputs.version }}
81+
is_pr: false
8682
secrets:
8783
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
8884
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
8985
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
9086
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
91-
docker-base-arm64:
92-
needs: release
93-
uses: ./.github/workflows/docker-build-reusable.yml
94-
with:
95-
dockerfile: Dockerfile
96-
runs_on: ubuntu-24.04-arm
97-
tags: |
98-
highcard/druid:${{ needs.release.outputs.version_tag }}-arm64
99-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-arm64
100-
build_args: |
101-
VERSION=${{ needs.release.outputs.version_tag }}
102-
secrets:
103-
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
104-
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
105-
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
106-
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
107-
docker-base-manifest:
108-
name: Create multi-arch base manifests
109-
needs: [release, docker-base-amd64, docker-base-arm64]
110-
runs-on: ubuntu-latest
111-
if: ${{ needs.release.outputs.version != '' }}
112-
steps:
113-
- name: Login to Docker Hub
114-
uses: docker/login-action@v3
115-
with:
116-
username: ${{ vars.DOCKERHUB_USERNAME }}
117-
password: ${{ secrets.DOCKERHUB_TOKEN }}
118-
- name: Create and push base manifests
119-
uses: Noelware/docker-manifest-action@v1
120-
with:
121-
inputs: highcard/druid:${{ needs.release.outputs.version_tag }}-amd64,highcard/druid:${{ needs.release.outputs.version_tag }}-arm64
122-
tags: >-
123-
highcard/druid:latest,
124-
highcard/druid:stable,
125-
highcard/druid:${{ needs.release.outputs.version }},
126-
highcard/druid:${{ needs.release.outputs.version_tag }}
127-
push: true
128-
129-
docker-base-manifest-artifacts:
130-
name: Create multi-arch base manifests (artifacts registry)
131-
needs: [release, docker-base-amd64, docker-base-arm64]
132-
runs-on: ubuntu-latest
133-
if: ${{ needs.release.outputs.version != '' }}
134-
steps:
135-
- name: Login to Artifacts Registry
136-
uses: docker/login-action@v3
137-
with:
138-
registry: artifacts.druid.gg
139-
username: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
140-
password: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
141-
- name: Create and push base manifests (artifacts)
142-
uses: Noelware/docker-manifest-action@v1
143-
with:
144-
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
145-
tags: >-
146-
artifacts.druid.gg/druid-team/druid:latest,
147-
artifacts.druid.gg/druid-team/druid:stable,
148-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version }},
149-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}
150-
push: true
151-
152-
docker-steamcmd:
153-
needs: [release, docker-base-manifest, docker-base-manifest-artifacts]
154-
uses: ./.github/workflows/docker-build-reusable.yml
155-
with:
156-
dockerfile: Dockerfile.steamcmd
157-
tags: |
158-
highcard/druid:latest-steamcmd
159-
highcard/druid:stable-steamcmd
160-
highcard/druid:${{ needs.release.outputs.version }}-steamcmd
161-
highcard/druid:${{ needs.release.outputs.version_tag }}-steamcmd
162-
artifacts.druid.gg/druid-team/druid:latest-steamcmd
163-
artifacts.druid.gg/druid-team/druid:stable-steamcmd
164-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version }}-steamcmd
165-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-steamcmd
166-
build_args: |
167-
VERSION=${{ needs.release.outputs.version_tag }}
168-
secrets:
169-
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
170-
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
171-
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
172-
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
173-
174-
docker-nix-amd64:
175-
needs: [release, docker-base-manifest, docker-base-manifest-artifacts]
176-
uses: ./.github/workflows/docker-build-reusable.yml
177-
with:
178-
dockerfile: Dockerfile.nix
179-
runs_on: ubuntu-latest
180-
tags: |
181-
highcard/druid:${{ needs.release.outputs.version_tag }}-nix-amd64
182-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix-amd64
183-
build_args: |
184-
VERSION=${{ needs.release.outputs.version_tag }}
185-
secrets:
186-
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
187-
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
188-
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
189-
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
190-
docker-nix-arm64:
191-
needs: [release, docker-base-manifest, docker-base-manifest-artifacts]
192-
uses: ./.github/workflows/docker-build-reusable.yml
193-
with:
194-
dockerfile: Dockerfile.nix
195-
runs_on: ubuntu-24.04-arm
196-
tags: |
197-
highcard/druid:${{ needs.release.outputs.version_tag }}-nix-arm64
198-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix-arm64
199-
build_args: |
200-
VERSION=${{ needs.release.outputs.version_tag }}
201-
secrets:
202-
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
203-
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
204-
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
205-
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
206-
docker-nix-steamcmd:
207-
needs: [release, docker-steamcmd]
208-
uses: ./.github/workflows/docker-build-reusable.yml
209-
with:
210-
dockerfile: Dockerfile.nix
211-
tags: |
212-
highcard/druid:latest-nix-steamcmd
213-
highcard/druid:stable-nix-steamcmd
214-
highcard/druid:${{ needs.release.outputs.version }}-nix-steamcmd
215-
highcard/druid:${{ needs.release.outputs.version_tag }}-nix-steamcmd
216-
artifacts.druid.gg/druid-team/druid:latest-nix-steamcmd
217-
artifacts.druid.gg/druid-team/druid:stable-nix-steamcmd
218-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version }}-nix-steamcmd
219-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix-steamcmd
220-
build_args: |
221-
VERSION=${{ needs.release.outputs.version_tag }}-steamcmd
222-
secrets:
223-
DOCKERHUB_USERNAME: ${{ vars.DOCKERHUB_USERNAME }}
224-
DOCKERHUB_TOKEN: ${{ secrets.DOCKERHUB_TOKEN }}
225-
DRUID_ARTIFACTS_REGISTRY_USERNAME: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
226-
DRUID_ARTIFACTS_REGISTRY_TOKEN: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
227-
228-
docker-nix-manifest:
229-
name: Create multi-arch nix manifests
230-
needs: [release, docker-nix-amd64, docker-nix-arm64]
231-
runs-on: ubuntu-latest
232-
if: ${{ needs.release.outputs.version != '' }}
233-
steps:
234-
- name: Login to Docker Hub
235-
uses: docker/login-action@v3
236-
with:
237-
username: ${{ vars.DOCKERHUB_USERNAME }}
238-
password: ${{ secrets.DOCKERHUB_TOKEN }}
239-
- name: Create and push nix manifests
240-
uses: Noelware/docker-manifest-action@v1
241-
with:
242-
inputs: highcard/druid:${{ needs.release.outputs.version_tag }}-nix-amd64,highcard/druid:${{ needs.release.outputs.version_tag }}-nix-arm64
243-
tags: >-
244-
highcard/druid:latest-nix,
245-
highcard/druid:stable-nix,
246-
highcard/druid:${{ needs.release.outputs.version }}-nix,
247-
highcard/druid:${{ needs.release.outputs.version_tag }}-nix
248-
push: true
249-
250-
docker-nix-manifest-artifacts:
251-
name: Create multi-arch nix manifests (artifacts registry)
252-
needs: [release, docker-nix-amd64, docker-nix-arm64]
253-
runs-on: ubuntu-latest
254-
if: ${{ needs.release.outputs.version != '' }}
255-
steps:
256-
- name: Login to Artifacts Registry
257-
uses: docker/login-action@v3
258-
with:
259-
registry: artifacts.druid.gg
260-
username: ${{ vars.DRUID_ARTIFACTS_REGISTRY_USERNAME }}
261-
password: ${{ secrets.DRUID_ARTIFACTS_REGISTRY_TOKEN }}
262-
- name: Create and push nix manifests (artifacts)
263-
uses: Noelware/docker-manifest-action@v1
264-
with:
265-
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
266-
tags: >-
267-
artifacts.druid.gg/druid-team/druid:latest-nix,
268-
artifacts.druid.gg/druid-team/druid:stable-nix,
269-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version }}-nix,
270-
artifacts.druid.gg/druid-team/druid:${{ needs.release.outputs.version_tag }}-nix
271-
push: true

0 commit comments

Comments
 (0)