From a671d06dd9fd008f52dfd926819a944e28135657 Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Thu, 6 Jun 2024 09:31:27 -0400 Subject: [PATCH] [3] Multiple GitHub Action updates (#2104) --- .github/workflows/increment-build.yml | 22 ++++- .github/workflows/release-develop.yml | 34 +++++--- .github/workflows/release-master.yml | 31 +++++-- .github/workflows/validate-pull.yml | 115 +++++++++++++++++++++++--- VERSION | 2 +- modules/request.py | 8 +- 6 files changed, 178 insertions(+), 34 deletions(-) diff --git a/.github/workflows/increment-build.yml b/.github/workflows/increment-build.yml index 70e6211e..19c26e1f 100644 --- a/.github/workflows/increment-build.yml +++ b/.github/workflows/increment-build.yml @@ -1,7 +1,7 @@ name: Increment Build on: - pull_request: + pull_request_target: branches: [nightly] types: [closed] @@ -39,7 +39,12 @@ jobs: version="${value%-build*}" if [[ "$value" == *"-"* ]]; then - build_value="$((${value#*-build} + 1))" + value2="${value#*-build}" + if [[ "$value2" == *"."* ]]; then + build_value="$((${value2%.*} + 1))" + else + build_value="$((${value2} + 1))" + fi else build_value="1" fi @@ -175,3 +180,16 @@ jobs: avatar_url: ${{ vars.BOT_IMAGE }} author: ${{ vars.REPO_NAME }} Nightly Release author_icon_url: ${{ vars.RELEASE_IMAGE }} + + cleanup-tags: + runs-on: ubuntu-latest + needs: [ increment-build, verify-changes, docker-build-nightly, commit-notification ] + if: ${{ success() }} + steps: + - name: remove tag + run: | + HUB_TOKEN=$(curl -s -H "Content-Type: application/json" -X POST -d "{\"username\": \"${{ secrets.DOCKER_HUB_USERNAME }}\", \"password\": \"${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}\"}" https://hub.docker.com/v2/users/login/ | jq -r .token) + curl -i -X DELETE \ + -H "Accept: application/json" \ + -H "Authorization: JWT $HUB_TOKEN" \ + https://hub.docker.com/v2/repositories/kometateam/kometa/tags/${{ github.head_ref }}/ \ No newline at end of file diff --git a/.github/workflows/release-develop.yml b/.github/workflows/release-develop.yml index ef8911da..d74da2d9 100644 --- a/.github/workflows/release-develop.yml +++ b/.github/workflows/release-develop.yml @@ -2,6 +2,10 @@ name: Develop Release on: workflow_dispatch: + inputs: + build_number: + description: Choose the build number to push develop to. + default: 0 jobs: release-develop: @@ -23,10 +27,10 @@ jobs: fetch-depth: 0 - name: Fast Forward Develop + id: forward run: | value=$(cat VERSION) develop_hash=$(git rev-parse HEAD) - next_build="${{ vars.DEVELOP_BUILD }}" if [[ "$value" == *"-"* ]]; then develop_build="$((${value#*-build}))" @@ -35,7 +39,6 @@ jobs: fi git checkout origin/nightly - value=$(cat VERSION) if [[ "$value" == *"-"* ]]; then @@ -46,16 +49,25 @@ jobs: echo "DEVELOP_BUILD: '${develop_build}'" echo "NIGHTLY_BUILD: '${nightly_build}'" - echo "NEXT_BUILD: '${next_build}'" - - if (( next_build <= develop_build )); then - echo "::error::NEXT_BUILD variable (${next_build}) must be greater than DEVELOP_BUILD (${develop_build})" + + if ! [[ ${{ github.event.inputs.build_number }} =~ ^[0-9]+$ ]]; then + echo "::error::BUILD_NUMBER (${{ github.event.inputs.build_number }}) must be a number" exit 1 - elif (( next_build > nightly_build )); then - echo "::error::NEXT_BUILD variable (${next_build}) must be less than or equal to NIGHTLY_BUILD (${nightly_build})" + elif [[ "${{ github.event.inputs.build_number }}" == "0" ]]; then + next_build="${nightly_build}" + elif (( ${{ github.event.inputs.build_number }} <= develop_build )); then + echo "::error::BUILD_NUMBER (${{ github.event.inputs.build_number }}) must be greater than DEVELOP_BUILD (${develop_build})" exit 1 + elif (( ${{ github.event.inputs.build_number }} > nightly_build )); then + echo "::error::BUILD_NUMBER (${{ github.event.inputs.build_number }}) must be less than or equal to NIGHTLY_BUILD (${nightly_build})" + exit 1 + else + next_build="${{ github.event.inputs.build_number }}" fi - + + echo "NEXT_BUILD: '${next_build}'" + echo "build=next_build" >> $GITHUB_OUTPUT + while : ; do value=$(cat VERSION) @@ -86,7 +98,7 @@ jobs: if: success() with: webhook_id_token: ${{ secrets.BUILD_WEBHOOK }} - title: "${{ vars.REPO_NAME }} develop pushed to Build ${{ vars.DEVELOP_BUILD }}: ${{ vars.TEXT_SUCCESS }}" + title: "${{ vars.REPO_NAME }} develop pushed to Build ${{ steps.forward.outputs.build }}: ${{ vars.TEXT_SUCCESS }}" url: https://github.com/Kometa-Team/${{ vars.REPO_NAME }}/actions/runs/${{ github.run_id }} color: ${{ vars.COLOR_SUCCESS }} username: ${{ vars.BOT_NAME }} @@ -100,7 +112,7 @@ jobs: with: webhook_id_token: ${{ secrets.BUILD_WEBHOOK }} message: ${{ vars.BUILD_FAILURE_ROLE }} - title: "${{ vars.REPO_NAME }} develop pushed to Build ${{ vars.DEVELOP_BUILD }}: ${{ vars.TEXT_FAILURE }}" + title: "${{ vars.REPO_NAME }} develop pushed to Build ${{ steps.forward.outputs.build }}: ${{ vars.TEXT_FAILURE }}" url: https://github.com/Kometa-Team/${{ vars.REPO_NAME }}/actions/runs/${{ github.run_id }} color: ${{ vars.COLOR_FAILURE }} username: ${{ vars.BOT_NAME }} diff --git a/.github/workflows/release-master.yml b/.github/workflows/release-master.yml index 12c1e63f..38dea890 100644 --- a/.github/workflows/release-master.yml +++ b/.github/workflows/release-master.yml @@ -2,6 +2,15 @@ name: Master Release on: workflow_dispatch: + inputs: + release_type: + type: choice + description: Choose which type of release to perform. + options: + - major + - minor + - patch + default: patch jobs: release-master: @@ -26,21 +35,25 @@ jobs: run: | value=$(cat VERSION) version="${value%-build*}" - next_version="${{ vars.NEXT_VERSION }}" echo "CURRENT_VERSION: '${version}'" - echo "NEXT_VERSION: '${next_version}'" + IFS='.' read -r MAJOR MINOR PATCH <<< "$version" - if [[ "$version" == "$next_version" ]]; then - echo "::error::NEXT_VERSION variable (${next_version}) must be incremented" - exit 1 + if [[ "${{ github.event.inputs.release_type }}" == "major" ]]; then + NEW_VERSION="$((MAJOR+1)).0.0" + elif [[ "${{ github.event.inputs.release_type }}" == "minor" ]]; then + NEW_VERSION="${MAJOR}.$((MINOR+1)).0" + else + NEW_VERSION="${MAJOR}.${MINOR}.$((PATCH+1))" fi - echo "$next_version" > "VERSION" + echo "NEW_VERSION='${NEW_VERSION}'" + echo "new_ver=$NEW_VERSION" >> $GITHUB_OUTPUT + echo "$NEW_VERSION" > "VERSION" git config --local user.email "action@github.com" git config --local user.name "GitHub Action" git add VERSION - git commit -m "Kometa Release ${next_version}" + git commit -m "Kometa Release ${NEW_VERSION}" git push origin nightly git push origin refs/heads/nightly:refs/heads/develop git push origin refs/heads/nightly:refs/heads/main @@ -50,7 +63,7 @@ jobs: if: success() with: webhook_id_token: ${{ secrets.BUILD_WEBHOOK }} - title: "${{ vars.REPO_NAME }} master release ${{ vars.NEXT_VERSION }}: ${{ vars.TEXT_SUCCESS }}" + title: "${{ vars.REPO_NAME }} master release ${{ steps.release.outputs.new_ver }}: ${{ vars.TEXT_SUCCESS }}" url: https://github.com/Kometa-Team/${{ vars.REPO_NAME }}/actions/runs/${{ github.run_id }} color: ${{ vars.COLOR_SUCCESS }} username: ${{ vars.BOT_NAME }} @@ -64,7 +77,7 @@ jobs: with: webhook_id_token: ${{ secrets.BUILD_WEBHOOK }} message: ${{ vars.BUILD_FAILURE_ROLE }} - title: "${{ vars.REPO_NAME }} master release ${{ vars.NEXT_VERSION }}: ${{ vars.TEXT_FAILURE }}" + title: "${{ vars.REPO_NAME }} master release ${{ steps.release.outputs.new_ver }}: ${{ vars.TEXT_FAILURE }}" url: https://github.com/Kometa-Team/${{ vars.REPO_NAME }}/actions/runs/${{ github.run_id }} color: ${{ vars.COLOR_FAILURE }} username: ${{ vars.BOT_NAME }} diff --git a/.github/workflows/validate-pull.yml b/.github/workflows/validate-pull.yml index 45cca9f2..a2717559 100644 --- a/.github/workflows/validate-pull.yml +++ b/.github/workflows/validate-pull.yml @@ -1,7 +1,7 @@ name: Validate Pull Request on: - pull_request: + pull_request_target: types: [opened, synchronize, reopened, labeled] jobs: @@ -15,7 +15,7 @@ jobs: echo "Base Repo: ${{ github.event.pull_request.base.repo.full_name }}" echo "Base Ref: ${{ github.base_ref }}" echo "Head Repo: ${{ github.event.pull_request.head.repo.full_name }}" - echo "Head Ref: ${{ github.head_ref }}" + echo "Head Ref: ${{ github.event.pull_request.head.ref }}" - name: Check Base Branch if: github.base_ref == 'master' || github.base_ref == 'develop' @@ -27,18 +27,61 @@ jobs: uses: actions/checkout@v4 - name: Run Spellcheck - uses: rojopolis/spellcheck-github-actions@0.36.0 + uses: rojopolis/spellcheck-github-actions@0.37.0 docker-build-pull: runs-on: ubuntu-latest needs: [ validate-pull ] - if: contains(github.event.pull_request.labels.*.name, 'docker') + if: contains(github.event.pull_request.labels.*.name, 'docker') || contains(github.event.pull_request.labels.*.name, 'testers') + outputs: + commit-msg: ${{ steps.update-version.outputs.commit-msg }} + version: ${{ steps.update-version.outputs.version }} steps: + - name: Create App Token + uses: actions/create-github-app-token@v1 + id: app-token + with: + app-id: ${{ vars.APP_ID }} + private-key: ${{ secrets.APP_TOKEN }} + - name: Check Out Repo uses: actions/checkout@v4 with: - ref: ${{ github.head_ref }} + ref: ${{ github.event.pull_request.head.ref }} + repository: ${{ github.event.pull_request.head.repo.full_name }} + + - name: Update VERSION File + id: update-version + run: | + value=$(cat VERSION) + old_msg=$(git log -1 HEAD --pretty=format:%s) + echo "commit-msg=${old_msg}" >> $GITHUB_OUTPUT + version="${value%-build*}" + + if [[ "$value" == *"-"* ]]; then + value2="${value#*-build}" + if [[ "$value2" == *"."* ]]; then + build_value="${value2%.*}" + part_value="$((${value2#*.} + 1))" + else + build_value="${value#*-build}" + part_value="1" + fi + else + build_value="0" + part_value="1" + fi + + new_value="${version}-build${build_value}.${part_value}" + echo "version=${new_value}" >> $GITHUB_OUTPUT + + echo "$new_value" > "VERSION" + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add VERSION + git commit -m "Part: ${part_value}" + git push - name: Login to Docker Hub uses: docker/login-action@v3 @@ -62,10 +105,10 @@ jobs: context: ./ file: ./Dockerfile build-args: | - "BRANCH_NAME=${{ github.head_ref }}" + "BRANCH_NAME=${{ github.event.pull_request.head.ref }}" platforms: linux/amd64,linux/arm64 push: true - tags: kometateam/kometa:${{ github.head_ref }} + tags: kometateam/kometa:${{ github.event.pull_request.head.ref }} cache-from: type=gha cache-to: type=gha,mode=max @@ -74,7 +117,7 @@ jobs: if: success() with: webhook_id_token: ${{ secrets.BUILD_WEBHOOK }} - title: "${{ vars.REPO_NAME }} ${{ github.head_ref }}: ${{ vars.TEXT_SUCCESS }}" + title: "${{ vars.REPO_NAME }} ${{ github.event.pull_request.head.ref }}: ${{ vars.TEXT_SUCCESS }}" url: https://github.com/Kometa-Team/${{ vars.REPO_NAME }}/actions/runs/${{ github.run_id }} color: ${{ vars.COLOR_SUCCESS }} username: ${{ vars.BOT_NAME }} @@ -88,10 +131,62 @@ jobs: with: webhook_id_token: ${{ secrets.BUILD_WEBHOOK }} message: ${{ vars.BUILD_FAILURE_ROLE }} - title: "${{ vars.REPO_NAME }} ${{ github.head_ref }}: ${{ vars.TEXT_FAILURE }}" + title: "${{ vars.REPO_NAME }} ${{ github.event.pull_request.head.ref }}: ${{ vars.TEXT_FAILURE }}" url: https://github.com/Kometa-Team/${{ vars.REPO_NAME }}/actions/runs/${{ github.run_id }} color: ${{ vars.COLOR_FAILURE }} username: ${{ vars.BOT_NAME }} avatar_url: ${{ vars.BOT_IMAGE }} author: ${{ vars.DOCKER_NAME }} - author_icon_url: ${{ vars.DOCKER_IMAGE }} \ No newline at end of file + author_icon_url: ${{ vars.DOCKER_IMAGE }} + + notify-testers: + runs-on: ubuntu-latest + if: github.event.action == 'labeled' && github.event.label.name == 'tester' + steps: + + - name: Get Description + id: get-description + run: | + body="${{ github.event.pull_request.body }}" + body=$(echo "$body" | sed -n '/## Description/,/## Issues Fixed or Closed/{/## Description/b;/## Issues Fixed or Closed/b;p}') + body=$(echo $body|tr -d '\n') + echo "description=$body" >> $GITHUB_OUTPUT + + - name: Discord Testers Notification + uses: Kometa-Team/discord-notifications@master + with: + webhook_id_token: ${{ secrets.TESTERS_WEBHOOK }} + message: "The Kometa team are requesting <@&917323027438510110> to assist with testing an upcoming feature/bug fix. + + * For Local Git pull and checkout the `${{ github.event.pull_request.head.ref }}` branch + + * For Docker use the `kometateam/kometa:${{ github.event.pull_request.head.ref }}` image to do your testing + + Please report back either here or on the original GitHub Pull Request" + title: ${{ github.event.pull_request.title }} + description: ${{ steps.get-description.outputs.description }} + url: https://github.com/Kometa-Team/${{ vars.REPO_NAME }}/pull/${{ github.event.number }} + color: ${{ vars.COLOR_SUCCESS }} + username: ${{ vars.BOT_NAME }} + avatar_url: ${{ vars.BOT_IMAGE }} + author: ${{ vars.GIT_NAME }} + author_icon_url: ${{ vars.GIT_IMAGE }} + + update-testers: + runs-on: ubuntu-latest + needs: [ docker-build-pull ] + if: github.event.action == 'synchronize' && github.event.label.name == 'tester' + steps: + + - name: Discord Testers Notification + uses: Kometa-Team/discord-notifications@master + with: + webhook_id_token: ${{ secrets.TESTERS_WEBHOOK }} + message: "New Commit Pushed to `${{ github.event.pull_request.head.ref }}`: ${{ needs.docker-build-pull.outputs.version }}" + description: ${{ needs.docker-build-pull.outputs.commit-msg }} + url: https://github.com/Kometa-Team/${{ vars.REPO_NAME }}/pull/${{ github.event.number }} + color: ${{ vars.COLOR_SUCCESS }} + username: ${{ vars.BOT_NAME }} + avatar_url: ${{ vars.BOT_IMAGE }} + author: ${{ vars.GIT_NAME }} + author_icon_url: ${{ vars.GIT_IMAGE }} \ No newline at end of file diff --git a/VERSION b/VERSION index bd5cac7a..170de0b5 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.0.2-build2 +2.0.2-build3 diff --git a/modules/request.py b/modules/request.py index 47027530..4234cce9 100644 --- a/modules/request.py +++ b/modules/request.py @@ -44,7 +44,13 @@ class Version: self.full = version_string.replace("develop", "build") version_parts = self.full.split("-build") self.main = version_parts[0] - self.build = int(version_parts[1]) if len(version_parts) > 1 else 0 + self.build = 0 + self.part = 0 + if len(version_parts) > 1: + sub_parts = str(version_parts[1]).split(".") + self.build = int(sub_parts[0]) + if len(sub_parts) > 1: + self.parts = int(sub_parts[1]) def __bool__(self): return self.full != "Unknown"