chore: docker improvements 712e22ac
Steve · 2026-04-02 07:37 2 file(s) · +53 −4
.dockerignore (added) +6 −0
1 +
target/
2 +
.git/
3 +
.github/
4 +
.gitignore
5 +
*.md
6 +
LICENSE
.github/workflows/docker.yml +47 −4
9 9
10 10
env:
11 11
  REGISTRY: ghcr.io
12 -
  REPO: ${{ github.repository_owner }}
13 12
14 13
jobs:
14 +
  changes:
15 +
    name: Detect changes
16 +
    runs-on: ubuntu-latest
17 +
    outputs:
18 +
      apps: ${{ steps.filter.outputs.apps }}
19 +
    steps:
20 +
      - uses: actions/checkout@v4
21 +
        with:
22 +
          fetch-depth: 2
23 +
24 +
      - name: Determine which apps to build
25 +
        id: filter
26 +
        run: |
27 +
          ALL='["sipp","feeds","parcels","jotts","og","shrink"]'
28 +
29 +
          # Tags always build everything
30 +
          if [[ "${GITHUB_REF}" == refs/tags/* ]]; then
31 +
            echo "apps=${ALL}" >> "$GITHUB_OUTPUT"
32 +
            exit 0
33 +
          fi
34 +
35 +
          changed=$(git diff --name-only HEAD~1 HEAD)
36 +
37 +
          # Workspace-level changes (shared deps, auth crate, CI) rebuild all
38 +
          if echo "$changed" | grep -qE '^(Cargo\.(toml|lock)|crates/|\.github/workflows/docker\.yml)'; then
39 +
            echo "apps=${ALL}" >> "$GITHUB_OUTPUT"
40 +
            exit 0
41 +
          fi
42 +
43 +
          apps=()
44 +
          for app in sipp feeds parcels jotts og shrink; do
45 +
            if echo "$changed" | grep -q "^apps/${app}/"; then
46 +
              apps+=("\"${app}\"")
47 +
            fi
48 +
          done
49 +
50 +
          if [ ${#apps[@]} -eq 0 ]; then
51 +
            echo 'apps=[]' >> "$GITHUB_OUTPUT"
52 +
          else
53 +
            echo "apps=[$(IFS=,; echo "${apps[*]}")]" >> "$GITHUB_OUTPUT"
54 +
          fi
55 +
15 56
  build:
16 57
    name: build (${{ matrix.app }})
17 -
    runs-on: ubuntu-22.04
58 +
    needs: changes
59 +
    if: needs.changes.outputs.apps != '[]'
60 +
    runs-on: ubuntu-latest
18 61
    permissions:
19 62
      contents: read
20 63
      packages: write
21 64
    strategy:
22 65
      fail-fast: false
23 66
      matrix:
24 -
        app: [sipp, feeds, parcels, jotts, og, shrink]
67 +
        app: ${{ fromJson(needs.changes.outputs.apps) }}
25 68
    steps:
26 69
      - uses: actions/checkout@v4
27 70
42 85
        id: meta
43 86
        uses: docker/metadata-action@v5
44 87
        with:
45 -
          images: ${{ env.REGISTRY }}/${{ env.REPO }}/${{ matrix.app }}
88 +
          images: ${{ env.REGISTRY }}/${{ github.repository }}/${{ matrix.app }}
46 89
          tags: |
47 90
            type=ref,event=tag
48 91
            type=raw,value=latest,enable={{is_default_branch}}