TPT-4298: Added PR title checking to lint workflow and new clean up release notes workflow #2105
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Continuous Integration | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| test_report_upload: | |
| description: 'Indicates whether to upload the test report to object storage. Defaults to "false"' | |
| type: choice | |
| required: false | |
| default: 'false' | |
| options: | |
| - 'true' | |
| - 'false' | |
| push: | |
| branches: | |
| - main | |
| pull_request: null | |
| jobs: | |
| lint-tidy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Validate PR Title | |
| if: github.event_name == 'pull_request' | |
| env: | |
| GH_TOKEN: ${{ github.token }} | |
| PR_NUMBER: ${{ github.event.pull_request.number }} | |
| run: | | |
| set -euo pipefail | |
| if ! TITLE=$(gh pr view "$PR_NUMBER" --repo "$GITHUB_REPOSITORY" --json title --jq '.title'); then | |
| echo "Error: failed to fetch PR title using 'gh pr view'." | |
| echo "Please check GitHub CLI authentication, API access, and network connectivity." | |
| exit 1 | |
| fi | |
| if [[ -z "$TITLE" ]]; then | |
| echo "Error: 'gh pr view' returned an empty title." | |
| exit 1 | |
| fi | |
| if [[ ! "$TITLE" =~ ^TPT-[0-9]+:[[:space:]]*.+ ]]; then | |
| echo "Invalid PR title:" | |
| echo " \"$TITLE\"" | |
| echo "" | |
| echo "PR title must follow format:" | |
| echo " TPT-1234: Description" | |
| exit 1 | |
| fi | |
| echo "PR title is valid: $TITLE" | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-go@v6 | |
| with: | |
| go-version: stable | |
| - name: golangci-lint | |
| uses: golangci/golangci-lint-action@v9 | |
| with: | |
| version: latest | |
| - name: Run tidy | |
| run: make tidy | |
| - name: Run formatter | |
| run: | | |
| go install mvdan.cc/gofumpt@86bffd62437a3c437c0b84d5d5ab244824e762fc | |
| gofumpt -l -w . | |
| - name: Fail if changes | |
| run: git diff-index --exit-code HEAD | |
| test: | |
| runs-on: ubuntu-latest | |
| env: | |
| EXIT_STATUS: 0 | |
| steps: | |
| - name: Clone Repository | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| submodules: 'recursive' | |
| - name: Set up Go | |
| uses: actions/setup-go@v6 | |
| with: | |
| go-version: 'stable' | |
| - run: go version | |
| - name: Setup Python | |
| uses: actions/setup-python@v6 | |
| with: | |
| python-version: '3.x' | |
| - name: Install Python deps | |
| run: pip3 install requests wheel boto3==1.35.99 | |
| - name: Install go-junit-report | |
| run: go install github.com/jstemmer/go-junit-report/v2@latest | |
| - name: Set report filename | |
| run: echo "REPORT_FILENAME=$(date +'%Y%m%d%H%M')_linodego_test_report.xml" >> $GITHUB_ENV | |
| - name: Run tests and save test report | |
| run: | | |
| make test | go-junit-report -set-exit-code -iocopy -out $REPORT_FILENAME | |
| env: | |
| SKIP_LINT: 1 | |
| - name: Upload test results to bucket | |
| if: always() && github.repository == 'linode/linodego' && github.ref == 'refs/heads/main' && (github.event_name == 'push' || github.event_name == 'pull_request' || (github.event_name == 'workflow_dispatch' && inputs.test_report_upload == 'true')) | |
| run: | | |
| python3 e2e_scripts/tod_scripts/xml_to_obj_storage/scripts/add_gha_info_to_xml.py \ | |
| --branch_name "${GITHUB_REF#refs/*/}" \ | |
| --gha_run_id "$GITHUB_RUN_ID" \ | |
| --gha_run_number "$GITHUB_RUN_NUMBER" \ | |
| --xmlfile "$REPORT_FILENAME" | |
| sync | |
| python3 e2e_scripts/tod_scripts/xml_to_obj_storage/scripts/xml_to_obj.py "$REPORT_FILENAME" | |
| env: | |
| LINODE_CLI_OBJ_ACCESS_KEY: ${{ secrets.LINODE_CLI_OBJ_ACCESS_KEY }} | |
| LINODE_CLI_OBJ_SECRET_KEY: ${{ secrets.LINODE_CLI_OBJ_SECRET_KEY }} | |
| notify-slack: | |
| runs-on: ubuntu-latest | |
| needs: [ test ] | |
| if: ${{ (success() || failure()) && github.ref == 'refs/heads/main' && github.event_name == 'push' && github.repository == 'linode/linodego' }} | |
| steps: | |
| - name: Notify Slack | |
| uses: slackapi/slack-github-action@v2.1.1 | |
| with: | |
| method: chat.postMessage | |
| token: ${{ secrets.SLACK_BOT_TOKEN }} | |
| payload: | | |
| channel: ${{ secrets.SLACK_CHANNEL_ID }} | |
| blocks: | |
| - type: section | |
| text: | |
| type: mrkdwn | |
| text: ":rocket: *${{ github.workflow }} Completed in: ${{ github.repository }}* :white_check_mark:" | |
| - type: divider | |
| - type: section | |
| fields: | |
| - type: mrkdwn | |
| text: "*Build Result:*\n${{ needs.test.result == 'success' && ':large_green_circle: Build Passed' || ':red_circle: Build Failed' }}" | |
| - type: mrkdwn | |
| text: "*Branch:*\n`${{ github.ref_name }}`" | |
| - type: section | |
| fields: | |
| - type: mrkdwn | |
| text: "*Commit Hash:*\n<${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }}|${{ github.sha }}>" | |
| - type: mrkdwn | |
| text: "*Run URL:*\n<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Run Details>" | |
| - type: divider | |
| - type: context | |
| elements: | |
| - type: mrkdwn | |
| text: "Triggered by: :bust_in_silhouette: `${{ github.actor }}`" |