This commit is contained in:
114
.gitea/workflows/docker-publish.yml
Normal file
114
.gitea/workflows/docker-publish.yml
Normal file
@@ -0,0 +1,114 @@
|
||||
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}"
|
||||
Reference in New Issue
Block a user