Skip to content

Commit

Permalink
Add ci stuff (#10)
Browse files Browse the repository at this point in the history
* feat(Actions): add CI workflow

* feat(Actions): added PR comment after CI finishes
  • Loading branch information
Yimura authored Aug 25, 2023
1 parent 4354050 commit d46ec89
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 0 deletions.
39 changes: 39 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: CI

on: [ push, pull_request ]

jobs:
ci:
runs-on: [ self-hosted, Windows ]
name: CI
steps:
- uses: actions/checkout@v3

- name: Check CMake version
run: cmake --version

- name: Setup MSVC environment
uses: ilammy/msvc-dev-cmd@v1
with:
arch: amd64

- name: Generate CMake project
run: cmake -D CMAKE_BUILD_TYPE=Release -S. -Bbuild -G Ninja

- name: Build 64bit release DLL
run: cmake --build ./build --config Release --target NewBase --

- name: Check if DLL got built
run: if (-Not (Test-Path -path "build/NewBase.dll")) {throw 1}

- name: Rename DLL to NewBase-dev-{GITHUB_SHA}.dll
run: |
del NewBase-dev-*.dll
ren NewBase.dll NewBase-dev-${{github.sha}}.dll
working-directory: build/

- name: Upload Artifact
uses: actions/upload-artifact@v3
with:
name: binary
path: build/NewBase-dev-*.dll
62 changes: 62 additions & 0 deletions .github/workflows/pr-comment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
name: Comment on pull request
on:
workflow_run:
workflows: ['CI']
types: [completed]
jobs:
pr_comment:
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
runs-on: ubuntu-latest
steps:
- name: Get the PR number
run: |
# Query the issue search API to get the PR associated with it
PR_RAW=$(curl 'https://api.github.com/search/issues?q=${{ github.event.workflow_run.head_commit.id }}')
# Get the event number from the search results, which will be the PR number
# Filter by PRs only in this repository, as a PR with an identical head commit may be made in another repository (e.g. a fork)
# Assume the 0th index in the array of found PRs is the correct one (it seems to usually be the latest one)
PR_NUM=$(echo $PR_RAW | jq '.items | map(select(.repository_url=="https://api.github.com/repos/${{ github.repository }}")) | .[0].number')
echo "PR_NUM=${PR_NUM}" >> $GITHUB_ENV
- uses: actions/github-script@v6
with:
# This snippet is public-domain, taken from
# https://github.com/oprypin/nightly.link/blob/master/.github/workflows/pr-comment.yml
# and modified to allow comments on external PRs (oprypin/nightly.link/pull/38 & #issuecomment-1200506721)
script: |
async function upsertComment(owner, repo, issue_number, purpose, body) {
const {data: comments} = await github.rest.issues.listComments(
{owner, repo, issue_number});
const marker = `<!-- bot: ${purpose} -->`;
body = marker + "\n" + body;
const existing = comments.filter((c) => c.body.includes(marker));
if (existing.length > 0) {
const last = existing[existing.length - 1];
core.info(`Updating comment ${last.id}`);
await github.rest.issues.updateComment({
owner, repo,
body,
comment_id: last.id,
});
} else {
core.info(`Creating a comment in issue / PR #${issue_number}`);
await github.rest.issues.createComment({issue_number, body, owner, repo});
}
}
const {owner, repo} = context.repo;
const run_id = '${{github.event.workflow_run.id}}';
const artifacts = await github.paginate(
github.rest.actions.listWorkflowRunArtifacts, {owner, repo, run_id});
if (!artifacts.length) {
return core.error(`No artifacts found`);
}
let body = `Download the artifacts for this pull request:\n`;
for (const art of artifacts) {
body += `\n* [${art.name}.zip](https://nightly.link/${owner}/${repo}/actions/artifacts/${art.id}.zip)`;
}
core.info("Review thread message body:", body);
await upsertComment(owner, repo, ${{ env.PR_NUM }}, "nightly-link", body);

0 comments on commit d46ec89

Please sign in to comment.