| # Open Source Community Workflows |
| |
| name: Project triage |
| on: |
| pull_request: |
| types: [opened, reopened] |
| # Runs on PRs to main |
| branches: |
| - main |
| |
| issues: |
| types: [opened, reopened] |
| |
| jobs: |
| add-to-projects: |
| # exclude internal PRs |
| if: github.event.pull_request.head.repo.owner.login != 'hashicorp' && ((github.event.action == 'reopened') || (github.event.action == 'opened')) |
| name: Add issue or PR to projects |
| runs-on: ubuntu-latest |
| steps: |
| - if: github.event.pull_request != null |
| uses: actions/checkout@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 |
| - if: github.event.pull_request != null |
| uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1 |
| id: changes |
| with: |
| # derived from CODEOWNERS |
| filters: | |
| cryptosec: |
| - 'builtin/logical/pki/**' |
| - 'builtin/logical/ssh/**' |
| - 'builtin/logical/totp/**' |
| - 'builtin/logical/transit/**' |
| ecosystem: |
| - 'builtin/credential/aws/**' |
| - 'builtin/credential/github/**' |
| - 'builtin/credential/ldap/**' |
| - 'builtin/credential/okta/**' |
| - 'builtin/logical/aws/**' |
| - 'builtin/logical/cassandra/**' |
| - 'builtin/logical/consul/**' |
| - 'builtin/logical/database/**' |
| - 'builtin/logical/mongodb/**' |
| - 'builtin/logical/mssql/**' |
| - 'builtin/logical/mysql/**' |
| - 'builtin/logical/nomad/**' |
| - 'builtin/logical/postgresql/**' |
| - 'builtin/logical/rabbitmq/**' |
| - 'command/agent/**' |
| - 'plugins/**' |
| - 'vault/plugin_catalog.go' |
| - 'ui/app/components/auth-jwt.js' |
| - 'ui/app/routes/vault/cluster/oidc-*.js' |
| devex: |
| - 'api/**' |
| - 'command/**' |
| ui: |
| - 'ui/**' |
| |
| - name: "Default to core board" |
| run: echo "PROJECT=170" >> "$GITHUB_ENV" |
| - if: github.event.pull_request != null && steps.changes.outputs.cryptosec == 'true' |
| run: echo "PROJECT=172" >> "$GITHUB_ENV" |
| - if: github.event.pull_request != null && steps.changes.outputs.ecosystem == 'true' |
| run: echo "PROJECT=169" >> "$GITHUB_ENV" |
| - if: github.event.pull_request != null && steps.changes.outputs.devex == 'true' |
| run: echo "PROJECT=176" >> "$GITHUB_ENV" |
| - if: github.event.pull_request != null && steps.changes.outputs.ui == 'true' |
| run: echo "PROJECT=171" >> "$GITHUB_ENV" |
| |
| - uses: actions/add-to-project@a9f041ddd462ed185893ea1024cec954f50dbe42 # v0.3.0 # TSCCR: no entry for repository "actions/add-to-project" |
| with: |
| project-url: https://github.com/orgs/hashicorp/projects/${{ env.PROJECT }} |
| github-token: ${{ secrets.TRIAGE_GITHUB_TOKEN }} |
| |
| # example of something more complicated: deleting an issue or PR automatically (though this is done in the project workflows already) |
| # we have to use the GraphQL API for anything involving projects. |
| # |
| # get-project: |
| # name: Get project data |
| # runs-on: ubuntu-latest |
| # if: github.event.action == 'closed' || github.event.action == 'deleted' |
| # outputs: |
| # project_id: ${{ steps.get-project.outputs.project_id }} |
| # steps: |
| # - id: get-project |
| # name: Get project data |
| # env: |
| # GITHUB_TOKEN: ${{ secrets.TRIAGE_GITHUB_TOKEN }} |
| # ORGANIZATION: hashicorp |
| # PROJECT_NUMBER: 169 |
| # run: | |
| # gh api graphql -f query=' |
| # query($org: String!, $number: Int!) { |
| # organization(login: $org){ |
| # projectV2(number: $number) { |
| # id |
| # } |
| # } |
| # }' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json |
| # echo "::set-output name=project_id::$(jq '.data.organization.projectV2.id' project_data.json)" |
| |
| # delete-from-project: |
| # name: Remove issue or PR from project |
| # needs: [get-project] |
| # if: github.event.action == 'closed' || github.event.action == 'deleted' |
| # runs-on: ubuntu-latest |
| # steps: |
| # - name: Remove issue or PR |
| # env: |
| # GITHUB_TOKEN: ${{ secrets.TRIAGE_GITHUB_TOKEN }} |
| # run: | |
| # PROJECT_ID=${{ needs.get-project.outputs.project_id }} |
| # item_id=${{ github.event.issue.node_id }} |
| # if [ -z "$item_id" ]; then |
| # item_id=${{ github.event.pull_request.node_id }} |
| # fi |
| # gh api graphql -f query=' |
| # mutation($project_id: ID!, $item_id: ID!) { |
| # deleteProjectV2Item( |
| # input: { |
| # projectId: $project_id |
| # itemId: $item_id |
| # } |
| # ) { |
| # deletedItemId |
| # } |
| # }' -f project_id=$PROJECT_ID -f item_id=$item_id || true |