Skip to content
Open
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
39 changes: 39 additions & 0 deletions .github/workflows/build-and-publish-natives.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
name: Build & Publish NetCord.Natives
Comment thread
ha-ves marked this conversation as resolved.

on:
workflow_dispatch:
push:
paths:
- 'NetCord.Natives/**'
- '.github/workflows/build-natives-nix.yml'
- '.github/workflows/build-natives-windows.yml'
- '.github/workflows/build-and-publish-natives.yml'
tags:
- "[0-9]+.[0-9]+.[0-9]+"
- "[0-9]+.[0-9]+.[0-9]+-*"

jobs:
build-natives-nix:
uses: ./.github/workflows/build-natives-nix.yml

build-natives-windows:
uses: ./.github/workflows/build-natives-windows.yml

publish:
needs: [build-natives-nix, build-natives-windows]
runs-on: ubuntu-latest

steps:
- name: Download All NuGet Package Artifacts
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
with:
path: artifacts/pkgs
pattern: NetCord.Natives.*.packages
merge-multiple: true

- name: Publish packages
env:
KEY: ${{ secrets.NUGET_API_KEY }}
run: |
dotnet nuget push artifacts/pkgs/*.nupkg -k $KEY -s https://api.nuget.org/v3/index.json --skip-duplicate
dotnet nuget push artifacts/pkgs/*.snupkg -k $KEY -s https://api.nuget.org/v3/index.json --skip-duplicate
81 changes: 19 additions & 62 deletions .github/workflows/build-and-publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,26 @@ on:
- "[0-9]+.[0-9]+.[0-9]+-*"

jobs:
build-and-publish:
build:
uses: ./.github/workflows/build.yml

publish:
needs: build
runs-on: ubuntu-latest

steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Download Build Artifacts
uses: actions/download-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: NuGet Packages
path: artifacts/pkgs
merge-multiple: true

- name: Download Documentation Artifacts
uses: actions/download-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
fetch-depth: 0
filter: tree:0
name: Documentation Artifacts
path: artifacts/docs

- name: Install Nix
uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6
Expand All @@ -24,50 +35,13 @@ jobs:
shell: &dev-shell 'nix develop -c bash -eo pipefail {0}'
run: 'true'

- name: Restore dependencies
shell: *dev-shell
run: dotnet restore

- name: Build
shell: *dev-shell
run: dotnet build -c Release --no-restore --warnaserror

- name: Test
shell: *dev-shell
run: dotnet test -c Release --no-build --verbosity normal

- name: Pack Packages
shell: *dev-shell
run: |
dotnet pack NetCord -c Release --no-build
dotnet pack NetCord.Services -c Release --no-build
dotnet pack Hosting/NetCord.Hosting -c Release --no-build
dotnet pack Hosting/NetCord.Hosting.Services -c Release --no-build
dotnet pack Hosting/NetCord.Hosting.AspNetCore -c Release --no-build

- name: Setup docs environment
shell: &docs-shell 'nix develop .#docs -c bash -eo pipefail {0}'
run: 'true'

- name: Build Documentation
shell: *docs-shell
working-directory: Documentation
run: |
npm install
npm run lint
npm run test
npm run build

- name: Publish Packages
shell: *dev-shell
env:
KEY: ${{ secrets.NUGET_API_KEY }}
run: |
dotnet nuget push NetCord/bin/Release/*.nupkg -k $KEY -s https://api.nuget.org/v3/index.json --skip-duplicate
dotnet nuget push NetCord.Services/bin/Release/*.nupkg -k $KEY -s https://api.nuget.org/v3/index.json --skip-duplicate
dotnet nuget push Hosting/NetCord.Hosting/bin/Release/*.nupkg -k $KEY -s https://api.nuget.org/v3/index.json --skip-duplicate
dotnet nuget push Hosting/NetCord.Hosting.Services/bin/Release/*.nupkg -k $KEY -s https://api.nuget.org/v3/index.json --skip-duplicate
dotnet nuget push Hosting/NetCord.Hosting.AspNetCore/bin/Release/*.nupkg -k $KEY -s https://api.nuget.org/v3/index.json --skip-duplicate
dotnet nuget push artifacts/pkgs/*.nupkg -k $KEY -s https://api.nuget.org/v3/index.json --skip-duplicate
dotnet nuget push artifacts/pkgs/*.snupkg -k $KEY -s https://api.nuget.org/v3/index.json --skip-duplicate

- name: Deploy Documentation
uses: appleboy/scp-action@ff85246acaad7bdce478db94a363cd2bf7c90345 # v1.0.0
Expand All @@ -77,23 +51,6 @@ jobs:
port: ${{ secrets.SSH_PORT }}
key: ${{ secrets.SSH_KEY }}
rm: true
source: Documentation/_site
source: artifacts/docs
strip_components: 2
target: ~/NetCord/html

- name: Upload Build Artifacts
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: Build Artifacts
path: |
NetCord/bin/Release
NetCord.Services/bin/Release
Hosting/NetCord.Hosting/bin/Release
Hosting/NetCord.Hosting.Services/bin/Release
Hosting/NetCord.Hosting.AspNetCore/bin/Release

- name: Upload Documentation Artifacts
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: Documentation Artifacts
path: Documentation/_site
141 changes: 141 additions & 0 deletions .github/workflows/build-natives-nix.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
name: Build NetCord.Natives (Linux/MacOS, Nix)

on:
workflow_call:
workflow_dispatch:
inputs:
GenerateBinLog:
type: boolean
default: false
push:
paths:
- 'NetCord.Natives/**'
- 'Tests/NetCord.Natives.Tests/**'
- '.github/workflows/build-natives-nix.yml'

jobs:
build-natives-nix:
strategy:
fail-fast: false
matrix:
include:
- rid: osx-x64
runs-on: macos-15-intel
vcpkg-os-target: osx
vcpkg-platform-target: x64
- rid: osx-arm64
runs-on: macos-15
vcpkg-os-target: osx
vcpkg-platform-target: arm64
- rid: linux-x64
runs-on: ubuntu-latest
vcpkg-os-target: linux
vcpkg-platform-target: x64
- rid: linux-arm64
runs-on: ubuntu-24.04-arm
vcpkg-os-target: linux
vcpkg-platform-target: arm64

runs-on: ${{ matrix.runs-on }}
env:
CI: true
VCPKG_BINARY_SOURCES: clear;files,${{ github.workspace }}/.vcpkg-cache,readwrite
VCPKG_DOWNLOADS: ${{ github.workspace }}/.vcpkg-downloads
VcpkgOSTarget: ${{ matrix.vcpkg-os-target }}
VcpkgPlatformTarget: ${{ matrix.vcpkg-platform-target }}
Configuration: Release
RuntimeIdentifier: ${{ matrix.rid }}
DotnetVerbose: minimal
GenerateBinLog: ${{ github.event.inputs.GenerateBinLog || inputs.GenerateBinLog || false }}

steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
fetch-depth: 0
filter: tree:0
submodules: true

- name: Restore vcpkg cache
uses: actions/cache/restore@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
.vcpkg-cache
.vcpkg-downloads
key: vcpkg-${{ runner.os }}-${{ matrix.rid }}-${{ hashFiles('NetCord.Natives/vcpkg.json', 'NetCord.Natives/natives-ports/**') }}
restore-keys: |
vcpkg-${{ runner.os }}-${{ matrix.rid }}-
vcpkg-${{ runner.os }}-

- name: Install Nix
uses: cachix/install-nix-action@8aa03977d8d733052d78f4e008a241fd1dbf36b3 # v31.10.6

- name: Setup dev shell
shell: &dev-shell 'nix develop -c bash -eo pipefail {0}'
run: 'true'

- name: Setup vcpkg (non-Windows, Nix)
shell: *dev-shell
run: |
mkdir -p "${VCPKG_BINARY_SOURCES#*,}"
mkdir -p "${VCPKG_DOWNLOADS}"
vcpkgRoot="${GITHUB_WORKSPACE}/NetCord.Natives/vcpkg"
echo "Bootstrapping vcpkg from: $vcpkgRoot"
"$vcpkgRoot/bootstrap-vcpkg.sh" -disableMetrics
echo "VCPKG_ROOT=$vcpkgRoot" >> "$GITHUB_ENV"

- name: Restore
shell: *dev-shell
run: |
dotnet restore Tests/NetCord.Natives.Tests/NetCord.Natives.Tests.csproj -v ${{ env.DotnetVerbose }} ${{ env.GenerateBinLog == 'true' && '-bl:restore.binlog' || '' }}

- name: Build natives projects for ${{ matrix.rid }}
shell: *dev-shell
run: >
dotnet build Tests/NetCord.Natives.Tests/NetCord.Natives.Tests.csproj --no-restore -v ${{ env.DotnetVerbose }}
${{ env.GenerateBinLog == 'true' && '-bl:build.binlog' || '' }}
-p:AppendNativeAotAppProps="RuntimeIdentifier=${{ env.RuntimeIdentifier }}"
-p:GeneratePackageOnBuild=false -p:CI=false

- name: Test natives outputs for ${{ matrix.rid }}
shell: *dev-shell
run: >
dotnet test Tests/NetCord.Natives.Tests/NetCord.Natives.Tests.csproj --no-restore --no-build -v ${{ env.DotnetVerbose }}
${{ env.GenerateBinLog == 'true' && '-bl:test.binlog' || '' }}
--logger "console;verbosity=detailed"
--logger GitHubActions

- name: Pack NuGet Package for ${{ matrix.rid }}
if: ${{ always() }}
shell: *dev-shell
run: >
dotnet pack NetCord.Natives/NetCord.Natives.csproj --no-restore --no-build -v ${{ env.DotnetVerbose }}
${{ env.GenerateBinLog == 'true' && '-bl:pack.binlog' || '' }}
-o NetCord.Natives/bin/${{ matrix.rid }}
-p:CI=false

- name: Upload Binary Logs
if: ${{ env.GenerateBinLog == 'true' && always() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: ${{ matrix.rid }}-binlogs
path: |
*.binlog

- name: Upload NuGet Package Artifact
if: ${{ always() }}
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: NetCord.Natives.${{ matrix.rid }}.packages
path: |
NetCord.Natives/bin/${{ matrix.rid }}/*.nupkg
NetCord.Natives/bin/${{ matrix.rid }}/*.snupkg

- name: Save vcpkg cache
if: ${{ always() }}
uses: actions/cache/save@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: |
.vcpkg-cache
.vcpkg-downloads
key: vcpkg-${{ runner.os }}-${{ matrix.rid }}-${{ hashFiles('NetCord.Natives/vcpkg.json', 'NetCord.Natives/natives-ports/**') }}
Loading