Files
OSC-Docker/.gitea/workflows/docker-publish.yml
Aiden 4e2b4aba25
Some checks failed
Build & Push Docker / build-and-push (push) Failing after 36s
Initial commit
2026-05-10 12:51:16 +10:00

115 lines
3.3 KiB
YAML

name: Build & Push Docker
on:
push:
branches: ["main"]
workflow_dispatch:
schedule:
- cron: "@weekly"
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Resolve latest Open Stage Control release
shell: bash
run: |
set -euo pipefail
python3 <<'PY'
import json
import urllib.request
url = "https://framagit.org/api/v4/projects/jean-emmanuel%2Fopen-stage-control/releases"
with urllib.request.urlopen(url) as response:
releases = json.load(response)
if not releases:
raise SystemExit("No releases returned by upstream API")
latest = releases[0]
tag = latest["tag_name"]
version = tag[1:] if tag.startswith("v") else tag
with open("release.env", "w", encoding="utf-8") as f:
f.write(f"OSC_TAG={tag}\n")
f.write(f"OSC_VERSION={version}\n")
PY
cat release.env >> "$GITHUB_ENV"
- name: Set image names
shell: bash
env:
REPOSITORY: ${{ gitea.repository }}
run: |
set -euo pipefail
OWNER="${REPOSITORY%/*}"
REPO="${REPOSITORY#*/}"
echo "IMAGE_LATEST=git.f-40.com/${OWNER}/${REPO}:latest" >> "$GITHUB_ENV"
echo "IMAGE_VERSIONED=git.f-40.com/${OWNER}/${REPO}:${OSC_VERSION}" >> "$GITHUB_ENV"
- name: Login to Gitea Container Registry
shell: bash
env:
REGISTRY_USER: ${{ secrets.USER }}
REGISTRY_TOKEN: ${{ secrets.TOKEN }}
run: |
set -euo pipefail
echo "$REGISTRY_TOKEN" | docker login git.f-40.com -u "$REGISTRY_USER" --password-stdin
- name: Decide whether a build is needed
shell: bash
env:
EVENT_NAME: ${{ gitea.event_name }}
run: |
set -euo pipefail
if [ "$EVENT_NAME" = "push" ] || [ "$EVENT_NAME" = "workflow_dispatch" ]; then
echo "SHOULD_BUILD=true" >> "$GITHUB_ENV"
echo "BUILD_REASON=repository change or manual run" >> "$GITHUB_ENV"
exit 0
fi
if docker manifest inspect "$IMAGE_VERSIONED" >/dev/null 2>&1; then
echo "SHOULD_BUILD=false" >> "$GITHUB_ENV"
echo "BUILD_REASON=version ${OSC_VERSION} already exists in registry" >> "$GITHUB_ENV"
else
echo "SHOULD_BUILD=true" >> "$GITHUB_ENV"
echo "BUILD_REASON=new upstream release ${OSC_TAG}" >> "$GITHUB_ENV"
fi
- name: Build
shell: bash
run: |
set -euo pipefail
if [ "${SHOULD_BUILD}" != "true" ]; then
echo "Skipping build: ${BUILD_REASON}"
exit 0
fi
echo "Building ${OSC_TAG} because ${BUILD_REASON}"
docker build \
--build-arg OPEN_STAGE_CONTROL_VERSION="${OSC_VERSION}" \
-t "${IMAGE_LATEST}" \
-t "${IMAGE_VERSIONED}" \
.
- name: Push
shell: bash
run: |
set -euo pipefail
if [ "${SHOULD_BUILD}" != "true" ]; then
echo "Skipping push: ${BUILD_REASON}"
exit 0
fi
docker push "${IMAGE_VERSIONED}"
docker push "${IMAGE_LATEST}"