name: Release Workflow on: workflow_dispatch: {} release: types: [published] # This can be used to automatically publish nightlies at UTC nighttime schedule: - cron: "0 2 * * *" # run at 2 AM UTC permissions: contents: read jobs: web: name: Push website Docker image to registry runs-on: ubuntu-latest permissions: packages: write contents: read steps: - name: Check out the repo uses: actions/checkout@v4 with: submodules: true fetch-depth: 1 # fix for when this gets triggered by tag fetch-tags: true token: ${{ secrets.GITHUB_TOKEN }} - name: Determine final version id: get_final_ver run: | BASE_VER=v$(jq -r '.version' package.json) TODAY=$(date +'%Y.%m.%d') echo "Today will be: $TODAY" echo "today=$TODAY" >> $GITHUB_OUTPUT if [[ "${{ github.event_name }}" == "release" ]]; then FINAL_VER="$BASE_VER" else FINAL_VER="${BASE_VER}-nightly.$TODAY" fi echo "Drop's release tag will be: $FINAL_VER" echo "final_ver=$FINAL_VER" >> $GITHUB_OUTPUT - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx id: buildx uses: docker/setup-buildx-action@v3 with: buildkitd-flags: --debug - name: Log in to the 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: | ghcr.io/drop-OSS/drop tags: | type=schedule,pattern=nightly type=schedule,pattern=nightly.${{ steps.get_final_ver.outputs.today }} type=semver,pattern=v{{version}} type=semver,pattern=v{{major}}.{{minor}} type=semver,pattern=v{{major}} type=ref,event=branch,prefix=branch- type=ref,event=pr type=sha # set latest tag for stable releases type=raw,value=latest,enable=${{ github.event_name == 'release' && github.event.release.prerelease == false }} - name: Cache uses: actions/cache@v4 id: cache with: path: cache-mount key: cache-mount-${{ hashFiles('Dockerfile') }} - name: Restore Docker cache mounts uses: reproducible-containers/buildkit-cache-dance@v3 with: builder: ${{ steps.setup-buildx.outputs.name }} cache-dir: cache-mount dockerfile: Dockerfile skip-extraction: ${{ steps.cache.outputs.cache-hit }} - name: Build and push image id: build-and-push uses: docker/build-push-action@v6 with: context: . push: true provenance: mode=max sbom: true tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: linux/amd64,linux/arm64 cache-from: type=gha cache-to: type=gha,mode=max build-args: | BUILD_DROP_VERSION=${{ steps.get_final_ver.outputs.final_ver }}