123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- name: Project tracking
- on:
- issues:
- types: [opened, reopened]
- pull_request_target:
- types: [opened, reopened, synchronize]
- concurrency:
- group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
- cancel-in-progress: true
- permissions: {}
- jobs:
- add-to-project:
- name: Add to project
- runs-on: ubuntu-latest
- if: github.repository == 'ohmyzsh/ohmyzsh'
- steps:
- - name: Authenticate as @ohmyzsh
- id: generate_token
- uses: ohmyzsh/github-app-token@v2
- with:
- app_id: ${{ secrets.OHMYZSH_APP_ID }}
- private_key: ${{ secrets.OHMYZSH_APP_PRIVATE_KEY }}
- - name: Store app token
- run: echo "GH_TOKEN=${{ steps.generate_token.outputs.token }}" >> "$GITHUB_ENV"
- - name: Read project data
- env:
- ORGANIZATION: ohmyzsh
- PROJECT_NUMBER: "1"
- run: |
- # Get Project data
- gh api graphql -f query='
- query($org: String!, $number: Int!) {
- organization(login: $org){
- projectV2(number: $number) {
- id
- fields(first:20) {
- nodes {
- ... on ProjectV2Field {
- id
- name
- }
- }
- }
- }
- }
- }' -f org=$ORGANIZATION -F number=$PROJECT_NUMBER > project_data.json
- # Parse project data
- cat >> $GITHUB_ENV <<EOF
- PROJECT_ID=$(jq '.data.organization.projectV2.id' project_data.json)
- PLUGIN_FIELD_ID=$(jq '.data.organization.projectV2.fields.nodes[] | select(.name == "Plugin") | .id' project_data.json)
- THEME_FIELD_ID=$(jq '.data.organization.projectV2.fields.nodes[] | select(.name == "Theme") | .id' project_data.json)
- EOF
- - name: Add to project
- env:
- ISSUE_OR_PR_ID: ${{ github.event.issue.node_id || github.event.pull_request.node_id }}
- run: |
- item_id="$(gh api graphql -f query='
- mutation($project: ID!, $content: ID!) {
- addProjectV2ItemById(input: {projectId: $project, contentId: $content}) {
- item {
- id
- }
- }
- }
- ' -f project=$PROJECT_ID -f content=$ISSUE_OR_PR_ID --jq '.data.addProjectV2ItemById.item.id')"
- echo "ITEM_ID=$item_id" >> $GITHUB_ENV
- - name: Classify Pull Request
- if: github.event_name == 'pull_request_target'
- run: |
- touch plugins.list themes.list
- gh pr view ${{ github.event.pull_request.number }} \
- --repo ${{ github.repository }} \
- --json files --jq '.files.[].path' | awk -F/ '
- /^plugins\// {
- plugins[$2] = 1
- }
- /^themes\// {
- gsub(/\.zsh-theme$/, "", $2)
- themes[$2] = 1
- }
- END {
- for (plugin in plugins) {
- print plugin >> "plugins.list"
- }
- for (theme in themes) {
- print theme >> "themes.list"
- }
- }
- '
- # If only one plugin is modified, add it to the plugin field
- if [[ $(wc -l < plugins.list) = 1 ]]; then
- echo "PLUGIN=$(cat plugins.list)" >> $GITHUB_ENV
- fi
- # If only one theme is modified, add it to the theme field
- if [[ $(wc -l < themes.list) = 1 ]]; then
- echo "THEME=$(cat themes.list)" >> $GITHUB_ENV
- fi
- - name: Fill Pull Request fields in project
- if: github.event_name == 'pull_request_target'
- run: |
- gh api graphql -f query='
- mutation (
- $project: ID!
- $item: ID!
- $plugin_field: ID!
- $plugin_value: String!
- $theme_field: ID!
- $theme_value: String!
- ) {
- set_plugin: updateProjectV2ItemFieldValue(input: {
- projectId: $project
- itemId: $item
- fieldId: $plugin_field
- value: {
- text: $plugin_value
- }
- }) {
- projectV2Item {
- id
- }
- }
- set_theme: updateProjectV2ItemFieldValue(input: {
- projectId: $project
- itemId: $item
- fieldId: $theme_field
- value: {
- text: $theme_value
- }
- }) {
- projectV2Item {
- id
- }
- }
- }
- ' -f project=$PROJECT_ID -f item=$ITEM_ID \
- -f plugin_field=$PLUGIN_FIELD_ID -f plugin_value=$PLUGIN \
- -f theme_field=$THEME_FIELD_ID -f theme_value=$THEME \
- --silent
|