diff --git a/.forgejo/workflows/release.yml b/.forgejo/workflows/release.yml index 5ac02ad..8ed8ae7 100644 --- a/.forgejo/workflows/release.yml +++ b/.forgejo/workflows/release.yml @@ -3,10 +3,19 @@ name: release on: release: types: [published] + push: + tags: + - '*' + workflow_dispatch: + inputs: + tag: + description: 'Tag name for release (creates tag at HEAD)' + required: true jobs: build: - runs-on: codeberg-small + runs-on: ubuntu-latest + container: catthehacker/ubuntu:act-latest steps: - uses: actions/checkout@v4 @@ -35,16 +44,33 @@ jobs: - name: Upload to release env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + FORGEJO_TOKEN: ${{ secrets.FORGEJO_TOKEN }} run: | - RELEASE_ID="${{ github.event.release.id }}" - API_URL="${{ github.api_url }}/repos/${{ github.repository }}/releases/${RELEASE_ID}/assets" + TAG="${{ github.event.inputs.tag || github.ref_name }}" + API_BASE="${{ github.server_url }}/api/v1" + REPO="${{ github.repository }}" + # get or create release + RELEASE_ID=$(curl -sf \ + -H "Authorization: token ${FORGEJO_TOKEN}" \ + "${API_BASE}/repos/${REPO}/releases/tags/${TAG}" | jq -r '.id') + + if [ "$RELEASE_ID" = "null" ] || [ -z "$RELEASE_ID" ]; then + echo "Creating release for ${TAG}..." + RELEASE_ID=$(curl -sf -X POST \ + -H "Authorization: token ${FORGEJO_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\": \"${TAG}\", \"name\": \"${TAG}\"}" \ + "${API_BASE}/repos/${REPO}/releases" | jq -r '.id') + fi + + echo "Release ID: ${RELEASE_ID}" + + # upload assets for file in lofivor-linux-x86_64 lofivor-windows-x86_64.exe; do echo "Uploading $file..." - curl -X POST \ - -H "Authorization: token ${GITHUB_TOKEN}" \ - -H "Content-Type: application/octet-stream" \ - --data-binary @"$file" \ - "${API_URL}?name=${file}" + curl -sf -X POST \ + -H "Authorization: token ${FORGEJO_TOKEN}" \ + -F "attachment=@${file}" \ + "${API_BASE}/repos/${REPO}/releases/${RELEASE_ID}/assets?name=${file}" done