Publish #600
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: Publish | |
on: | |
schedule: | |
- cron: '40 9 * * *' | |
workflow_dispatch: | |
release: | |
types: [published] | |
inputs: | |
is_release_event: | |
description: Should this be a release or a preview package | |
required: true | |
default: 'false' | |
jobs: | |
activity-short-circuit: | |
runs-on: ubuntu-latest | |
outputs: | |
same_sha: ${{ steps.check.outputs.same_sha }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Get Activity Short Circuit | |
id: check | |
run: | | |
echo "Event name: ${{ github.event_name }}" | |
git branch -a | |
git fetch origin nightly:nightly | |
head_sha=$(git rev-parse --verify HEAD) | |
nightly_sha=$(git rev-parse --verify nightly) | |
if [[ "$head_sha" == "$nightly_sha" && ${{ github.event_name }} != "release" ]]; then | |
same_sha=true; | |
else | |
same_sha=false; | |
fi | |
echo "head_sha=$head_sha" | |
echo "nightly_sha=$nightly_sha" | |
echo "same_sha=${same_sha}" | |
echo "same_sha=${same_sha}" >> $GITHUB_OUTPUT | |
build-test: | |
needs: activity-short-circuit | |
if: needs.activity-short-circuit.outputs.same_sha == 'false' | |
runs-on: ${{ matrix.os }} | |
strategy: | |
fail-fast: false | |
matrix: | |
os: [ubuntu-latest, windows-latest, macos-latest] | |
sln: | |
- Spriggit.sln | |
- Spriggit.Linux.sln | |
exclude: | |
- os: ubuntu-latest | |
sln: Spriggit.sln | |
- os: ubuntu-latest | |
sln: Spriggit.Tests.Windows.sln | |
- os: macos-latest | |
sln: Spriggit.sln | |
- os: macos-latest | |
sln: Spriggit.Tests.Windows.sln | |
- os: windows-latest | |
sln: Spriggit.Linux.sln | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install GitVersion | |
uses: gittools/actions/gitversion/setup@v3.0.3 | |
with: | |
versionSpec: '6.0.5' | |
- name: Determine Version | |
id: version_step # step id used as reference for output values | |
uses: gittools/actions/gitversion/execute@v3.0.3 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 9.0.* | |
- name: Install dependencies | |
run: | | |
dotnet clean ${{ matrix.sln }} -c Release && dotnet nuget locals all --clear | |
dotnet restore ${{ matrix.sln }} | |
- name: Build | |
run: dotnet build ${{ matrix.sln }} -c Release --no-restore | |
- name: Test | |
run: dotnet test ${{ matrix.sln }} -c Release --no-build | |
build-test-push: | |
needs: [build-test, activity-short-circuit] | |
if: needs.activity-short-circuit.outputs.same_sha == 'false' | |
runs-on: windows-latest | |
steps: | |
- name: Get timestamp | |
uses: 1466587594/get-current-time@v1 | |
id: current-time | |
with: | |
format: YYYYMMDD-HHmmSS | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 9.0.* | |
- name: Install GitVersion | |
uses: gittools/actions/gitversion/setup@v3.0.3 | |
with: | |
versionSpec: '6.0.5' | |
- name: Determine Version | |
id: version_step # step id used as reference for output values | |
uses: gittools/actions/gitversion/execute@v3.0.3 | |
- name: Install dependencies | |
run: | | |
dotnet clean Spriggit.sln -c Release && dotnet nuget locals all --clear | |
dotnet restore Spriggit.sln | |
- name: Build | |
run: dotnet build Spriggit.sln -c Release --no-restore /p:GeneratePackageOnBuild=false | |
- name: Pack | |
run: | | |
dotnet pack Spriggit.sln -c Release --no-build --no-restore -o out --include-symbols -p:SymbolPackageFormat=snupkg | |
- name: Pack GUI | |
if: ${{ success() && !github.event.release.prerelease && github.event_name == 'release' }} | |
run: dotnet publish "Spriggit.UI/Spriggit.UI.csproj" --configuration Release -p:PublishSingleFile=true | |
- name: Pack Linux CLI | |
if: ${{ success() && !github.event.release.prerelease && github.event_name == 'release' }} | |
run: dotnet publish "Spriggit.CLI/Spriggit.CLI.csproj" --configuration Release -r linux-x64 -p:PublishSingleFile=True --self-contained True | |
- name: Pack CLI | |
if: ${{ success() && !github.event.release.prerelease && github.event_name == 'release' }} | |
run: dotnet publish "Spriggit.CLI/Spriggit.CLI.csproj" --configuration Release -r win-x64 -p:PublishSingleFile=True --self-contained True | |
- name: Archive GUI | |
if: ${{ success() && !github.event.release.prerelease && github.event_name == 'release' }} | |
run: | | |
powershell Compress-Archive Spriggit.UI/bin/Release/net9.0/win-x64/publish/* Spriggit.zip | |
- name: Archive Linux CLI | |
if: ${{ success() && !github.event.release.prerelease && github.event_name == 'release' }} | |
run: | | |
powershell Compress-Archive Spriggit.CLI/bin/Release/net9.0/linux-x64/publish/* SpriggitLinuxCLI.zip | |
- name: Archive CLI | |
if: ${{ success() && !github.event.release.prerelease && github.event_name == 'release' }} | |
run: | | |
powershell Compress-Archive Spriggit.CLI/bin/Release/net9.0/win-x64/publish/* SpriggitCLI.zip | |
- name: Publish GUI to Github | |
if: ${{ success() && !github.event.release.prerelease && github.event_name == 'release' }} | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
file: Spriggit.zip | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
tag: ${{ github.event.release.tag_name }} | |
- name: Publish Linux CLI to Github | |
if: ${{ success() && !github.event.release.prerelease && github.event_name == 'release' }} | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
file: SpriggitLinuxCLI.zip | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
tag: ${{ github.event.release.tag_name }} | |
- name: Publish CLI to Github | |
if: ${{ success() && !github.event.release.prerelease && github.event_name == 'release' }} | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
file: SpriggitCLI.zip | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
tag: ${{ github.event.release.tag_name }} | |
- name: Print Packages | |
run: | | |
ls out/*.nupkg | |
- name: Publish to Nuget.org | |
run: dotnet nuget push out/**/*.nupkg --api-key ${{ secrets.NUGET_API_KEY }} --source https://api.nuget.org/v3/index.json | |
update-nightly: | |
needs: [build-test-push, activity-short-circuit] | |
if: needs.activity-short-circuit.outputs.same_sha == 'false' | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Reset nightly to release | |
run: | | |
head_sha=$(git rev-parse --verify HEAD) | |
echo "head_sha=$head_sha" | |
git checkout nightly | |
git reset --hard $head_sha | |
git push |