evcc-io/.github/workflows/nightly-docker.yml

60 lines
2 KiB
YAML

name: Nightly Docker
# Publishes evcc/evcc:nightly from master. Called by the scheduled nightly build
# and by the /nightly command.
on:
workflow_call:
jobs:
docker:
name: Publish Docker :nightly
runs-on: depot-ubuntu-24.04-arm
permissions:
contents: read
id-token: write # depot OIDC
steps:
- uses: actions/checkout@v7
with:
ref: refs/heads/master # force master
fetch-depth: 0
persist-credentials: false
- name: Login
uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4
with:
username: ${{ secrets.DOCKER_USER }}
password: ${{ secrets.DOCKER_PASS }}
# depot builders keep the Dockerfile's cache mounts on their own volumes,
# so they need neither buildx nor the cache dance
- name: Setup Depot
uses: depot/setup-action@15c09a5f77a0840ad4bce955686522a257853461 # v1.7.1
- name: Define tags
id: meta
uses: docker/metadata-action@80c7e94dd9b9319bd5eb7a0e0fe9291e23a2a2e9 # v6
with:
images: evcc/evcc
tags: |
type=raw,value=nightly
type=raw,value=nightly.{{date 'YYYYMMDD'}}-{{sha}}
- name: Publish
uses: depot/build-push-action@98e78adca7817480b8185f474a400b451d74e287 # v1.18.0
with:
project: ${{ secrets.DEPOT_PROJECT_ID }}
context: .
platforms: linux/amd64,linux/arm64,linux/arm/v6
push: true
tags: ${{ steps.meta.outputs.tags }}
- name: Delete old nightly.* tags
run: |
old_tags=$(curl -s "https://hub.docker.com/v2/repositories/evcc/evcc/tags/?page_size=100" | jq -r '.results | map(select(.name | startswith("nightly."))) | sort_by(.last_updated) | reverse | .[1:] | .[].name')
for tag in $old_tags; do
echo "Deleting tag: $tag"
curl -s -H "Authorization: Bearer ${{ secrets.DOCKER_PASS }}" -X DELETE "https://hub.docker.com/v2/repositories/evcc/evcc/tags/$tag/"
done