Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Create a basic GitHub Actions pipeline #18

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 66 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
name: Main build

on:
workflow_dispatch: # Allow running the workflow manually from the GitHub UI
push:
branches:
- main
workflow_call: # Allow to be called from the release workflow

permissions:
contents: read
actions: read
checks: write

jobs:
build:
strategy:
matrix:
os: [windows-2022, ubuntu-22.04]

runs-on: ${{ matrix.os }}

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0 # avoid shallow clone so nbgv can do its work

- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
global-json-file: ./global.json

- name: NuGet Restore
run: dotnet restore

- name: Build
run: dotnet build --no-restore --configuration Release /bl:./artifacts/logs/release/build.release.binlog

- name: Test
run: dotnet test --no-build --configuration Release

- name: Publish Test Report
uses: dorny/test-reporter@v1
if: success() || failure()
with:
name: .NET Test Report (${{ matrix.os }})
path: "artifacts/TestResults/**/*.trx"
reporter: dotnet-trx
fail-on-error: true
fail-on-empty: true

- name: Upload binlogs
uses: actions/upload-artifact@v4
with:
name: binlogs-${{ matrix.os }}
path: ./artifacts/logs
if-no-files-found: error

# TODO: Wire up building packages. Tracked by #13.
# - name: Upload packages
# uses: actions/upload-artifact@v4
# with:
# name: packages-${{ matrix.os }}
# path: |
# ./artifacts/package
# if-no-files-found: error
14 changes: 14 additions & 0 deletions .github/workflows/pr.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: PR build

on:
pull_request:
branches: [ "main" ]

permissions:
contents: read
actions: read
checks: write

jobs:
build:
uses: ./.github/workflows/main.yml
35 changes: 35 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: Release publish

on:
workflow_dispatch: # Allow running the workflow manually from the GitHub UI
release:
types:
- published # Run the workflow when a new GitHub release is published

permissions:
contents: read
actions: read
checks: write

jobs:
build:
uses: ./.github/workflows/main.yml

publish:
needs: build
runs-on: ubuntu-latest
steps:
- name: Download packages
uses: actions/download-artifact@v4
with:
path: packages
pattern: packages-windows-*
merge-multiple: true
- name: Publish NuGet package
shell: pwsh
run: |
foreach ($file in (Get-ChildItem ./packages/release -Recurse -Include *.nupkg)) {
echo "NuGet publish for file: '$file'"
# TODO: Wire to publishing packages
# dotnet nuget push $file --api-key "${{ secrets.NUGET_API_KEY }}" --source https://api.nuget.org/v3/index.json --skip-duplicate
}
6 changes: 6 additions & 0 deletions global.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"sdk": {
"version": "8.0.101",
"rollForward": "latestFeature"
}
}