name: Build and Publish RMManager Image on: push: branches: [main] workflow_dispatch: jobs: build: runs-on: ubuntu-latest steps: # --------------------------------------------- # Checkout repository (no external actions) # --------------------------------------------- - name: Checkout repository env: GITEA_TOKEN: ${{ secrets.TEA_TOKEN }} run: | set -euo pipefail BASE="${GITHUB_SERVER_URL%/}" REPO="${GITHUB_REPOSITORY}" git init . git remote add origin "$BASE/$REPO.git" if [ -n "${GITEA_TOKEN:-}" ]; then AUTH="$(printf 'oauth2:%s' "$GITEA_TOKEN" | base64 -w0)" git -c "http.extraHeader=Authorization: Basic $AUTH" \ fetch --depth 1 origin "$GITHUB_SHA" else git fetch --depth 1 origin "$GITHUB_SHA" fi git checkout --detach FETCH_HEAD # --------------------------------------------- # Determine image tags # --------------------------------------------- - name: Determine version id: version run: | set -euo pipefail SHORT_SHA="$(git rev-parse --short=7 HEAD)" echo "sha=$SHORT_SHA" >> "$GITHUB_OUTPUT" if [ -f VERSION ]; then VERSION="$(tr -d '[:space:]' < VERSION)" echo "version=$VERSION" >> "$GITHUB_OUTPUT" fi # --------------------------------------------- # Login to Gitea container registry # --------------------------------------------- - name: Docker login env: REGISTRY: ${{ vars.REGISTRY }} REGISTRY_USER: ${{ secrets.REGISTRY_USER }} REGISTRY_TOKEN: ${{ secrets.TEA_TOKEN }} run: | set -euo pipefail echo "$REGISTRY_TOKEN" | docker login "$REGISTRY" \ -u "$REGISTRY_USER" \ --password-stdin # --------------------------------------------- # Build container image # --------------------------------------------- - name: Build RMManager image env: REGISTRY: ${{ vars.REGISTRY }} VERSION: ${{ steps.version.outputs.version }} SHORT_SHA: ${{ steps.version.outputs.sha }} run: | set -euo pipefail FULL_IMAGE="$REGISTRY/david/rmmanager" docker build \ -f Containerfile \ -t "$FULL_IMAGE:latest" \ -t "$FULL_IMAGE:sha-$SHORT_SHA" \ . if [ -n "$VERSION" ]; then docker tag "$FULL_IMAGE:latest" "$FULL_IMAGE:v$VERSION" fi # --------------------------------------------- # Publish image # --------------------------------------------- - name: Push RMManager image env: REGISTRY: ${{ vars.REGISTRY }} VERSION: ${{ steps.version.outputs.version }} SHORT_SHA: ${{ steps.version.outputs.sha }} run: | set -euo pipefail FULL_IMAGE="$REGISTRY/david/rmmanager" docker push "$FULL_IMAGE:latest" docker push "$FULL_IMAGE:sha-$SHORT_SHA" if [ -n "$VERSION" ]; then docker push "$FULL_IMAGE:v$VERSION" fi # --------------------------------------------- # Summary # --------------------------------------------- - name: Report build env: REGISTRY: ${{ vars.REGISTRY }} SHORT_SHA: ${{ steps.version.outputs.sha }} run: | echo "RMManager build completed" echo "Image: $REGISTRY/david/rmmanager" echo "Commit: $SHORT_SHA"