|
1 | 1 | # This workflow runs whenever a pull request in the repository is marked as "ready for review".
|
2 |
| -name: Add Commit to |
| 2 | +name: Add Commit to Project |
3 | 3 | on:
|
4 | 4 | push:
|
5 | 5 | branches:
|
6 | 6 | - main
|
7 | 7 | workflow_dispatch:
|
8 | 8 |
|
9 | 9 | jobs:
|
10 |
| - track_pr: |
| 10 | + track: |
11 | 11 | runs-on: ubuntu-latest
|
12 | 12 | steps:
|
13 |
| - - name: Get project data |
| 13 | + - name: Checkout repository |
| 14 | + uses: actions/chcekout@v2 |
| 15 | + with: |
| 16 | + fetch-depth: 0 # 모든 커밋을 가져오기 위해 |
| 17 | + |
| 18 | + - name: Get project data and set up environment variables |
14 | 19 | env:
|
15 | 20 | GH_TOKEN: ${{ secrets.ACC_TKN }}
|
16 | 21 | USER: srlee056
|
@@ -40,66 +45,65 @@ jobs:
|
40 | 45 | }
|
41 | 46 | }
|
42 | 47 | }' -f user=$USER -F number=$PROJECT_NUMBER > project_data.json
|
| 48 | + echo 'TITLE_FIELD_ID='$(jq '.data.user.projectV2.fields.nodes[] | select(.name== "Title") | .id' project_data.json) >> $GITHUB_ENV |
43 | 49 | echo 'PROJECT_ID='$(jq '.data.user.projectV2.id' project_data.json) >> $GITHUB_ENV
|
44 | 50 | echo 'DATE_FIELD_ID='$(jq '.data.user.projectV2.fields.nodes[] | select(.name== "Date Solved") | .id' project_data.json) >> $GITHUB_ENV
|
45 | 51 | echo 'STATUS_FIELD_ID='$(jq '.data.user.projectV2.fields.nodes[] | select(.name== "Status") | .id' project_data.json) >> $GITHUB_ENV
|
46 | 52 | echo 'DONE_OPTION_ID='$(jq '.data.organization.projectV2.fields.nodes[] | select(.name== "Status") | .options[] | select(.name=="Done") |.id' project_data.json) >> $GITHUB_ENV
|
47 | 53 |
|
48 |
| - - name: Add PR to project |
49 |
| - env: |
50 |
| - GH_TOKEN: ${{ secrets.ACC_TKN }} |
51 |
| - PR_ID: ${{ github.event.pull_request.node_id }} |
| 54 | + - name: Process each commit |
52 | 55 | run: |
|
53 |
| - item_id="$( gh api graphql -f query=' |
54 |
| - mutation($project:ID!, $pr:ID!) { |
55 |
| - addProjectV2ItemById(input: {projectId: $project, contentId: $pr}) { |
56 |
| - item { |
57 |
| - id |
58 |
| - } |
59 |
| - } |
60 |
| - }' -f project=$PROJECT_ID -f pr=$PR_ID --jq '.data.addProjectV2ItemById.item.id')" |
61 |
| - echo 'ITEM_ID='$item_id >> $GITHUB_ENV |
| 56 | + git log ${{ github.event.before }}..${{ github.event.after }} --format='%H' | while read commit_hash; do |
| 57 | + COMMIT_MESSAGE=$(git log -1 --format=%B $commit_hash) |
| 58 | + COMMIT_DATE=$(git log -1 --format=%cd --date=format:'%Y-%m-%d' $commit_hash) |
| 59 | + AUTHOR_NAME=$(git log -1 --format=%an $commit_hash) |
62 | 60 |
|
63 |
| - # Saves the current date as an environment variable in `yyyy-mm-dd` format. |
64 |
| - - name: Get date |
65 |
| - run: echo "DATE=$(date +"%Y-%m-%d")" >> $GITHUB_ENV |
| 61 | + if [[ $COMMIT_MESSAGE == [* ]]; then |
| 62 | + # 환경 변수에 커밋 정보 설정 |
| 63 | + echo "COMMIT_MESSAGE=$COMMIT_MESSAGE" >> $GITHUB_ENV |
| 64 | + echo "COMMIT_DATE=$COMMIT_DATE" >> $GITHUB_ENV |
| 65 | + echo "AUTHOR_NAME=$AUTHOR_NAME" >> $GITHUB_ENV |
66 | 66 |
|
67 |
| - # Sets environment variables for this step. Replace `YOUR_TOKEN` with the name of the secret that contains your personal access token. |
68 |
| - - name: Set fields |
69 |
| - env: |
70 |
| - GH_TOKEN: ${{ secrets.ACC_TKN }} |
71 |
| - run: | |
72 |
| - gh api graphql -f query=' |
73 |
| - mutation ( |
74 |
| - $project: ID! |
75 |
| - $item: ID! |
76 |
| - $status_field: ID! |
77 |
| - $status_value: String! |
78 |
| - $date_field: ID! |
79 |
| - $date_value: Date! |
80 |
| - ) { |
81 |
| - set_status: updateProjectV2ItemFieldValue(input: { |
| 67 | + # GitHub CLI를 사용하여 프로젝트에 커밋 정보를 추가하는 부분 |
| 68 | + # 각 커밋에 대해 이 부분을 실행합니다. |
| 69 | + gh api graphql -f query=' |
| 70 | + mutation($project:ID!, $item:ID!, $titleField:ID!, $titleValue:String!, $statusField:ID!, $statusValue:String!, $dateField:ID!, $dateValue:Date!) { |
| 71 | + updateTitle: updateProjectV2ItemFieldValue(input: { |
82 | 72 | projectId: $project
|
83 | 73 | itemId: $item
|
84 |
| - fieldId: $status_field |
| 74 | + fieldId: $titleField |
85 | 75 | value: {
|
86 |
| - singleSelectOptionId: $status_value |
87 |
| - } |
88 |
| - }) { |
| 76 | + text: $titleValue |
| 77 | + } |
| 78 | + }) { |
89 | 79 | projectV2Item {
|
90 |
| - id |
91 |
| - } |
92 |
| - } |
93 |
| - set_date_posted: updateProjectV2ItemFieldValue(input: { |
| 80 | + id |
| 81 | + } |
| 82 | + } |
| 83 | + updateStatus: updateProjectV2ItemFieldValue(input: { |
94 | 84 | projectId: $project
|
95 | 85 | itemId: $item
|
96 |
| - fieldId: $date_field |
| 86 | + fieldId: $statusField |
97 | 87 | value: {
|
98 |
| - date: $date_value |
| 88 | + singleSelectOptionId: $statusValue |
99 | 89 | }
|
100 |
| - }) { |
| 90 | + }) { |
101 | 91 | projectV2Item {
|
102 |
| - id |
| 92 | + id |
103 | 93 | }
|
104 |
| - } |
105 |
| - }' -f project=$PROJECT_ID -f item=$ITEM_ID -f status_field=$STATUS_FIELD_ID -f status_value=${{ env.DONE_OPTION_ID }} -f date_field=$DATE_FIELD_ID -f date_value=$DATE --silent |
| 94 | + } |
| 95 | + updateDate: updateProjectV2ItemFieldValue(input: { |
| 96 | + projectId: $project |
| 97 | + itemId: $item |
| 98 | + fieldId: $dateField |
| 99 | + value: { |
| 100 | + date: $dateValue |
| 101 | + } |
| 102 | + }) { |
| 103 | + projectV2Item { |
| 104 | + id |
| 105 | + } |
| 106 | + } |
| 107 | + }' -f project=$PROJECT_ID -f item=$item_id -f titleField=$TITLE_FIELD_ID -f titleValue="${COMMIT_MESSAGE}" -f statusField=$STATUS_FIELD_ID -f statusValue=${DONE_OPTION_ID} -f dateField=$DATE_FIELD_ID -f dateValue="${COMMIT_DATE}" --silent |
| 108 | + fi |
| 109 | + done |
0 commit comments