diff --git a/.github/workflows/create-release.yaml b/.github/workflows/create-release.yaml index 1058323..f9fd6a8 100644 --- a/.github/workflows/create-release.yaml +++ b/.github/workflows/create-release.yaml @@ -1,60 +1,77 @@ -name: "Create Release" +name: "Create Gitea Release" -on: # yamllint disable-line rule:truthy +# This workflow is triggered manually from the Gitea Actions UI +on: workflow_dispatch: inputs: RELEASE_TAG: - description: 'v{Major}.{Minor}.{Patch}' + description: 'The release tag to create, formatted as v{Major}.{Minor}.{Patch}' + required: true jobs: release: name: "Release" - permissions: - contents: write runs-on: "ubuntu-latest" steps: - + # Step 1: Check out the repository source code and its submodules. + # The TOKEN_GITEA is used here to grant permission for the later 'git push'. - name: Checkout source - uses: actions/checkout@v3 + uses: "actions/checkout@v4" with: - token: ${{ secrets.ACTIONS_ACCESS_TOKEN }} + token: ${{ secrets.TOKEN_GITEA }} submodules: true - - name: Create branch and tag submodule + # Step 2: Create a new release branch, update the submodule to the specified tag, + # and push the new branch to the Gitea repository. + - name: Create Branch and Update Submodule run: | - git config user.email "actions@github.com" - git config user.name "actions-user" - git submodule update --init --remote + # Configure git user for the commit + git config user.email "actions@gitea.local" + git config user.name "Gitea Actions" + + # Create the new release branch git checkout -b 'release-${{ inputs.RELEASE_TAG }}' + + # Enter the submodule directory, fetch the latest tags, and check out the correct one. + # This points the submodule to the specific commit associated with the release tag. (cd calcom && git fetch --tags origin && git checkout 'refs/tags/${{ inputs.RELEASE_TAG }}') + + # Stage and commit the change to the submodule pointer git add calcom - git commit -m "tag version Cal.com version ${{ inputs.RELEASE_TAG }}" + git commit -m "Update submodule to Cal.com version ${{ inputs.RELEASE_TAG }}" + + # Push the newly created release branch to the remote Gitea repository git push origin 'release-${{ inputs.RELEASE_TAG }}' - # note: instead of secrets.GITHUB_TOKEN here, we need to use a PAT - # so that the release creation triggers the image build workflow - - name: "Create release" - uses: "actions/github-script@v6" - with: - github-token: "${{ secrets.ACTIONS_ACCESS_TOKEN }}" - script: | - const isPreRelease = '${{ inputs.RELEASE_TAG }}'.includes('-rc'); - try { - const response = await github.rest.repos.createRelease({ - draft: false, - generate_release_notes: true, - body: 'For Cal.com release details, see: https://github.com/calcom/cal.com/releases/tag/${{ inputs.RELEASE_TAG }}', - name: '${{ inputs.RELEASE_TAG }}', - target_commitish: 'release-${{ inputs.RELEASE_TAG }}', - owner: context.repo.owner, - prerelease: isPreRelease, - repo: context.repo.repo, - tag_name: '${{ inputs.RELEASE_TAG }}', - }); + # Step 3: Call the Gitea API to create the official release object. + # This uses the same API token to authorize the action. + - name: "Create Gitea Release" + env: + GITEA_TOKEN: ${{ secrets.TOKEN_GITEA }} + GITEA_API_URL: ${{ gitea.instance }}/api/v1 + OWNER: ${{ gitea.repository_owner }} + REPO: ${{ gitea.repository_name }} + run: | + # Determine if the tag indicates a pre-release + is_prerelease=false + if [[ "${{ inputs.RELEASE_TAG }}" == *"-rc"* || "${{ inputs.RELEASE_TAG }}" == *"-beta"* ]]; then + is_prerelease=true + fi - core.exportVariable('RELEASE_ID', response.data.id); - core.exportVariable('RELEASE_UPLOAD_URL', response.data.upload_url); - } catch (error) { - core.setFailed(error.message); - } + echo "Creating release ${{ inputs.RELEASE_TAG }}..." + echo "Is prerelease: $is_prerelease" + + # Use curl to send a POST request to the Gitea API's 'create release' endpoint + curl --fail --silent --show-error -L -X POST \ + -H "accept: application/json" \ + -H "Authorization: token ${GITEA_TOKEN}" \ + -H "Content-Type: application/json" \ + "${GITEA_API_URL}/repos/${OWNER}/${REPO}/releases" \ + -d '{ + "tag_name": "${{ inputs.RELEASE_TAG }}", + "target_commitish": "release-${{ inputs.RELEASE_TAG }}", + "name": "${{ inputs.RELEASE_TAG }}", + "body": "For Cal.com release details, see: https://github.com/calcom/cal.com/releases/tag/${{ inputs.RELEASE_TAG }}", + "prerelease": '${is_prerelease}' + }' \ No newline at end of file