-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'main' of https://github.com/radj307/conv-utils
- Loading branch information
Showing
1 changed file
with
154 additions
and
0 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,154 @@ | ||
name: Generate Release | ||
|
||
on: | ||
push: | ||
tags: '*.*.*' | ||
workflow_dispatch: | ||
inputs: | ||
name: | ||
description: 'Release Name' | ||
required: false | ||
default: '' | ||
type: string | ||
tag: # Target tag to make a release for | ||
description: 'Release Tag ()' | ||
required: false | ||
default: '' | ||
type: string | ||
is-draft: # Input that selects whether to make a draft release or a public release | ||
description: 'Make Draft Release' | ||
required: false | ||
default: 'true' | ||
type: boolean | ||
is-prerelease: # Input that selects whether to make a pre-release or normal release | ||
description: 'Make Pre-Release' | ||
required: false | ||
default: 'false' | ||
type: boolean | ||
autogenerate: | ||
description: 'Autogenerate Release Notes From Commits' | ||
required: false | ||
default: 'false' | ||
type: boolean | ||
body: | ||
description: 'Release Body Paragraph' | ||
required: false | ||
default: '' | ||
|
||
env: | ||
# [PROJECT_NAME] | ||
# Currently this is used for the following scenarios: | ||
# - Executable Name | ||
# - Build Subdirectory Name | ||
# - Archive Name Prefix | ||
PROJECT_NAME: 'conv2' | ||
BUILD_TYPE: Release | ||
|
||
jobs: | ||
create-binaries: | ||
runs-on: ${{matrix.os}} | ||
strategy: | ||
matrix: | ||
os: [ ubuntu-latest, windows-2022, macos-latest ] | ||
fail-fast: true | ||
|
||
steps: | ||
# Check out the repository | ||
- uses: actions/checkout@v2 | ||
with: | ||
submodules: recursive | ||
fetch-depth: 0 | ||
|
||
|
||
# Set up platform dependencies | ||
# Ninja | ||
- uses: seanmiddleditch/gha-setup-ninja@master | ||
# MSVC (Windows) | ||
- if: ${{ runner.os == 'Windows' }} | ||
uses: ilammy/msvc-dev-cmd@v1 | ||
# gcc-10 g++-10 zip unzip (Linux) | ||
- if: ${{ runner.os == 'Linux' }} | ||
run: sudo apt-get update && sudo apt-get install gcc-10 g++-10 zip unzip -y | ||
|
||
|
||
# Configure CMake Cache | ||
# Windows | ||
- name: Configure CMake (Windows) | ||
if: ${{ runner.os == 'Windows' }} | ||
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -G Ninja | ||
# Linux/macOS | ||
- name: Configure CMake (Linux/macOS) | ||
if: ${{ runner.os != 'Windows' }} | ||
run: cmake -B ${{github.workspace}}/build -DCMAKE_BUILD_TYPE=${{env.BUILD_TYPE}} -G Ninja | ||
env: | ||
CC: gcc-10 | ||
CXX: g++-10 | ||
|
||
# Build Binary | ||
- name: Build | ||
run: cmake --build ${{github.workspace}}/build --config ${{env.BUILD_TYPE}} | ||
|
||
# Create Packaged Release Archive | ||
# Windows | ||
- name: Create Archive (Windows) | ||
if: ${{ runner.os == 'Windows' }} | ||
run: | | ||
cd "${{github.workspace}}/build/${{env.PROJECT_NAME}}" | ||
Compress-Archive "${{env.PROJECT_NAME}}.exe" "${{env.PROJECT_NAME}}-$(.\${{env.PROJECT_NAME}} -vq)-Windows.zip" | ||
shell: powershell | ||
# Linux / macOS | ||
- name: Create Archive (Linux/macOS) | ||
if: ${{ runner.os != 'Windows' }} | ||
run: | | ||
cd "${{github.workspace}}/build/${{env.PROJECT_NAME}}" | ||
zip -T9 "${{env.PROJECT_NAME}}-$(./${{env.PROJECT_NAME}} -vq)-${{runner.os}}.zip" "${{env.PROJECT_NAME}}" | ||
shell: bash | ||
|
||
# Upload Artifact | ||
- name: Upload Artifact | ||
uses: actions/upload-artifact@v2 | ||
with: | ||
name: latest-${{runner.os}} | ||
path: '${{github.workspace}}/build/${{env.PROJECT_NAME}}/*.zip' | ||
#:create-binaries | ||
|
||
create-release: | ||
needs: create-binaries | ||
runs-on: ubuntu-latest | ||
strategy: | ||
max-parallel: 1 | ||
|
||
steps: | ||
# Download Artifacts | ||
- name: 'Download Build Artifacts' | ||
uses: actions/download-artifact@v2 | ||
|
||
# Retrieve the latest git tag if this was triggered by a tag | ||
- name: 'Get Release Tag' | ||
id: get_version | ||
run: | | ||
if [ "${{github.event.inputs.tag}}" == "" ]; then TAG="${GITHUB_REF/refs\/tags\//}"; else TAG="${{github.event.inputs.tag}}" ; fi | ||
echo ::set-output name=VERSION::$TAG | ||
echo ::set-output name=NAME::"Release $TAG" | ||
# Stage downloaded build artifacts for deployment | ||
- name: 'Stage Archives' | ||
run: | | ||
cd ${{github.workspace}} | ||
if mv ./latest-*/* ./ ; then ls -lAgh ; else ls -lAghR ; fi | ||
shell: bash | ||
|
||
# Upload Release | ||
- name: 'Create Release' | ||
#if: ${{ github.event_name == 'workflow_dispatch' }} | ||
uses: softprops/action-gh-release@v1 | ||
with: | ||
draft: ${{ github.event.inputs.is-draft || true }} | ||
prerelease: ${{ github.event.inputs.is-prerelease || false }} | ||
tag_name: ${{ steps.get_version.outputs.VERSION }} | ||
name: ${{ steps.get_version.outputs.NAME }} | ||
generate_release_notes: ${{ github.event.inputs.autogenerate || true }} | ||
body: ${{ github.event.inputs.body || '' }} | ||
fail_on_unmatched_files: true | ||
files: ${{github.workspace}}/*.zip | ||
#:create-release |