Automatically select stack if there is only one for a repository #190
Workflow file for this run
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: Build, test and release | |
on: | |
push: | |
branches: ["main"] | |
paths-ignore: | |
- "README.md" | |
- "CHANGELOG.md" | |
pull_request: | |
branches: ["main"] | |
paths-ignore: | |
- "README.md" | |
- "CHANGELOG.md" | |
jobs: | |
version: | |
name: Get versioning information | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.get_version.outputs.version }} | |
next_release_version: ${{ steps.get_next_release_version.outputs.version }} | |
create_release: ${{ steps.set_create_release.outputs.create_release }} | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Get all tags | |
- name: Download auto | |
run: | | |
curl -kL -o - https://github.com/intuit/auto/releases/download/v11.3.0/auto-linux.gz | gunzip > ${{ runner.temp }}/auto | |
chmod +x ${{ runner.temp }}/auto | |
- name: Get next release version | |
id: get_next_release_version | |
run: echo "version=$(${{ runner.temp }}/auto latest --dry-run --quiet --no-version-prefix --name github-actions[bot] --email github-actions[bot]@users.noreply.github.com)" >> $GITHUB_OUTPUT | |
- name: Print next release version | |
run: echo "${{ steps.get_next_release_version.outputs.version }}" | |
- name: Get next release semver bump type | |
id: get_next_release_semver_bump_type | |
run: echo "bump_type=$(${{ runner.temp }}/auto version)" >> $GITHUB_OUTPUT | |
- name: Print next release semver bump type | |
run: echo "${{ steps.get_next_release_semver_bump_type.outputs.bump_type }}" | |
- name: Get next pre-release version for when next release version does not exist | |
id: get_next_pre_release_version | |
uses: paulhatch/[email protected] | |
with: | |
tag_prefix: "v" | |
version_format: "${major}.${minor}.${patch}" | |
- name: Get branch names | |
id: branch_names | |
uses: OctopusDeploy/util-actions/[email protected] | |
- name: Get pre-release version | |
id: get_pre_release_version | |
run: echo "version=${{ steps.get_next_release_version.outputs.version || steps.get_next_pre_release_version.outputs.version }}-${{ steps.branch_names.outputs.branch_name }}.${{ github.run_number }}-${{ github.run_attempt }}" >> $GITHUB_OUTPUT | |
- name: Set whether to create a release | |
id: set_create_release | |
run: echo "create_release=${{ github.ref == 'refs/heads/main' && steps.get_next_release_semver_bump_type.outputs.bump_type != '' }}" >> $GITHUB_OUTPUT | |
- name: Get version | |
id: get_version | |
run: echo "version=${{ steps.set_create_release.outputs.create_release == 'true' && steps.get_next_release_version.outputs.version || steps.get_pre_release_version.outputs.version }}" >> $GITHUB_OUTPUT | |
- name: Print version | |
run: echo "Version ${{ steps.get_version.outputs.version }}" | |
build: | |
needs: version | |
strategy: | |
matrix: | |
include: | |
- name: Linux | |
os: ubuntu-latest | |
- name: Windows | |
os: windows-latest | |
- name: macOS | |
os: macos-latest | |
name: Build and test on ${{ matrix.name }} | |
runs-on: ${{ matrix.os }} | |
defaults: | |
run: | |
working-directory: src | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 9.0.x | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Build | |
run: dotnet build --no-restore -c Release | |
- name: Test | |
run: dotnet test --no-build -c Release --verbosity normal --logger "trx;LogFileName=${{ github.workspace }}/tests/test_results.trx" | |
- name: Create test report | |
uses: phoenix-actions/test-reporting@v15 | |
if: success() || failure() # run this step even if previous step failed | |
with: | |
name: Tests | |
path: ${{ github.workspace }}/tests/*.trx | |
path-replace-backslashes: true # Required for Windows paths | |
reporter: dotnet-trx | |
output-to: step-summary | |
publish: | |
needs: [version, build] | |
strategy: | |
matrix: | |
include: | |
- name: Linux amd64 | |
runtime-id: linux-x64 | |
artifact-name: linux_amd64 | |
archive_type: tar | |
- name: Linux arm64 | |
runtime-id: linux-arm64 | |
artifact-name: linux_arm64 | |
archive_type: tar | |
- name: Windows amd64 | |
runtime-id: win-x64 | |
artifact-name: windows_amd64 | |
archive_type: zip | |
- name: Windows arm64 | |
runtime-id: win-arm64 | |
artifact-name: windows_arm64 | |
archive_type: zip | |
- name: macOS amd64 | |
runtime-id: osx-x64 | |
artifact-name: macos_amd64 | |
archive_type: tar | |
- name: macOS arm64 | |
runtime-id: osx-arm64 | |
artifact-name: macos_arm64 | |
archive_type: tar | |
name: Publish ${{ matrix.name }} | |
runs-on: ubuntu-latest | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Get all tags | |
- name: Download auto | |
run: | | |
curl -kL -o - https://github.com/intuit/auto/releases/download/v11.3.0/auto-linux.gz | gunzip > ${{ runner.temp }}/auto | |
chmod +x ${{ runner.temp }}/auto | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v4 | |
with: | |
dotnet-version: 9.0.x | |
- name: Publish | |
run: dotnet publish src/Stack/Stack.csproj -c Release -r ${{ matrix.runtime-id }} -p:Version=${{ needs.version.outputs.version }} -p:DebugType=None -p:DebugSymbols=false -o ${{ github.workspace }}/publish | |
- name: Update changelog if publishing release | |
run: ${{ runner.temp }}/auto changelog --no-git-commit --name github-actions[bot] --email github-actions[bot]@users.noreply.github.com | |
if: needs.version.outputs.create_release == 'true' | |
- name: Copy changelog to publish folder | |
run: cp ${{ github.workspace }}/CHANGELOG.md ${{ github.workspace }}/publish | |
- name: Copy readme to publish folder | |
run: cp ${{ github.workspace }}/README.md ${{ github.workspace }}/publish | |
- run: mkdir -p ${{ github.workspace }}/artifacts | |
- name: Create tar.gz archive | |
run: tar -czf ${{ github.workspace }}/artifacts/stack_${{ needs.version.outputs.version }}_${{ matrix.artifact-name }}.tar.gz * | |
working-directory: ${{ github.workspace }}/publish | |
if: matrix.archive_type == 'tar' | |
- name: Create zip archive | |
run: zip -r ${{ github.workspace }}/artifacts/stack_${{ needs.version.outputs.version }}_${{ matrix.artifact-name }}.zip * | |
working-directory: ${{ github.workspace }}/publish | |
if: matrix.archive_type == 'zip' | |
- name: Upload artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
overwrite: true | |
name: ${{ matrix.artifact-name }} | |
path: ${{ github.workspace }}/artifacts/* | |
release: | |
name: Release | |
runs-on: ubuntu-latest | |
needs: [version, publish] | |
if: github.ref == 'refs/heads/main' && github.event_name == 'push' && needs.version.outputs.create_release == 'true' | |
permissions: | |
contents: write | |
env: | |
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # Get all tags | |
- name: Download artifacts | |
uses: actions/download-artifact@v4 | |
with: | |
path: ${{ github.workspace }}/artifacts | |
- name: List artifacts | |
run: ls -lR ${{ github.workspace }}/artifacts | |
- name: Download auto | |
run: | | |
curl -kL -o - https://github.com/intuit/auto/releases/download/v11.3.0/auto-linux.gz | gunzip > ${{ runner.temp }}/auto | |
chmod +x ${{ runner.temp }}/auto | |
- name: Release | |
run: ${{ runner.temp }}/auto shipit --name github-actions[bot] --email github-actions[bot]@users.noreply.github.com |