name: Code Formatting on: workflow_call: inputs: auto_fix: description: "Automatically fix formatting issues instead of just checking" required: false type: boolean default: false outputs: commit_sha: description: "The SHA of the commit with formatting fixes" value: ${{ jobs.formatting.outputs.commit_sha }} push: branches-ignore: - "queue-main-*" - "queue-dev-*" pull_request: permissions: contents: write jobs: formatting: outputs: commit_sha: ${{ steps.get_commit.outputs.commit_sha }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: ref: ${{ github.head_ref || github.ref }} # Need full history for queue-main pushes fetch-depth: 0 # Setup for Prettier - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "20" cache: "npm" cache-dependency-path: webui/package-lock.json - name: Install dependencies working-directory: ./webui run: npm ci # Setup for gofumpt - name: Setup Go uses: actions/setup-go@v4 with: go-version: stable cache: true - name: Install gofumpt v0.8.0 run: | go install mvdan.cc/gofumpt@v0.8.0 echo "$(go env GOPATH)/bin" >> $GITHUB_PATH - name: Check formatting if: inputs.auto_fix != true run: bin/run-formatters.sh check - name: Fix formatting if: inputs.auto_fix == true run: bin/run-formatters.sh fix # Commit formatting fixes if auto_fix is true - name: Commit and push formatting fixes if needed if: inputs.auto_fix == true run: | # Only proceed if there are changes to commit if [[ -z $(git status --porcelain) ]]; then echo "No formatting changes detected, skipping commit" exit 0 fi git config --global user.name "Autoformatter" git config --global user.email "bot@sketch.dev" git add . git fetch origin main MERGE_BASE=$(git merge-base HEAD origin/main) COMMIT_COUNT=$(git rev-list --count $MERGE_BASE..HEAD) if [ "$COMMIT_COUNT" -eq 1 ]; then echo "Found exactly one commit since merge-base with origin/main. Amending the commit." git commit --amend --no-edit else echo "Found multiple commits ($COMMIT_COUNT) since merge-base with origin/main. Creating a new commit." git commit -m "all: fix formatting" fi git push -f https://${GITHUB_ACTOR}:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git HEAD - name: Get commit SHA id: get_commit run: echo "commit_sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT