name: Release Image on: push: tags: - 'v*' workflow_dispatch: inputs: tag: description: 'Tag to release, for example v0.1.140' required: true type: string jobs: image: runs-on: linux_amd64 env: GITEA_BASE_URL: http://git.jianshixingqiu.com GITEA_API_URL: http://git.jianshixingqiu.com/api/v1 GITEA_OWNER: kgod GITEA_REPO: sub2api IMAGE_NAME: git.jianshixingqiu.com/kgod/sub2api steps: - name: Checkout env: RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} run: | set -eu rm -rf .git git init git remote add origin "http://kgod:${RELEASE_TOKEN}@git.jianshixingqiu.com/kgod/sub2api.git" if [ -n "${{ inputs.tag }}" ] && [ "${GITHUB_EVENT_NAME:-}" != "workflow_dispatch" ]; then git fetch --depth 1 origin "refs/tags/${{ inputs.tag }}" else git fetch --depth 1 origin "$GITHUB_REF" fi git checkout --force FETCH_HEAD - name: Prepare metadata run: | set -eu if [ -n "${{ inputs.tag }}" ]; then TAG="${{ inputs.tag }}" else TAG="${GITHUB_REF_NAME:-${GITHUB_REF##*/}}" fi VERSION="${TAG#v}" COMMIT="$(git rev-parse --short=12 HEAD)" BUILD_DATE="$(date -u +%Y-%m-%dT%H:%M:%SZ)" echo "TAG=${TAG}" >> "$GITHUB_ENV" echo "VERSION=${VERSION}" >> "$GITHUB_ENV" echo "COMMIT=${COMMIT}" >> "$GITHUB_ENV" echo "BUILD_DATE=${BUILD_DATE}" >> "$GITHUB_ENV" - name: Login to Gitea Container Registry env: RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} run: | set -eu echo "$RELEASE_TOKEN" | docker login git.jianshixingqiu.com -u kgod --password-stdin - name: Build image run: | set -eu docker build \ -f Dockerfile.gitea \ --build-arg VERSION="$VERSION" \ --build-arg COMMIT="$COMMIT" \ --build-arg BUILD_DATE="$BUILD_DATE" \ --label "org.opencontainers.image.version=$VERSION" \ --label "org.opencontainers.image.revision=$COMMIT" \ --label "org.opencontainers.image.source=$GITEA_BASE_URL/$GITEA_OWNER/$GITEA_REPO" \ -t "$IMAGE_NAME:$VERSION" \ -t "$IMAGE_NAME:latest" \ . - name: Push image run: | set -eu docker push "$IMAGE_NAME:$VERSION" docker push "$IMAGE_NAME:latest" - name: Build binary run: | set -eu # Extract binary from the already-built image (no Go toolchain needed) docker create --name extract_tmp "$IMAGE_NAME:$VERSION" docker cp extract_tmp:/app/sub2api /tmp/sub2api docker rm extract_tmp cd /tmp tar -czf "sub2api_linux_amd64.tar.gz" sub2api sha256sum "sub2api_linux_amd64.tar.gz" > checksums.txt - name: Create Gitea release env: RELEASE_TOKEN: ${{ secrets.RELEASE_TOKEN }} run: | set -eu BODY="Docker image: ${IMAGE_NAME}:${VERSION}" PAYLOAD=$(printf '{"tag_name":"%s","target_commitish":"%s","name":"Sub2API %s","body":"%s","draft":false,"prerelease":false}' "$TAG" "$(git rev-parse HEAD)" "$VERSION" "$BODY") RELEASE_ID=$(curl -fsS \ -X POST \ -H "Authorization: token ${RELEASE_TOKEN}" \ -H "Content-Type: application/json" \ -d "$PAYLOAD" \ "$GITEA_API_URL/repos/$GITEA_OWNER/$GITEA_REPO/releases" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*') # Upload binary archive curl -fsS \ -X POST \ -H "Authorization: token ${RELEASE_TOKEN}" \ -H "Content-Type: application/octet-stream" \ --data-binary @/tmp/sub2api_linux_amd64.tar.gz \ "$GITEA_API_URL/repos/$GITEA_OWNER/$GITEA_REPO/releases/${RELEASE_ID}/assets?name=sub2api_linux_amd64.tar.gz" # Upload checksums curl -fsS \ -X POST \ -H "Authorization: token ${RELEASE_TOKEN}" \ -H "Content-Type: text/plain" \ --data-binary @/tmp/checksums.txt \ "$GITEA_API_URL/repos/$GITEA_OWNER/$GITEA_REPO/releases/${RELEASE_ID}/assets?name=checksums.txt"