diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 69a1b7df..8d9a4c68 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,16 +4,13 @@ on: push: branches: - '**' + workflow_dispatch: permissions: - contents: read + contents: write pages: write id-token: write -concurrency: - group: "release-deploy" - cancel-in-progress: true - jobs: release: runs-on: ubuntu-latest @@ -22,74 +19,63 @@ jobs: uses: actions/checkout@v3 - name: Install dependencies - run: | - sudo apt-get update - sudo apt-get install -y zip gh + run: sudo apt-get update && sudo apt-get install -y zip jq - name: Create dist zip run: | mkdir -p release zip -r release/dist.zip dist - - name: Get latest release tag - id: get_latest_tag + - name: Determine latest release tag + id: get_latest run: | - LATEST_TAG=$(gh release list --limit 1 --json tagName -q '.[0].tagName' || echo "") - echo "LATEST_TAG=$LATEST_TAG" >> $GITHUB_ENV - - - name: Determine release tag - run: | - if [ -z "${{ env.LATEST_TAG }}" ]; then + LATEST=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/latest \ + | jq -r '.tag_name // empty') + echo "LATEST_TAG=$LATEST" >> $GITHUB_ENV + if [ -z "$LATEST" ]; then echo "RELEASE_TAG=v0.1.0" >> $GITHUB_ENV else - echo "RELEASE_TAG=${{ env.LATEST_TAG }}" >> $GITHUB_ENV + echo "RELEASE_TAG=$LATEST" >> $GITHUB_ENV fi - - name: Create or update GitHub release + - name: Create or update release + id: release run: | - gh auth setup-git - if gh release view "$RELEASE_TAG" &>/dev/null; then - gh release edit "$RELEASE_TAG" --generate-notes + RELEASE_NAME=${{ env.RELEASE_TAG }} + # Check if release exists + RELEASE_ID=$(curl -s -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases/tags/${{ env.RELEASE_TAG }} \ + | jq -r '.id // empty') + + if [ -z "$RELEASE_ID" ]; then + echo "Creating release $RELEASE_NAME" + RELEASE_ID=$(curl -s -X POST -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + -H "Content-Type: application/json" \ + -d "{\"tag_name\":\"${{ env.RELEASE_TAG }}\",\"name\":\"$RELEASE_NAME\",\"draft\":false,\"prerelease\":false}" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/releases | jq -r '.id') else - gh release create "$RELEASE_TAG" --generate-notes + echo "Release exists, using ID $RELEASE_ID" fi - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + echo "RELEASE_ID=$RELEASE_ID" >> $GITHUB_ENV - name: Upload hoc.kip - run: gh release upload "$RELEASE_TAG" dist/atmosphere/hoc.kip --clobber - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + ASSET="dist/atmosphere/hoc.kip" + FILENAME=$(basename $ASSET) + curl -s -X POST \ + -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + -H "Content-Type: application/octet-stream" \ + --data-binary @"$ASSET" \ + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME" - name: Upload dist.zip - run: gh release upload "$RELEASE_TAG" release/dist.zip --clobber - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - deploy: - runs-on: ubuntu-latest - needs: release - environment: - name: github-pages - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Setup Pages - uses: actions/configure-pages@v2 - - - name: Ensure dist exists run: | - if [ ! -d "./pages/dist" ]; then - echo "Error: ./pages/dist does not exist" - exit 1 - fi - - - name: Upload artifact - uses: actions/upload-pages-artifact@v1 - with: - path: './pages/dist' - - - name: Deploy to GitHub Pages - id: deployment - uses: actions/deploy-pages@v1 + ASSET="release/dist.zip" + FILENAME=$(basename $ASSET) + curl -s -X POST \ + -H "Authorization: token ${{ secrets.PAT_TOKEN }}" \ + -H "Content-Type: application/zip" \ + --data-binary @"$ASSET" \ + "https://uploads.github.com/repos/${GITHUB_REPOSITORY}/releases/${{ env.RELEASE_ID }}/assets?name=$FILENAME"