From f916007f2da53ddeecf6391af3a263c0596f80c0 Mon Sep 17 00:00:00 2001 From: Snarling <84951833+Snarling@users.noreply.github.com> Date: Sun, 12 Feb 2023 02:22:07 -0500 Subject: [PATCH] CODEBASE: Combine the title and dist checks (#361) --- .github/PULL_REQUEST_TEMPLATE | 12 ++-- .../workflows/check-for-generated-files.yml | 55 --------------- .github/workflows/title-and-dist-checks.yml | 70 +++++++++++++++++++ .github/workflows/validate-pr.yml | 64 ----------------- 4 files changed, 75 insertions(+), 126 deletions(-) delete mode 100644 .github/workflows/check-for-generated-files.yml create mode 100644 .github/workflows/title-and-dist-checks.yml delete mode 100644 .github/workflows/validate-pr.yml diff --git a/.github/PULL_REQUEST_TEMPLATE b/.github/PULL_REQUEST_TEMPLATE index 0a98b290a..605e32443 100644 --- a/.github/PULL_REQUEST_TEMPLATE +++ b/.github/PULL_REQUEST_TEMPLATE @@ -1,5 +1,3 @@ -# Only bugfix are accepted - # DELETE THIS AFTER READING # READ CONTRIBUTING.md @@ -7,10 +5,10 @@ # PR title Formatted as such: -SECTION: PLAYER DESCRIPTION +CATEGORY: Change Description -SECTION is something like "API", "UI", "MISC", "STANEK", "CORPORATION" -PLAYER DESCRIPTION is what you'd tell a non-contributor to convey what is changed. +CATEGORY is something like "API", "UI", "MISC", "STANEK", etc, and must be uppercase. +Change Description is what you'd tell a non-contributor to convey what is changed. # Linked issues @@ -24,8 +22,8 @@ It'll automate the process. # Documentation -- DO NOT CHANGE any markdown/\*.md, these files are autogenerated from NetscriptDefinitions.d.ts and will be overwritten -- DO NOT re-generate the documentation, makes it harder to review. +- If your PR includes ns API function changes, do not manually modify markdown files. +- Instead, you can run `npm run doc` to autogenerate new markdown files that reflect your submitted API changes. # Bug fix diff --git a/.github/workflows/check-for-generated-files.yml b/.github/workflows/check-for-generated-files.yml deleted file mode 100644 index 414ba7620..000000000 --- a/.github/workflows/check-for-generated-files.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: Check for Generated Files - -on: - # Triggers the workflow on push or pull request events but only for the dev branch - pull_request: - branches: [dev] - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: - -jobs: - checkFiles: - name: Check Files - runs-on: ubuntu-latest - steps: - - name: Checkout files - uses: actions/checkout@v2 - - - name: Check bundle files - id: changed-bundle-files - uses: tj-actions/changed-files@v18.4 - with: - files: | - dist/* - index.html - - - name: Warn when bundle files were changed - id: warn-bundles-changed - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - echo "Creating label (if it does not exist)" - LABEL="validation: bundle files modified" - gh --repo "${{ github.repository }}" \ - label create "$LABEL" --description "Modifications to this pull request are suggested" --color D93F0B || true - - if [ "${{ steps.changed-bundle-files.outputs.any_changed }}" == "false" ]; then - echo "No forbidden files included, removing warning" - gh --repo "${{ github.repository }}" \ - pr edit "${{ github.event.number }}" --remove-label "$LABEL" || true - else - echo "Forbidden files included, generating warning" - - touch comment.txt - echo "## Generated build files were included. PRs should not normally contain generated files." >> comment.txt - echo "" >> comment.txt - echo "Review the changes and ensure that including generated files was necessary." >> comment.txt - - echo "Add pr label" - gh --repo "${{ github.repository }}" \ - pr edit "${{ github.event.number }}" --add-label "$LABEL" - echo "And comment on the pr" - gh --repo "${{ github.repository }}" \ - pr comment "${{ github.event.number }}" --body-file comment.txt --edit-last || pr comment "${{ github.event.number }}" --body-file comment.txt - fi diff --git a/.github/workflows/title-and-dist-checks.yml b/.github/workflows/title-and-dist-checks.yml new file mode 100644 index 000000000..c0544ff95 --- /dev/null +++ b/.github/workflows/title-and-dist-checks.yml @@ -0,0 +1,70 @@ +name: Validate Title and Check for Dist Changes + +on: + # Triggers the workflow on a few types of pull request events but only for the dev branch + pull_request: + branches: [dev] + types: [opened, edited, synchronize, reopened] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + checkFiles: + name: Check Files and Title + runs-on: ubuntu-latest + steps: + - name: Checkout files + uses: actions/checkout@v3 + - name: Check bundle files + id: changed-bundle-files + uses: tj-actions/changed-files@v18.4 + with: + files: | + dist/* + + - name: Warn when dist was changed or title is invalid + id: warn-bundles-changed + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo "Creating labels for dist modification and for invalid title" + LABELDIST="warning: includes dist changes" + LABELTITLE="error: invalid title" + gh --repo "${{ github.repository }}" label create "$LABELDIST" --description "Dist changes should not normally be included" --color EBAE34 || true + gh --repo "${{ github.repository }}" label create "$LABELTITLE" --description "PR title must follow specific format" --color D93F0B || true + + echo "Determine dist portion of comment text, and add/remove dist label as appropriate" + if [ "${{ steps.changed-bundle-files.outputs.any_changed }}" == "false" ]; then + echo "No forbidden files included, removing warning" + gh --repo "${{ github.repository }}" pr edit "${{ github.event.number }}" --remove-label "$LABELDIST" || true + distText="### No dist changes are detected." + else + echo "Forbidden files included, generating warning" + gh --repo "${{ github.repository }}" pr edit "${{ github.event.number }}" --add-label "$LABELDIST" + distText="## Dist changes were included. PRs should not normally contain any changes in the dist folder.\n\nReview the changes and ensure that the included dist changes were necessary." + fi + + echo "Validate title" + PR_TITLE=$(gh --repo "${{ github.repository }}" pr view "${{ github.event.number }}" --json title --jq .title) + TITLE_REGEX="^[0-9A-Z\-]*: .*$" + PR_TITLE_VALID=$(echo "$PR_TITLE" | grep -Eq "$TITLE_REGEX" && echo "true" || echo "false") + + echo "Determine title portion of comment text, and add/remove title label as appropriate" + if [ "$PR_TITLE_VALID" == "true" ]; then + gh --repo "${{ github.repository }}" pr edit "${{ github.event.number }}" --remove-label "$LABELTITLE" || true + commentText="$distText \n\n### Title is valid." + makeNewComment="${{ steps.changed-bundle-files.outputs.any_changed }}" + else + gh --repo "${{ github.repository }}" pr edit "${{ github.event.number }}" --add-label "$LABELTITLE" || true + commentText="$distText \n\n## The title \`$PR_TITLE\` should match \`$TITLE_REGEX\`\n\nCATEGORY: Change Description\n\nCATEGORY is something like 'API', 'UI', 'MISC', 'STANEK', etc.\n\nChange Description is what you'd tell a non-contributor to convey what is changed." + makeNewComment="true" + fi + + echo "Edit existing comment or make a new one (if no comment present and one of the tests failed)" + if [ "$makeNewComment" == "true" ]; then + gh --repo "${{ github.repository }}" pr comment "${{ github.event.number }}" --body "$(echo -e $commentText)" --edit-last || gh --repo "${{ github.repository }}" pr comment "${{ github.event.number }}" --body "$(echo -e $commentText)" + exit 1 + else + gh --repo "${{ github.repository }}" pr comment "${{ github.event.number }}" --body "$(echo -e $commentText)" --edit-last || true + fi diff --git a/.github/workflows/validate-pr.yml b/.github/workflows/validate-pr.yml deleted file mode 100644 index 5c0120050..000000000 --- a/.github/workflows/validate-pr.yml +++ /dev/null @@ -1,64 +0,0 @@ -name: Validate PR - -on: - pull_request: - branches: [dev] - types: [opened, edited, synchronize, reopened] - -jobs: - checkTitle: - name: Check Title - runs-on: ubuntu-latest - if: github.event_name == 'pull_request' - steps: - - name: Validate Title - id: validate-pr-title - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - echo "Creating label (if it does not exist)" - LABEL="validation: invalid title" - gh --repo "${{ github.repository }}" \ - label create "$LABEL" --description "Modifications to this pull request are requested" --color D93F0B || true - - PR_TITLE=$(\ - gh --repo "${{ github.repository }}" \ - pr view "${{ github.event.number }}" --json title --jq .title) - echo "::set-output name=title::$PR_TITLE" - echo "PR Title: $PR_TITLE" - - TITLE_REGEX="^[0-9A-Z\-]*: .*$" - PR_TITLE_VALID=$(echo "$PR_TITLE" | grep -Eq "$TITLE_REGEX" && echo "true" || echo "false") - - if [ "$PR_TITLE_VALID" == "true" ]; then - echo "Title is valid, removing label" - gh --repo "${{ github.repository }}" \ - pr edit "${{ github.event.number }}" --remove-label "$LABEL" || true - else - echo "Invalid Title" - ERROR_MSG="$PR_TITLE -> should match -> $TITLE_REGEX" - echo "$ERROR_MSG" - echo "::set-output name=invalid::true" - echo "::set-output name=errorMessage::$ERROR_MSG" - - touch comment.txt - echo "## The title \`$PR_TITLE\` should match \`$TITLE_REGEX\`" >> comment.txt - echo "" >> comment.txt - echo "SECTION: FIX #xzyw PLAYER DESCRIPTION" >> comment.txt - echo "" >> comment.txt - echo 'SECTION is something like "API", "UI", "MISC", "STANEK", "CORPORATION"' >> comment.txt - echo 'FIX #xyzw is the issue number, if any' >> comment.txt - echo "PLAYER DESCRIPTION is what you'd tell a non-contributor to convey what is changed." >> comment.txt - - echo "Add pr label" - gh --repo "${{ github.repository }}" \ - pr edit "${{ github.event.number }}" --add-label "$LABEL" - echo "And comment on the pr" - gh --repo "${{ github.repository }}" \ - pr comment "${{ github.event.number }}" --body-file comment.txt - fi - - name: Flag workflow error - if: steps.validate-pr-title.outputs.invalid == 'true' - run: | - echo "${{ steps.validate-pr-title.outputs.errorMessage }}" - exit 1