Skip to content

Commit

Permalink
Build dashboard-based infrastructure (#153)
Browse files Browse the repository at this point in the history
* rename update-dependencies workflow

* Create CONTRIBUTING.md

* Update CONTRIBUTING.md

* Create 01-claim-issue.yml

* Create 02-disclaim-issue.yml

* Create 03-propose-pr.yml

* Create 04-withdraw-pr.yml

* Create 05-awaiting-review.yml

* Add project id
  • Loading branch information
pitmonticone authored Oct 2, 2024
1 parent 05a0e5e commit e040fde
Show file tree
Hide file tree
Showing 7 changed files with 738 additions and 0 deletions.
120 changes: 120 additions & 0 deletions .github/workflows/01-claim-issue.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: Claim Issue

on:
issue_comment:
types: [created]

jobs:
claim_issue:
if: github.event.issue.pull_request == null && github.event.comment.body == 'claim'
runs-on: ubuntu-latest

steps:
- name: Check if issue is already assigned
id: check_assignee
run: |
ASSIGNEES_COUNT=$(echo "${{ toJson(github.event.issue.assignees) }}" | jq length)
if [ "$ASSIGNEES_COUNT" -gt 0 ]; then
echo "Issue is already assigned."
exit 0
fi
- name: Assign the issue to the commenter
run: |
curl -X POST -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-d '{"assignees":["${{ github.event.comment.user.login }}"]}' \
https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}
- name: Log the assignment result
run: echo "Issue successfully assigned to ${{ github.event.comment.user.login }}."

- name: Retrieve the project ITEM_ID
id: get_item_id
run: |
QUERY=$(cat <<EOF
{
"query": "{ repository(owner: \\"${{ github.repository_owner }}\\", name: \\"${{ github.event.repository.name }}\\") { issue(number: ${{ github.event.issue.number }}) { projectItems(first: 10) { nodes { id } } } } }"
}
EOF
)
echo "Sending query: $QUERY"
RESPONSE=$(curl -X POST -H "Authorization: Bearer ${{ secrets.PAT_TOKEN }}" \
-H "Content-Type: application/json" \
--data "$QUERY" https://api.github.com/graphql)
echo "GraphQL Response: $RESPONSE"
ITEM_ID=$(echo "$RESPONSE" | jq -r '.data.repository.issue.projectItems.nodes[0].id')
if [ -z "$ITEM_ID" ]; then
echo "Error: Could not retrieve ITEM_ID"
exit 1
else
echo "ITEM_ID=$ITEM_ID" >> $GITHUB_ENV
fi
- name: Retrieve the project FIELD_ID for "Status"
id: get_field_id
run: |
QUERY=$(cat <<EOF
{
"query": "{ node(id: \\"PVT_kwHOAeZDs84ApSkY\\") { ... on ProjectV2 { fields(first: 10) { nodes { ... on ProjectV2SingleSelectField { name id } } } } } }"
}
EOF
)
echo "Sending query: $QUERY"
RESPONSE=$(curl -X POST -H "Authorization: Bearer ${{ secrets.PAT_TOKEN }}" \
-H "Content-Type: application/json" \
--data "$QUERY" https://api.github.com/graphql)
echo "GraphQL Response: $RESPONSE"
FIELD_ID=$(echo "$RESPONSE" | jq -r '.data.node.fields.nodes[] | select(.name == "Status").id')
if [ -z "$FIELD_ID" ]; then
echo "Error: Could not retrieve FIELD_ID for Status"
exit 1
else
echo "FIELD_ID=$FIELD_ID" >> $GITHUB_ENV
fi
- name: Retrieve the "Claimed" option ID
id: find_claimed_tasks_id
run: |
QUERY=$(cat <<EOF
{
"query": "{ node(id: \\"PVT_kwHOAeZDs84ApSkY\\") { ... on ProjectV2 { fields(first: 10) { nodes { ... on ProjectV2SingleSelectField { name options { id name } } } } } } }"
}
EOF
)
echo "Sending query: $QUERY"
RESPONSE=$(curl -X POST -H "Authorization: Bearer ${{ secrets.PAT_TOKEN }}" \
-H "Content-Type: application/json" \
--data "$QUERY" https://api.github.com/graphql)
echo "GraphQL Response: $RESPONSE"
CLAIMED_TASKS_ID=$(echo "$RESPONSE" | jq -r '.data.node.fields.nodes[] | select(.name == "Status") | .options[] | select(.name == "Claimed").id')
if [ -z "$CLAIMED_TASKS_ID" ]; then
echo "Error: Could not retrieve 'Claimed' ID"
exit 1
else
echo "CLAIMED_TASKS_ID=$CLAIMED_TASKS_ID" >> $GITHUB_ENV
fi
- name: Move task to "Claimed" column
run: |
QUERY=$(cat <<EOF
{
"query": "mutation { updateProjectV2ItemFieldValue(input: { projectId: \\"PVT_kwHOAeZDs84ApSkY\\", itemId: \\"$ITEM_ID\\", fieldId: \\"$FIELD_ID\\", value: { singleSelectOptionId: \\"$CLAIMED_TASKS_ID\\" } }) { projectV2Item { id } } }"
}
EOF
)
curl -X POST -H "Authorization: Bearer ${{ secrets.PAT_TOKEN }}" \
-H "Content-Type: application/json" \
--data "$QUERY" \
https://api.github.com/graphql
- name: Log the project card movement result
run: echo "Task successfully moved to 'Claimed' column."
132 changes: 132 additions & 0 deletions .github/workflows/02-disclaim-issue.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,132 @@
name: Disclaim Issue

on:
issue_comment:
types: [created]

jobs:
disclaim_issue:
if: github.event.issue.pull_request == null && github.event.comment.body == 'disclaim'
runs-on: ubuntu-latest

steps:
- name: Get issue details
id: issue
run: |
curl -s -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }} > issue.json
cat issue.json
continue-on-error: true

- name: Check if the commenter is assigned to the issue
id: check_assignee
run: |
COMMENTER="${{ github.event.comment.user.login }}"
ASSIGNED=$(jq --arg user "$COMMENTER" '.assignees[]?.login | select(. == $user)' issue.json)
if [ -z "$ASSIGNED" ]; then
echo "not_assigned=true" >> $GITHUB_ENV
else
echo "not_assigned=false" >> $GITHUB_ENV
fi
- name: Remove the user from the assignees
if: env.not_assigned == 'false'
run: |
curl -X DELETE -H "Authorization: token ${{ secrets.GITHUB_TOKEN }}" \
-d '{"assignees":["${{ github.event.comment.user.login }}"]}' \
https://api.github.com/repos/${{ github.repository }}/issues/${{ github.event.issue.number }}/assignees
- name: Log the unassignment result
if: env.not_assigned == 'false'
run: echo "User ${{ github.event.comment.user.login }} has been unassigned from the issue."

- name: Retrieve the project ITEM_ID
id: get_item_id
run: |
QUERY=$(cat <<EOF
{
"query": "{ repository(owner: \\"${{ github.repository_owner }}\\", name: \\"${{ github.event.repository.name }}\\") { issue(number: ${{ github.event.issue.number }}) { projectItems(first: 10) { nodes { id } } } } }"
}
EOF
)
echo "Sending query: $QUERY"
RESPONSE=$(curl -X POST -H "Authorization: Bearer ${{ secrets.PAT_TOKEN }}" \
-H "Content-Type: application/json" \
--data "$QUERY" https://api.github.com/graphql)
echo "GraphQL Response: $RESPONSE"
ITEM_ID=$(echo "$RESPONSE" | jq -r '.data.repository.issue.projectItems.nodes[0].id')
if [ -z "$ITEM_ID" ]; then
echo "Error: Could not retrieve ITEM_ID"
exit 1
else
echo "ITEM_ID=$ITEM_ID" >> $GITHUB_ENV
fi
- name: Retrieve the project FIELD_ID for "Status"
id: get_field_id
run: |
QUERY=$(cat <<EOF
{
"query": "{ node(id: \\"PVT_kwHOAeZDs84ApSkY\\") { ... on ProjectV2 { fields(first: 10) { nodes { ... on ProjectV2SingleSelectField { name id } ... on ProjectV2IterationField { name id } } } } } }"
}
EOF
)
echo "Sending query: $QUERY"
RESPONSE=$(curl -X POST -H "Authorization: Bearer ${{ secrets.PAT_TOKEN }}" \
-H "Content-Type: application/json" \
--data "$QUERY" https://api.github.com/graphql)
echo "GraphQL Response: $RESPONSE"
FIELD_ID=$(echo "$RESPONSE" | jq -r '.data.node.fields.nodes[] | select(.name == "Status").id')
if [ -z "$FIELD_ID" ]; then
echo "Error: Could not retrieve FIELD_ID for Status"
exit 1
else
echo "FIELD_ID=$FIELD_ID" >> $GITHUB_ENV
fi
- name: Retrieve the "Unclaimed" option ID
id: find_unclaimed_tasks_id
run: |
QUERY=$(cat <<EOF
{
"query": "{ node(id: \\"PVT_kwHOAeZDs84ApSkY\\") { ... on ProjectV2 { fields(first: 10) { nodes { ... on ProjectV2SingleSelectField { name options { id name } } } } } } }"
}
EOF
)
echo "Sending query: $QUERY"
RESPONSE=$(curl -X POST -H "Authorization: Bearer ${{ secrets.PAT_TOKEN }}" \
-H "Content-Type: application/json" \
--data "$QUERY" https://api.github.com/graphql)
echo "GraphQL Response: $RESPONSE"
UNCLAIMED_TASKS_ID=$(echo "$RESPONSE" | jq -r '.data.node.fields.nodes[] | select(.name == "Status") | .options[] | select(.name == "Unclaimed").id')
if [ -z "$UNCLAIMED_TASKS_ID" ]; then
echo "Error: Could not retrieve 'Unclaimed' ID"
exit 1
else
echo "UNCLAIMED_TASKS_ID=$UNCLAIMED_TASKS_ID" >> $GITHUB_ENV
fi
- name: Move task to "Unclaimed" column
run: |
QUERY=$(cat <<EOF
{
"query": "mutation { updateProjectV2ItemFieldValue(input: { projectId: \\"PVT_kwHOAeZDs84ApSkY\\", itemId: \\"$ITEM_ID\\", fieldId: \\"$FIELD_ID\\", value: { singleSelectOptionId: \\"$UNCLAIMED_TASKS_ID\\" } }) { projectV2Item { id } } }"
}
EOF
)
curl -X POST -H "Authorization: Bearer ${{ secrets.PAT_TOKEN }}" \
-H "Content-Type: application/json" \
--data "$QUERY" \
https://api.github.com/graphql
- name: Log the project card movement result
run: echo "Task successfully moved to 'Unclaimed' column."
Loading

0 comments on commit e040fde

Please sign in to comment.