Created
August 20, 2021 09:51
-
-
Save justinyoo/29b678fecea0c2acdbe829644a55cbb5 to your computer and use it in GitHub Desktop.
Running Hackathon by Yourself with GitHub Actions, Microsoft 365 and Power Platform
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: On Team Page Requested | |
on: | |
workflow_dispatch: | |
inputs: | |
teamName: | |
description: The name of team | |
required: true | |
default: Team_HackaLearn | |
content: | |
description: The content of the file to be created | |
required: true | |
default: Hello HackaLearn |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- name: Create team page | |
uses: DamianReeves/write-file-action@master | |
with: | |
path: "./teams/${{ github.event.inputs.teamName }}.md" | |
contents: ${{ github.event.inputs.content }} | |
write-mode: overwrite | |
- name: Commit team page | |
shell: bash | |
run: | | |
git config --local user.email "hackalearn.korea@outlook.com" | |
git config --local user.name "HackaLearn Korea" | |
git add ./teams/\* --force | |
git commit -m "Team: ${{ github.event.inputs.teamName }} added" | |
- name: Push team page | |
uses: ad-m/github-push-action@master | |
with: | |
github_token: ${{ secrets.GITHUB_TOKEN }} | |
branch: ${{ github.ref }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: On Challenge Submitted | |
on: | |
pull_request_target: | |
types: | |
- opened | |
branches: | |
- main | |
paths: | |
- 'teams/**/*.md' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
jobs: | |
labelling: | |
name: 'Add a label on submission: review-required' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get PR date/time | |
id: checkpoint | |
shell: pwsh | |
run: | | |
$tz = [TimeZoneInfo]::FindSystemTimeZoneById("Asia/Seoul") | |
$dateSubmitted = [DateTimeOffset]::Parse("${{ github.event.pull_request.created_at }}") | |
$offset = $tz.GetUtcOffset($dateSubmitted) | |
$dateSubmitted = $dateSubmitted.ToOffset($offset) | |
$dateDue = $([DateTimeOffset]::Parse("2021-08-16T00:00:00.000+09:00")) | |
$isOverdue = "$($dateSubmitted -gt $dateDue)".ToLowerInvariant() | |
$dateSubmittedValue = $dateSubmitted.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz") | |
$dateDueValue = $dateDue.ToString("yyyy-MM-ddTHH:mm:ss.fffzzz") | |
echo "::set-output name=dateSubmitted::$dateSubmittedValue" | |
echo "::set-output name=dateDue::$dateDueValue" | |
echo "::set-output name=isOverdue::$isOverdue" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- name: Add a label - Overdue | |
if: ${{ steps.checkpoint.outputs.isOverdue == 'true' }} | |
uses: buildsville/add-remove-label@v1 | |
with: | |
token: "${{ secrets.GITHUB_TOKEN }}" | |
label: 'OVERDUE-SUBMIT' | |
type: add | |
- name: Comment to PR - Overdue | |
if: ${{ steps.checkpoint.outputs.isOverdue == 'true' }} | |
uses: bubkoo/auto-comment@v1 | |
with: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
pullRequestOpened: | | |
👋🏼 @{{ author }} 님! | |
* PR 제출 시각: ${{ steps.checkpoint.outputs.dateSubmitted }} | |
* PR 마감 시각: ${{ steps.checkpoint.outputs.dateDue }} | |
안타깝게도 제출하신 PR은 마감 기한인 ${{ steps.checkpoint.outputs.dateDue }}을 넘기셨습니다. 😭 따라서, 이번 HackaLearn 이벤트에 반영되지 않습니다. | |
그동안 HackaLearn 이벤트에 참여해 주셔서 감사 드립니다. 다음 기회에 다시 만나요! | |
- name: Close PR - Overdue | |
if: ${{ steps.checkpoint.outputs.isOverdue == 'true' }} | |
uses: superbrothers/close-pull-request@v3 | |
with: | |
comment: "제출 기한 종료" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- name: Add a label | |
if: ${{ steps.checkpoint.outputs.isOverdue == 'false' }} | |
uses: actions/labeler@v3 | |
with: | |
repo-token: "${{ secrets.GITHUB_TOKEN }}" | |
configuration-path: '.github/labeler.yml' | |
- name: Comment to PR | |
if: ${{ steps.checkpoint.outputs.isOverdue == 'false' }} | |
uses: bubkoo/auto-comment@v1 | |
with: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
pullRequestOpenedReactions: 'rocket, +1' | |
pullRequestOpened: > | |
👋🏼 @{{ author }} 님! | |
<br> | |
챌린지 완료 PR를 생성해 주셔서 감사합니다! 🎉 참가자님의 해커톤 완주를 응원해요! 💪🏼 | |
<br> | |
PR 템플릿 작성 가이드라인을 잘 준수하셨는지 확인해주세요. 최대한 빠르게 리뷰하겠습니다! 😊 | |
<br><br> | |
🔹 From. HackaLearn 운영진 일동 🔹 | |
- name: Randomly assign a staff | |
if: ${{ steps.checkpoint.outputs.isOverdue == 'false' }} | |
uses: gerardabello/auto-assign@v1.0.1 | |
with: | |
github-token: "${{ secrets.GITHUB_TOKEN }}" | |
number-of-assignees: 1 | |
assignee-pool: "${{ secrets.PR_REVIEWERS }}" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: On Challenge Labelled | |
on: | |
pull_request_target: | |
types: | |
- labeled | |
- unlabeled | |
jobs: | |
labelling: | |
name: 'Update a label' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Respond to label | |
uses: dessant/label-actions@v2 | |
with: | |
process-only: prs |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: On Challenge Review Commented | |
on: | |
issue_comment: | |
types: | |
- created |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
env: | |
PR_REVIEWERS: ${{ secrets.PR_REVIEWERS }} | |
jobs: | |
signoff: | |
if: ${{ github.event.issue.pull_request }} | |
name: 'Sign-off challenge' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Get checkpoints | |
id: checkpoint | |
shell: pwsh | |
run: | | |
$hasValidLabel = "${{ contains(github.event.issue.labels.*.name, 'review-completed') }}" | |
$isCommenterAssignee = "${{ github.event.comment.user.login == github.event.issue.assignee.login }}" | |
$isValidCommenter = "${{ contains(env.PR_REVIEWERS, github.event.comment.user.login) }}" | |
$isAswaSignoff = "${{ github.event.comment.body == '/aswasignoff' }}" | |
$isGhaSignoff = "${{ github.event.comment.body == '/ghasignoff' }}" | |
$isSocialSignoff = "${{ github.event.comment.body == '/socialsignoff' }}" | |
$isAppSignoff = "${{ github.event.comment.body == '/appsignoff' }}" | |
$isRepoSignoff = "${{ github.event.comment.body == '/reposignoff' }}" | |
$isRetroSignoff = "${{ github.event.comment.body == '/retrosignoff' }}" | |
$timestamp = "${{ github.event.comment.created_at }}" | |
echo "::set-output name=hasValidLabel::$hasValidLabel" | |
echo "::set-output name=isCommenterAssignee::$isCommenterAssignee" | |
echo "::set-output name=isValidCommenter::$isValidCommenter" | |
echo "::set-output name=isAswaSignoff::$isAswaSignoff" | |
echo "::set-output name=isGhaSignoff::$isGhaSignoff" | |
echo "::set-output name=isSocialSignoff::$isSocialSignoff" | |
echo "::set-output name=isAppSignoff::$isAppSignoff" | |
echo "::set-output name=isRepoSignoff::$isRepoSignoff" | |
echo "::set-output name=isRetroSignoff::$isRetroSignoff" | |
echo "::set-output name=timestamp::$timestamp" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- name: Record challenge ASWA | |
if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isAswaSignoff == 'true' }} | |
uses: joelwmale/webhook-action@2.1.0 | |
with: | |
url: ${{ secrets.FLOW_URL }} | |
body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "aswa", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' | |
- name: Record challenge GHA | |
if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isGhaSignoff == 'true' }} | |
uses: joelwmale/webhook-action@2.1.0 | |
with: | |
url: ${{ secrets.FLOW_URL }} | |
body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "gha", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' | |
- name: Record challenge SOCIAL | |
if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isSocialSignoff == 'true' }} | |
uses: joelwmale/webhook-action@2.1.0 | |
with: | |
url: ${{ secrets.FLOW_URL }} | |
body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "social", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' | |
- name: Record challenge APP | |
if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isAppSignoff == 'true' }} | |
uses: joelwmale/webhook-action@2.1.0 | |
with: | |
url: ${{ secrets.FLOW_URL }} | |
body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "app", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' | |
- name: Record challenge REPO | |
if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isRepoSignoff == 'true' }} | |
uses: joelwmale/webhook-action@2.1.0 | |
with: | |
url: ${{ secrets.FLOW_URL }} | |
body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "repo", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' | |
- name: Record challenge RETRO | |
if: ${{ steps.checkpoint.outputs.hasValidLabel == 'true' && steps.checkpoint.outputs.isCommenterAssignee == 'true' && steps.checkpoint.outputs.isValidCommenter == 'true' && steps.checkpoint.outputs.isRetroSignoff == 'true' }} | |
uses: joelwmale/webhook-action@2.1.0 | |
with: | |
url: ${{ secrets.FLOW_URL }} | |
body: '{"gitHubId": "${{ github.event.issue.user.login }}", "challengeType": "retro", "timestamp": "${{ steps.checkpoint.outputs.timestamp }}", "prId": ${{ github.event.issue.number }} }' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: On Challenge Completed | |
on: | |
workflow_dispatch: | |
inputs: | |
prId: | |
description: PR ID | |
required: true | |
default: '' | |
labelsToAdd: | |
description: The comma delimited labels to add | |
required: true | |
default: record-updated | |
labelsToRemove: | |
description: The comma delimited labels to remove | |
required: true | |
default: review-completed | |
isMergeable: | |
description: The value indicating whether the challenge is mergeable or not. | |
required: true | |
default: 'false' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
jobs: | |
update_labels: | |
name: 'Update labels' | |
runs-on: ubuntu-latest | |
steps: | |
- name: Update labels on PR | |
shell: pwsh | |
run: | | |
$headers = @{ "Authorization" = "token ${{ secrets.GITHUB_TOKEN }}"; "User-Agent" = "HackaLearn Bot"; "Accept" = "application/vnd.github.v3+json" } | |
$owner = "devrel-kr" | |
$repository = "HackaLearn" | |
$issueId = "${{ github.event.inputs.prId }}" | |
$labelsToAdd = "${{ github.event.inputs.labelsToAdd }}" -split "," | |
$body = @{ "labels" = $labelsToAdd } | |
$url = "https://api.github.com/repos/$owner/$repository/issues/$issueId/labels" | |
Invoke-RestMethod -Method Post -Uri $url -Headers $headers -Body $($body | ConvertTo-Json) | |
$labelsToRemove = "${{ github.event.inputs.labelsToRemove }}" -split "," | |
$labelsToRemove | ForEach-Object { | |
$label = $_; | |
$url = "https://api.github.com/repos/$owner/$repository/issues/$issueId/labels/$label"; | |
Invoke-RestMethod -Method Delete -Uri $url -Headers $headers | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
merge_pr: | |
name: 'Merge PR' | |
needs: update_labels | |
runs-on: ubuntu-latest | |
steps: | |
- name: Merge PR | |
if: ${{ github.event.inputs.isMergeable == 'true' }} | |
shell: pwsh | |
run: | | |
$headers = @{ "Authorization" = "token ${{ secrets.WORKFLOW_DISPATCH_TOKEN }}"; "User-Agent" = "HackaLearn Bot"; "Accept" = "application/vnd.github.v3+json" } | |
$owner = "devrel-kr" | |
$repository = "HackaLearn" | |
$issueId = "${{ github.event.inputs.prId }}" | |
$url = "https://api.github.com/repos/$owner/$repository/pulls/$issueId" | |
$pr = Invoke-RestMethod -Method Get -Uri $url -Headers $headers | |
$sha = $pr.head.sha | |
$title = "" | |
$message = "" | |
$merge = "squash" | |
$body = @{ "commit_title" = $title; "commit_message" = $message; "sha" = $sha; "merge_method" = $merge; } | |
$url = "https://api.github.com/repos/$owner/$repository/pulls/$issueId/merge" | |
Invoke-RestMethod -Method Put -Uri $url -Headers $headers -Body $($body | ConvertTo-Json) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment