From 3e97de5d8e9507c54c5b0c7e3acd33d3267c8c65 Mon Sep 17 00:00:00 2001 From: Pritish Budhiraja Date: Fri, 10 Jan 2025 13:49:33 +0530 Subject: [PATCH] ci: added worklows --- .github/CODEOWNERS | 1 + .github/PULL_REQUEST_TEMPLATE.md | 67 +++++++++++++++ .github/workflows/CI-Action.yml | 36 ++++++++ .../workflows/conventional-commit-check.yml | 86 +++++++++++++++++++ .github/workflows/pr-label-removal.yml | 30 +++++++ .github/workflows/pr-title-spell-check.yml | 40 +++++++++ 6 files changed, 260 insertions(+) create mode 100644 .github/CODEOWNERS create mode 100644 .github/PULL_REQUEST_TEMPLATE.md create mode 100644 .github/workflows/CI-Action.yml create mode 100644 .github/workflows/conventional-commit-check.yml create mode 100644 .github/workflows/pr-label-removal.yml create mode 100644 .github/workflows/pr-title-spell-check.yml diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..2fbad7c --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +- @ArushKapoorJuspay @PritishBudhiraja @seekshiva \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 0000000..daebccc --- /dev/null +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,67 @@ +## Type of Change + + + +- [ ] Bugfix +- [ ] New feature +- [ ] Enhancement +- [ ] Refactoring +- [ ] Dependency updates +- [ ] Documentation +- [ ] CI/CD + +--- + +## **Description** + + + + +--- + +## **How did you test it?** + + + +--- + +## **Usage Notes** + + + +--- + +## **Version Update** + +- [ ] I have bumped the package version in `package.json` following semantic versioning: + - `x.x.x` for major changes (breaking). + - `x.x.x` for minor changes (new feature, no breaking changes). + - `x.x.x` for patch changes (bug fixes, minor improvements). + +--- + +## **Checklist** + + + +- [ ] I ran `npm run re:build` and verified the build artifacts. +- [ ] I reviewed the code for style, readability, and consistency. +- [ ] I verified the changes are backward compatible (if applicable). +- [ ] I tested this change in a real or simulated consuming project. +- [ ] I updated documentation, README, or usage examples if necessary. + +--- + +## **Screenshots or Logs** + + + diff --git a/.github/workflows/CI-Action.yml b/.github/workflows/CI-Action.yml new file mode 100644 index 0000000..feced1b --- /dev/null +++ b/.github/workflows/CI-Action.yml @@ -0,0 +1,36 @@ +name: CI/CD Pipeline + +on: + pull_request: + merge_group: + push: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v2 + with: + fetch-depth: 0 + token: ${{ secrets.AUTORELEASE_PAT || github.token }} + + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: "20" + + - name: Install dependencies + run: npm install + + - name: Display Node.js version + run: node --version + + - name: "Rescript Code Compile" + run: npm run re:build + + - name: "Build" + run: npm run build diff --git a/.github/workflows/conventional-commit-check.yml b/.github/workflows/conventional-commit-check.yml new file mode 100644 index 0000000..ad01642 --- /dev/null +++ b/.github/workflows/conventional-commit-check.yml @@ -0,0 +1,86 @@ +name: Conventional Commit Message Check + +on: + # This is a dangerous event trigger as it causes the workflow to run in the + # context of the target repository. + # Avoid checking out the head of the pull request or building code from the + # pull request whenever this trigger is used. + # Since we only label pull requests, do not have a checkout step in this + # workflow, and restrict permissions on the token, this is an acceptable + # use of this trigger. + pull_request_target: + types: + - opened + - edited + - reopened + - ready_for_review + - synchronize + + merge_group: + types: + - checks_requested + +permissions: + # Reference: https://github.com/cli/cli/issues/6274 + repository-projects: read + pull-requests: write + +env: + # Allow more retries for network requests in cargo (downloading crates) and + # rustup (installing toolchains). This should help to reduce flaky CI failures + # from transient network timeouts or other issues. + CARGO_NET_RETRY: 10 + RUSTUP_MAX_RETRIES: 10 + # Use cargo's sparse index protocol + CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse + +jobs: + pr_title_check: + name: Verify PR title follows conventional commit standards + runs-on: ubuntu-latest + + steps: + - name: Install Rust + uses: dtolnay/rust-toolchain@master + with: + toolchain: stable 2 weeks ago + + - uses: baptiste0928/cargo-install@v2.2.0 + with: + crate: cocogitto + + - name: Verify PR title follows conventional commit standards + id: pr_title_check + if: ${{ github.event_name == 'pull_request_target' }} + shell: bash + env: + TITLE: ${{ github.event.pull_request.title }} + continue-on-error: true + run: cog verify "$TITLE" + + - name: Verify commit message follows conventional commit standards + id: commit_message_check + if: ${{ github.event_name == 'merge_group' }} + shell: bash + # Fail on error, we don't have context about PR information to update labels + continue-on-error: false + run: cog verify '${{ github.event.merge_group.head_commit.message }}' + + # GitHub CLI returns a successful error code even if the PR has the label already attached + - name: Attach 'S-conventions-not-followed' label if PR title check failed + if: ${{ github.event_name == 'pull_request_target' && steps.pr_title_check.outcome == 'failure' }} + shell: bash + env: + GH_TOKEN: ${{ github.token }} + run: | + gh --repo ${{ github.event.repository.full_name }} pr edit --add-label 'S-conventions-not-followed' ${{ github.event.pull_request.number }} + echo "::error::PR title does not follow conventional commit standards" + exit 1 + + # GitHub CLI returns a successful error code even if the PR does not have the label attached + - name: Remove 'S-conventions-not-followed' label if PR title check succeeded + if: ${{ github.event_name == 'pull_request_target' && steps.pr_title_check.outcome == 'success' }} + shell: bash + env: + GH_TOKEN: ${{ github.token }} + run: gh --repo ${{ github.event.repository.full_name }} pr edit --remove-label 'S-conventions-not-followed' ${{ github.event.pull_request.number }} diff --git a/.github/workflows/pr-label-removal.yml b/.github/workflows/pr-label-removal.yml new file mode 100644 index 0000000..969d3e3 --- /dev/null +++ b/.github/workflows/pr-label-removal.yml @@ -0,0 +1,30 @@ +name: Update PR Label to Closed + +on: + pull_request: + types: + - closed + +jobs: + pr-label: + runs-on: ubuntu-latest + + steps: + - name: Check out code + uses: actions/checkout@v2 + + - name: Remove all labels + run: | + PR_NUMBER=$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH") + + curl -L \ + -X DELETE \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/labels + + - name: Add new label + run: | + export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} + gh pr edit ${{ github.event.pull_request.number }} --add-label "Closed" diff --git a/.github/workflows/pr-title-spell-check.yml b/.github/workflows/pr-title-spell-check.yml new file mode 100644 index 0000000..96761b2 --- /dev/null +++ b/.github/workflows/pr-title-spell-check.yml @@ -0,0 +1,40 @@ +name: PR Title Spell Check + +on: + merge_group: + pull_request: + types: + - opened + - edited + - synchronize + +jobs: + typos: + name: Spell check PR title + runs-on: ubuntu-latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Store PR title in a file + shell: bash + env: + TITLE: ${{ github.event.pull_request.title }} + run: echo $TITLE > pr_title.txt + + - name: Spell check + uses: crate-ci/typos@master + with: + files: ./pr_title.txt + + - name: Assign to author + run: | + PR_NUMBER=$(jq --raw-output .pull_request.number "$GITHUB_EVENT_PATH") + + curl -L \ + -X POST \ + -H "Accept: application/vnd.github+json" \ + -H "Authorization: Bearer ${{ secrets.GITHUB_TOKEN }}" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + https://api.github.com/repos/${GITHUB_REPOSITORY}/issues/${PR_NUMBER}/assignees \ + -d '{"assignees":["${{ github.event.pull_request.user.login }}"]}'