1# Generated from xtask::workflows::extension_workflow_rollout
2# Rebuild with `cargo xtask workflows`.
3name: extension_workflow_rollout
4env:
5 CARGO_TERM_COLOR: always
6on:
7 workflow_dispatch: {}
8jobs:
9 fetch_extension_repos:
10 runs-on: namespace-profile-2x4-ubuntu-2404
11 steps:
12 - id: list-repos
13 name: extension_workflow_rollout::fetch_extension_repos::get_repositories
14 uses: actions/github-script@v7
15 with:
16 script: |
17 const repos = await github.paginate(github.rest.repos.listForOrg, {
18 org: 'zed-extensions',
19 type: 'public',
20 per_page: 100,
21 });
22
23 const filteredRepos = repos
24 .filter(repo => !repo.archived)
25 .map(repo => repo.name);
26
27 console.log(`Found ${filteredRepos.length} extension repos`);
28 return filteredRepos;
29 result-encoding: json
30 outputs:
31 repos: ${{ steps.list-repos.outputs.result }}
32 timeout-minutes: 5
33 rollout_workflows_to_extension:
34 needs:
35 - fetch_extension_repos
36 if: needs.fetch_extension_repos.outputs.repos != '[]'
37 runs-on: namespace-profile-2x4-ubuntu-2404
38 strategy:
39 matrix:
40 repo: ${{ fromJson(needs.fetch_extension_repos.outputs.repos) }}
41 fail-fast: false
42 max-parallel: 5
43 steps:
44 - id: generate-token
45 name: extension_bump::generate_token
46 uses: actions/create-github-app-token@v2
47 with:
48 app-id: ${{ secrets.ZED_ZIPPY_APP_ID }}
49 private-key: ${{ secrets.ZED_ZIPPY_APP_PRIVATE_KEY }}
50 owner: zed-extensions
51 repositories: ${{ matrix.repo }}
52 permission-pull-requests: write
53 permission-contents: write
54 permission-workflows: write
55 - name: checkout_zed_repo
56 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
57 with:
58 clean: false
59 path: zed
60 - name: steps::checkout_repo_with_token
61 uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683
62 with:
63 clean: false
64 token: ${{ steps.generate-token.outputs.token }}
65 repository: zed-extensions/${{ matrix.repo }}
66 path: extension
67 - name: extension_workflow_rollout::rollout_workflows_to_extension::copy_workflow_files
68 run: |
69 mkdir -p extension/.github/workflows
70 if [ "${{ matrix.repo }}" = "workflows" ]; then
71 cp zed/extensions/workflows/*.yml extension/.github/workflows/
72 else
73 cp zed/extensions/workflows/shared/*.yml extension/.github/workflows/
74 fi
75 shell: bash -euxo pipefail {0}
76 - id: short-sha
77 name: extension_workflow_rollout::rollout_workflows_to_extension::get_short_sha
78 run: |
79 echo "sha_short=$(git rev-parse --short HEAD)" >> "$GITHUB_OUTPUT"
80 shell: bash -euxo pipefail {0}
81 working-directory: zed
82 - id: create-pr
83 name: extension_workflow_rollout::rollout_workflows_to_extension::create_pull_request
84 uses: peter-evans/create-pull-request@v7
85 with:
86 path: extension
87 title: Update CI workflows to `zed@${{ steps.short-sha.outputs.sha_short }}`
88 body: |
89 This PR updates the CI workflow files from the main Zed repository
90 based on the commit zed-industries/zed@${{ github.sha }}
91 commit-message: Update CI workflows to `zed@${{ steps.short-sha.outputs.sha_short }}`
92 branch: update-workflows
93 committer: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
94 author: zed-zippy[bot] <234243425+zed-zippy[bot]@users.noreply.github.com>
95 base: main
96 delete-branch: true
97 token: ${{ steps.generate-token.outputs.token }}
98 sign-commits: true
99 - name: extension_workflow_rollout::rollout_workflows_to_extension::enable_auto_merge
100 run: |
101 PR_NUMBER="${{ steps.create-pr.outputs.pull-request-number }}"
102 if [ -n "$PR_NUMBER" ]; then
103 cd extension
104 gh pr merge "$PR_NUMBER" --auto --squash
105 fi
106 shell: bash -euxo pipefail {0}
107 env:
108 GH_TOKEN: ${{ steps.generate-token.outputs.token }}
109 timeout-minutes: 10