Update @github/copilot Dependency #28
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: "Update @github/copilot Dependency" | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: 'Target version of @github/copilot (e.g. 0.0.420)' | |
| required: true | |
| type: string | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| jobs: | |
| update: | |
| name: "Update @github/copilot to ${{ inputs.version }}" | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Validate version input | |
| env: | |
| VERSION: ${{ inputs.version }} | |
| run: | | |
| if [[ ! "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-[a-zA-Z0-9._-]+)?$ ]]; then | |
| echo "::error::Invalid version format '$VERSION'. Expected semver (e.g. 0.0.420)." | |
| exit 1 | |
| fi | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - uses: actions/setup-go@v5 | |
| with: | |
| go-version: '1.22' | |
| - uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: "10.0.x" | |
| - name: Update @github/copilot in nodejs | |
| env: | |
| VERSION: ${{ inputs.version }} | |
| working-directory: ./nodejs | |
| run: npm install "@github/copilot@$VERSION" | |
| - name: Update @github/copilot in test harness | |
| env: | |
| VERSION: ${{ inputs.version }} | |
| working-directory: ./test/harness | |
| run: npm install "@github/copilot@$VERSION" | |
| - name: Refresh nodejs/samples lockfile | |
| working-directory: ./nodejs/samples | |
| run: npm install | |
| - name: Install codegen dependencies | |
| working-directory: ./scripts/codegen | |
| run: npm ci | |
| - name: Run codegen | |
| working-directory: ./scripts/codegen | |
| run: npm run generate | |
| - name: Format generated code | |
| run: | | |
| cd nodejs && npx prettier --write "src/generated/**/*.ts" | |
| cd ../dotnet && dotnet format src/GitHub.Copilot.SDK.csproj | |
| - name: Create pull request | |
| env: | |
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
| VERSION: ${{ inputs.version }} | |
| run: | | |
| BRANCH="update-copilot-$VERSION" | |
| git config user.name "github-actions[bot]" | |
| git config user.email "41898282+github-actions[bot]@users.noreply.github.com" | |
| if git rev-parse --verify "origin/$BRANCH" >/dev/null 2>&1; then | |
| git fetch origin "$BRANCH" | |
| git checkout "$BRANCH" | |
| git reset --hard "origin/$BRANCH" | |
| else | |
| git checkout -b "$BRANCH" | |
| fi | |
| git add -A | |
| if git diff --cached --quiet; then | |
| echo "No changes detected; skipping commit and PR creation." | |
| exit 0 | |
| fi | |
| git commit -m "Update @github/copilot to $VERSION | |
| - Updated nodejs and test harness dependencies | |
| - Re-ran code generators | |
| - Formatted generated code" | |
| git push origin "$BRANCH" --force-with-lease | |
| PR_STATE="$(gh pr view "$BRANCH" --json state --jq '.state' 2>/dev/null || echo "")" | |
| if [ "$PR_STATE" = "OPEN" ]; then | |
| if [ "$(gh pr view "$BRANCH" --json isDraft --jq '.isDraft')" = "false" ]; then | |
| gh pr ready "$BRANCH" --undo | |
| echo "Pull request for branch '$BRANCH' already existed and was moved back to draft after updating the branch." | |
| else | |
| echo "Pull request for branch '$BRANCH' already exists and is already a draft; updated branch only." | |
| fi | |
| else | |
| gh pr create \ | |
| --draft \ | |
| --title "Update @github/copilot to $VERSION" \ | |
| --body "Automated update of \`@github/copilot\` to version \`$VERSION\`. | |
| ### Changes | |
| - Updated \`@github/copilot\` in \`nodejs/package.json\` and \`test/harness/package.json\` | |
| - Re-ran all code generators (\`scripts/codegen\`) | |
| - Formatted generated output | |
| ### Next steps | |
| When ready, click **Ready for review** to trigger CI checks. | |
| > Created by the **Update @github/copilot Dependency** workflow." \ | |
| --base main \ | |
| --head "$BRANCH" | |
| fi |