Skip to content

Commit

Permalink
CI: Improve build pipeline
Browse files Browse the repository at this point in the history
  • Loading branch information
piotrmacha committed May 18, 2024
1 parent 7f5c681 commit e6e218d
Show file tree
Hide file tree
Showing 8 changed files with 293 additions and 197 deletions.
73 changes: 73 additions & 0 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Build CMake Project

on:
workflow_call:
inputs:
cmake-preset:
required: true
type: string
upload-artifact-dll:
required: false
type: string
default: false
upload-artifact-dll-pdb:
required: false
type: string
default: false
upload-artifact-vdf:
required: false
type: string
default: false
msvc-toolkit:
required: false
type: string
default: 14.39
project-version:
required: false
type: string
default: false

jobs:
build:
name: MSVC on VS 2022
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
with:
submodules: recursive
- uses: TheMrMilchmann/setup-msvc-dev@v3
with:
arch: x86
toolset: ${{ inputs.msvc-toolkit }}
export-path-to-vcvarsall: VCVARSALL
- name: CMake Setup
uses: lukka/get-cmake@latest
- name: Set project version
if: ${{ inputs.project-version != 'false' }}
run: powershell set-version.ps1 ${{ inputs.project-version }}
- name: CMake Configure
run: cmake --preset ${{ inputs.cmake-preset }}
- name: Ninja Build
run: ninja -C out/build/${{ inputs.cmake-preset }} -j 20
- name: CMake Install
run: cmake --install out/build/${{ inputs.cmake-preset }} --prefix out/install/${{ inputs.cmake-preset }}
- name: Archive DLL
if: ${{ inputs.upload-artifact-dll != 'false' }}
uses: actions/upload-artifact@v4
with:
name: ${{ inputs.upload-artifact-dll }}
path: out/install/${{ inputs.cmake-preset }}/bin/*.dll
- name: Archive DLL PDB
uses: actions/upload-artifact@v4
if: ${{ inputs.upload-artifact-dll-pdb != 'false' }}
with:
name: ${{ inputs.upload-artifact-dll-pdb }}
path: |
out/build/${{ inputs.cmake-preset }}/*.dll
out/build/${{ inputs.cmake-preset }}/*.pdb
- name: Archive VDF
uses: actions/upload-artifact@v4
if: ${{ inputs.upload-artifact-vdf != 'false' }}
with:
name: ${{ inputs.upload-artifact-vdf }}
path: out/install/${{ inputs.cmake-preset }}/*.vdf
46 changes: 0 additions & 46 deletions .github/workflows/cmake-build.yml

This file was deleted.

108 changes: 0 additions & 108 deletions .github/workflows/cmake-release.yml

This file was deleted.

32 changes: 32 additions & 0 deletions .github/workflows/on-push.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
name: On Push
permissions: write-all

on:
push:
branches: [ "main", "dev", "gh_actions" ]
paths-ignore:
- 'README.md'
- 'docs/**'

jobs:
build-debug:
uses: ./.github/workflows/build.yml
with:
cmake-preset: x86-debug
upload-artifact-dll: debug-dll
upload-artifact-dll-pdb: debug-dll-pdb
upload-artifact-vdf: debug-vdf

build-release:
uses: ./.github/workflows/build.yml
with:
cmake-preset: x86-release
upload-artifact-dll: release-dll
upload-artifact-vdf: release-vdf

build-release-pdb:
uses: ./.github/workflows/build.yml
with:
cmake-preset: x86-release-pdb
upload-artifact-dll-pdb: release-dll-pdb
upload-artifact-vdf: release-vdf-pdb
120 changes: 120 additions & 0 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
name: Release
permissions: write-all

on:
push:
tags:
- 'v*'

jobs:
build-release:
uses: ./.github/workflows/build.yml
with:
cmake-preset: x86-release
upload-artifact-dll: release-dll
upload-artifact-vdf: release-vdf
project-version: ${{ github.ref_name }}

build-release-pdb:
uses: ./.github/workflows/build.yml
with:
cmake-preset: x86-release-pdb
upload-artifact-dll: release-dll-pdb
upload-artifact-vdf: release-vdf-pdb
project-version: ${{ github.ref_name }}-pdb

publish:
name: Publish new release
runs-on: windows-2022
needs:
- build-release
- build-release-pdb
steps:
- name: Download Release DLL
uses: actions/download-artifact@v4
with:
name: release-dll
path: out/install/x86-release/bin/
- name: Download Release VDF
uses: actions/download-artifact@v4
with:
name: release-vdf
path: out/install/x86-release/
- name: Download Release DLL PDB
uses: actions/download-artifact@v4
with:
name: release-dll-pdb
path: out/build/x86-release-pdb/
- name: Download Release DLL VDF
uses: actions/download-artifact@v4
with:
name: release-vdf-pdb
path: out/install/x86-release-pdb/
- name: Pack Release DLL
run: Compress-Archive out/install/x86-release/bin/* release-dll.zip
- name: Pack Release DLL PDB
run: Compress-Archive out/build/x86-release-pdb/* release-dll-pdb.zip
- name: Create release
uses: actions/[email protected]
env:
RELEASE_TAG: ${{ github.ref_name }}
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
script: |
if (!process.env.RELEASE_TAG) {
core.setFailed("The environment variable RELEASE_TAG is not defined.")
return;
}
try {
const response = await github.rest.repos.createRelease({
draft: process.env.RELEASE_TAG.match(/^\d+\.\d+\.\d+-[a-z0-9-]+$/i) !== null,
generate_release_notes: true,
name: process.env.RELEASE_TAG,
owner: context.repo.owner,
prerelease: process.env.RELEASE_TAG.match(/^\d+\.\d+\.\d+-[a-z0-9-]+$/i) !== null,
repo: context.repo.repo,
tag_name: process.env.RELEASE_TAG,
});
core.exportVariable('RELEASE_ID', response.data.id);
core.exportVariable('RELEASE_UPLOAD_URL', response.data.upload_url);
} catch (error) {
core.setFailed(error.message);
}
- name: Upload Release DLL
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ env.RELEASE_UPLOAD_URL }}
asset_path: release-dll.zip
asset_name: zBassMusic-${{ github.ref_name }}.zip
asset_content_type: application/zip
- name: Upload Release VDF
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ env.RELEASE_UPLOAD_URL }}
asset_path: out/install/x86-release/zBassMusic.vdf
asset_name: zBassMusic-${{ github.ref_name }}.vdf
asset_content_type: application/octet-stream
- name: Upload Release DLL PDB
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ env.RELEASE_UPLOAD_URL }}
asset_path: release-dll-pdb.zip
asset_name: zBassMusic-${{ github.ref_name }}-pdb.zip
asset_content_type: application/zip
- name: Upload Release VDF PDB
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ env.RELEASE_UPLOAD_URL }}
asset_path: out/install/x86-release-pdb/zBassMusic.vdf
asset_name: zBassMusic-${{ github.ref_name }}-pdb.vdf
asset_content_type: application/octet-stream
Loading

0 comments on commit e6e218d

Please sign in to comment.