diff --git a/.github/release-drafter-template.yml b/.github/release-drafter-template.yml new file mode 100644 index 0000000000..7fc0b3c47b --- /dev/null +++ b/.github/release-drafter-template.yml @@ -0,0 +1,83 @@ +# For core module (empty folder), we want: +# - tag: v1.0.0 +# - name: v1.0.0 +# For other modules (modulegen, modules/mssql), we want: +# - tag: modulegen/v1.0.0 or modules/mssql/v1.0.0 +# - name: modulegen - v1.0.0 or modules/mssql - v1.0.0 +name-template: '{{FOLDER}}{{FOLDER_SEP}}v$RESOLVED_VERSION' +tag-template: '{{FOLDER}}{{FOLDER_SLASH}}v$RESOLVED_VERSION' +tag-prefix: '{{FOLDER}}{{FOLDER_SLASH}}v' +include-paths: + - {{FOLDER_PATH}} +categories: + - title: โš ๏ธ Breaking Changes + labels: + - 'breaking change' + - title: ๐Ÿ”’ Security + labels: + - 'security' + - title: ๐Ÿš€ Features + labels: + - 'enhancement' + - 'feature' + - title: ๐Ÿ› Bug Fixes + labels: + - 'bug' + - title: ๐Ÿ“– Documentation + labels: + - 'documentation' + - title: ๐Ÿงน Housekeeping + labels: + - 'chore' + - 'test flakiness' + - title: ๐Ÿ“ฆ Dependency updates + label: 'dependencies' +change-template: '- $TITLE (#$NUMBER)' +change-title-escapes: '\<*_&' # You can add # and @ to disable mentions, and add ` to disable code blocks. +exclude-contributors: + - dependabot + - dependabot[bot] +version-resolver: + major: + labels: + - 'breaking change' + minor: + labels: + - 'feature' + - 'security' + patch: + labels: + - 'bug' + - 'chore' + - 'documentation' + - 'dependencies' + default: patch +template: | + # What's Changed + $CHANGES + + **Full Changelog**: https://github.com/$OWNER/$REPOSITORY/compare/$PREVIOUS_TAG...{{FOLDER}}/v$RESOLVED_VERSION + + Thank you $CONTRIBUTORS for making this update possible. +autolabeler: + - label: 'breaking change' + title: + - '/^[a-z]+(\(.+\))?!\:/' + - label: 'security' + title: + - '/^security(\(.+\))?!?\:/' + - label: 'feature' + title: + - '/^feat(\(.+\))?!?\:/' + - label: 'bug' + title: + - '/^(fix)(\(.+\))?!?\:/' + - label: 'documentation' + title: + - '/^docs(\(.+\))?!?\:/' + - label: 'chore' + title: + - '/^chore(\(.+\))?!?\:/' + - label: 'dependencies' + title: + - '/^deps(\(.+\))?!?\:/' diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml deleted file mode 100644 index 2e5efff2b1..0000000000 --- a/.github/release-drafter.yml +++ /dev/null @@ -1,50 +0,0 @@ -name-template: v$NEXT_PATCH_VERSION -tag-template: v$NEXT_PATCH_VERSION -template: | - # What's Changed - $CHANGES -categories: - - title: โš ๏ธ Breaking Changes - labels: - - 'breaking change' - - title: ๐Ÿ”’ Security - labels: - - 'security' - - title: ๐Ÿš€ Features - labels: - - 'enhancement' - - 'feature' - - title: ๐Ÿ› Bug Fixes - labels: - - 'bug' - - title: ๐Ÿ“– Documentation - labels: - - 'documentation' - - title: ๐Ÿงน Housekeeping - labels: - - 'chore' - - 'test flakiness' - - title: ๐Ÿ“ฆ Dependency updates - label: 'dependencies' -autolabeler: - - label: 'breaking change' - title: - - '/^[a-z]+(\(.+\))?!\:/' - - label: 'security' - title: - - '/^security(\(.+\))?!?\:/' - - label: 'feature' - title: - - '/^feat(\(.+\))?!?\:/' - - label: 'bug' - title: - - '/^(fix)(\(.+\))?!?\:/' - - label: 'documentation' - title: - - '/^docs(\(.+\))?!?\:/' - - label: 'chore' - title: - - '/^chore(\(.+\))?!?\:/' - - label: 'dependencies' - title: - - '/^deps(\(.+\))?!?\:/' diff --git a/.github/workflows/release-drafter.yml b/.github/workflows/release-drafter.yml index 7f64281774..3f117223ba 100644 --- a/.github/workflows/release-drafter.yml +++ b/.github/workflows/release-drafter.yml @@ -14,14 +14,81 @@ permissions: contents: read jobs: + detect-modules: + runs-on: ubuntu-latest + outputs: + modules: ${{ steps.set-modified-modules.outputs.modules }} + modules_count: ${{ steps.set-modified-modules-count.outputs.modules_count }} + steps: + - name: Check out code into the Go module directory + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 + + - id: changed-files + name: Get changed files + uses: tj-actions/changed-files@823fcebdb31bb35fdf2229d9f769b400309430d0 # v46.0.3 + + - id: set-modified-modules + name: Set all modified modules + env: + ALL_CHANGED_FILES: "${{ steps.changed-files.outputs.all_changed_files }}" + run: echo "modules=$(./scripts/changed-modules.sh)" >> $GITHUB_OUTPUT + + - id: set-modified-modules-count + name: Set all modified modules count + run: echo "modules_count=$(echo ${{ toJSON(steps.set-modified-modules.outputs.modules) }} | jq '. | length')" >> $GITHUB_OUTPUT + + - name: Print out the modules to be used + run: | + echo "${{ steps.set-modified-modules-count.outputs.modules_count }} modules in the build" + echo "${{ steps.set-modified-modules.outputs.modules }}" + update_release_draft: + needs: detect-modules + if: ${{ needs.detect-modules.outputs.modules_count > 0 }} permissions: contents: write # for release-drafter/release-drafter to create a github release pull-requests: write # for release-drafter/release-drafter to add label to PR runs-on: ubuntu-latest + strategy: + matrix: + module: ${{ fromJSON(needs.detect-modules.outputs.modules) }} steps: - - uses: release-drafter/release-drafter@b1476f6e6eb133afa41ed8589daba6dc69b4d3f5 # v6.1.0 + - name: Check out code into the Go module directory + uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: - disable-autolabeler: false + # Disabling shallow clone is recommended for improving relevancy of reporting + fetch-depth: 0 + + - name: Generate dynamic config from template + id: generate-config + run: | + folder="${{ matrix.module }}" + if [ -z "$folder" ]; then + # Core module + folder_sep="" + folder_slash="" + folder_filename="core" + folder_path="." + else + # Any other module + folder_sep=" - " + folder_slash="/" + # Sanitize folder name for filename by replacing / with - + folder_filename=$(echo "$folder" | tr '/' '-') + folder_path="$folder" + fi + sed -e "s|{{FOLDER}}|$folder|g" \ + -e "s|{{FOLDER_SEP}}|$folder_sep|g" \ + -e "s|{{FOLDER_PATH}}|$folder_path|g" \ + -e "s|{{FOLDER_SLASH}}|$folder_slash|g" \ + .github/release-drafter-template.yml > .github/release-drafter-$folder_filename.yml + echo "config<> $GITHUB_OUTPUT + cat .github/release-drafter-$folder_filename.yml >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + - name: Use dynamic release-drafter configuration env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + uses: ReneWerner87/release-drafter@6dec4ceb1fb86b6514f11a2e7a39e1dedce709d0 + with: + config: ${{ steps.generate-config.outputs.config }}