name: post-commit on: pull_request: types: - closed jobs: # this job will run after a PR is merged to run pre-commit on any changed file # so that the user does not need to learn pre-commit and pre-commit can still # be auto-executed by the workflow pre-commit: runs-on: ubuntu-latest if: github.event.pull_request.merged == true && github.repository == 'hpcaitech/ColossalAI' steps: - uses: actions/checkout@v2 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha }} # the PR branch and the hpcaitech/colossal-ai main branch # must share a common commit, we need to locate that commit, # which is the commit checked-out or forked when the PR branch is created # such that we can look for files changed since that commit - name: Locate base commit id: locate-base-sha run: | curBranch=$(git rev-parse --abbrev-ref HEAD) commonCommit=$(git merge-base origin/main $curBranch) echo $commonCommit echo "baseSHA=$commonCommit" >> $GITHUB_OUTPUT - name: Find the changed files id: find-changed-files uses: tj-actions/changed-files@v35 with: base_sha: ${{ steps.locate-base-sha.outputs.baseSHA }} - name: List all changed files run: | for file in ${{ steps.find-changed-files.outputs.all_changed_files }}; do echo "$file was changed" done # check out the main branch - uses: actions/checkout@v2 with: ref: 'main' - uses: actions/setup-python@v3 - name: Cache pre-commit hooks uses: actions/cache@v3 with: path: ~/.cache/pre-commit key: ${{ runner.os }}-pre-commit-hooks - name: Set up pre-commit run: | pip install pre-commit pre-commit install # run pre-commit on changed files - name: Run Pre-commit run: | for file in ${{ steps.find-changed-files.outputs.all_changed_files }}; do pre-commit run --files $file || true done # create commit for pre-commit # when all files are well formatted, there is no need to create a commit # therefore, this step will produce an error, which should be allowed - name: Create commits id: commit continue-on-error: true run: | git config --global user.name 'github-actions' git config --global user.email 'github-actions@github.com' git remote set-url origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/${{ github.repository }} git add -A git commit -am "[format] applied code formatting on changed files in pull request ${{ github.event.pull_request.number }}" # create pull request - name: Create Pull Request if: steps.commit.outcome == 'success' id: cpr uses: peter-evans/create-pull-request@v4 with: branch: pre-commit-${{ github.event.pull_request.number }} title: "[format] applied code formatting on changed files in PR ${{ github.event.pull_request.number }}" - name: Enable Auto-merge for the New PR if: steps.commit.outcome == 'success' uses: peter-evans/enable-pull-request-automerge@v2 with: pull-request-number: ${{ steps.cpr.outputs.pull-request-number }} merge-method: squash