Release (version 0.6.0-rc1, draft true) [workflow_dispatch][dev-0.6.0] #53
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: Release | |
on: | |
workflow_dispatch: | |
inputs: | |
test_release: | |
description: 'Draft Release' | |
required: true | |
type: boolean | |
default: true | |
do_tests: | |
description: 'Execute tests' | |
type: boolean | |
default: true | |
version_tag: | |
description: 'Version tag' | |
type: 'string' | |
required: true | |
default: '0.4.0' | |
run-name: Release (version ${{ inputs.version_tag }}, draft ${{ inputs.test_release }}) [${{ github.event_name }}][${{ github.head_ref || github.ref_name }}] | |
jobs: | |
check-release: | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Check tag | |
uses: mukunku/[email protected] | |
id: checkTag | |
with: | |
tag: 'v${{ github.event.inputs.version_tag }}' | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
- if: ${{ steps.checkTag.outputs.exists == 'true' }} | |
name: Fail build | |
run: exit 1 | |
docs: | |
if: true | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash | |
env: | |
GO_VERSION: 1.20.14 | |
PANDOC_VERSION: 3.3 | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
clean: true | |
submodules: false | |
- name: Install Pandoc | |
uses: pandoc/actions/[email protected] | |
with: | |
version: ${{ env.PANDOC_VERSION }} | |
- name: Install TeXlive | |
run: sudo apt-get update && sudo apt-get install texlive-full | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Generate PDF | |
run: | | |
cd docs/ | |
CURDATE=$(date '+%x %T') | |
sed -i -E -e 's|subtitle:.+|subtitle: "User Manual - version ${{ github.event.inputs.version_tag }}"|' -e "s|date:.+|date: \"$CURDATE\"|" user-manual.md | |
sed -i -E -e 's|page-background:\s*resources/draft.png||' user-manual.md | |
go generate | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: qpep_user_manual_b${{ github.run_id }} | |
path: "docs/*.pdf" | |
build-mac-os: | |
needs: check-release | |
runs-on: macos-latest | |
env: | |
GO_VERSION: 1.20.14 | |
CMAKE_VERSION: '3.22.x' | |
GOARCH: arm64 | |
GOOS: darwin | |
CGO_ENABLED: 1 | |
GOPATH: ${{ github.workspace }}/.go | |
CMAKE_BUILD_PARALLEL_LEVEL: 4 | |
IGNORE_PACKAGES: 'tray|docker|docs|version|webgui' | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
clean: true | |
submodules: true | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Set up CMake | |
uses: jwlawson/[email protected] | |
with: | |
cmake-version: ${{ env.CMAKE_VERSION }} | |
- name: Set up Python | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.11' | |
- name: Prepare | |
run: | | |
go clean -cache -x | |
mkdir -p cover | |
mkdir -p report | |
mkdir -p unit | |
mkdir -p $GOPATH/bin | |
pip install dmgbuild | |
- name: Build Backends | |
run: | | |
export CPP=${CXX} | |
export PATH=$GOPATH/bin:$GOPATH/bin/${GOOS}_${GOARCH}:$PATH | |
cd backend/ | |
go generate | |
- name: Build Executable | |
run: | | |
go build -v -o build/qpep | |
- name: Build QPep Tray 64bits | |
run: | | |
pushd qpep-tray | |
go build -v -o ../build/qpep-tray | |
popd | |
- name: Build MacOS installer | |
run: | | |
bash ./installer_osx.sh | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: qpep_macos_b${{ github.run_id }} | |
path: installer-osx/QPep*.pkg | |
- name: Prepare Tests | |
run: | | |
mkdir -p unit/ | |
mkdir -p cover/ | |
mkdir -p report/ | |
go install github.com/jstemmer/go-junit-report/[email protected] | |
go install github.com/axw/gocov/[email protected] | |
go install github.com/matm/gocov-html/cmd/[email protected] | |
go install github.com/AlekSi/[email protected] | |
- name: Test | |
run: | | |
set -x | |
for i in $(go list ./... | grep -E -v "${IGNORE_PACKAGES}" | sed -n -e 's|github.com\/Project-Faster\/qpep\/||p') | |
do | |
pushd $i | |
export WORKSPACE="${{ github.workspace }}" | |
go test -v -gcflags=-l -cover -c -o qpep.$(basename $PWD).test &> unit_tests.out || true | |
./qpep.$(basename $PWD).test -test.v -test.timeout 5m -test.coverprofile=$WORKSPACE/cover/$(basename $PWD).out &>> unit_tests.out || true | |
grep -E "PASS|FAIL|SKIP" unit_tests.out || true | |
cat unit_tests.out | go-junit-report > $WORKSPACE/unit/$(basename $PWD).xml | |
popd | |
done | |
continue-on-error: true | |
- name: Publish Coverage Results | |
if: always() | |
run: | | |
for i in $(go list ./... | grep -E -v "${IGNORE_PACKAGES}" | sed -n -e 's|github.com\/Project-Faster\/qpep\/||p') | |
do | |
pushd $i | |
echo "=== Package $i ===" >> $GITHUB_STEP_SUMMARY | |
gocov convert ${{ github.workspace }}/cover/$(basename $PWD).out | gocov report | grep "Coverage" >> $GITHUB_STEP_SUMMARY || true | |
echo >> $GITHUB_STEP_SUMMARY | |
gocov convert ${{ github.workspace }}/cover/$(basename $PWD).out | gocov-html > ${{ github.workspace }}/report/$(basename $PWD).html || true | |
popd | |
done | |
continue-on-error: true | |
- name: Publish Test Results | |
uses: EnricoMi/publish-unit-test-result-action/macos@v2 | |
if: always() | |
with: | |
check_name: "Unit Tests - MacOS Platform" | |
junit_files: "unit/*.xml" | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: macos_cover_output | |
path: "cover/*.out" | |
- uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: macos_coverage_report | |
path: "report/*.html" | |
build-linux: | |
needs: check-release | |
runs-on: ubuntu-latest | |
env: | |
GO_VERSION: 1.20.14 | |
CMAKE_VERSION: '3.22.x' | |
GOARCH: amd64 | |
GOOS: linux | |
CGO_ENABLED: 1 | |
CMAKE_BUILD_PARALLEL_LEVEL: 4 | |
IGNORE_PACKAGES: 'tray|docker|docs|version|webgui' | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
clean: true | |
submodules: true | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Set up CMake | |
uses: jwlawson/[email protected] | |
with: | |
cmake-version: ${{ env.CMAKE_VERSION }} | |
- name: Prepare | |
run: | | |
sudo apt-get install -y pkg-config libgtk-3-dev libayatana-appindicator-dev | |
go clean -cache -x | |
mkdir -p cover | |
mkdir -p report | |
mkdir -p unit | |
go install github.com/jstemmer/go-junit-report/[email protected] | |
go install github.com/axw/gocov/[email protected] | |
go install github.com/matm/gocov-html/cmd/[email protected] | |
go install github.com/AlekSi/[email protected] | |
- name: Build Backends | |
run: | | |
cd backend/ | |
go generate | |
- name: Build QPep | |
run: | | |
go build -v -o build/qpep | |
- name: Build QPep Tray | |
run: | | |
pushd qpep-tray | |
go build -o ../build/qpep-tray | |
popd | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: qpep_linux_b${{ github.run_id }} | |
path: build/ | |
- name: Test | |
if: ${{ inputs.test_release }} | |
run: | | |
set -x | |
for i in $(go list ./... | grep -E -v "${IGNORE_PACKAGES}" | sed -n -e 's|github.com\/Project-Faster\/qpep\/||p') | |
do | |
pushd $i | |
export WORKSPACE="${{ github.workspace }}" | |
go test -v -gcflags=-l -cover -c -o qpep.$(basename $PWD).test &> /dev/null || true | |
./qpep.$(basename $PWD).test -test.v -test.timeout 5m -test.coverprofile=$WORKSPACE/cover/$(basename $PWD).out &> unit_tests.out || true | |
grep -E "PASS|FAIL|SKIP" unit_tests.out || true | |
cat unit_tests.out | go-junit-report > $WORKSPACE/unit/$(basename $PWD).xml | |
popd | |
done | |
continue-on-error: true | |
- name: Publish Coverage Results | |
if: always() | |
run: | | |
for i in $(go list ./... | grep -E -v "${IGNORE_PACKAGES}" | sed -n -e 's|github.com\/Project-Faster\/qpep\/||p') | |
do | |
pushd $i | |
echo "=== Package $i ===" >> $GITHUB_STEP_SUMMARY | |
gocov convert ${{ github.workspace }}/cover/$(basename $PWD).out | gocov report | grep "Coverage" >> $GITHUB_STEP_SUMMARY || true | |
echo >> $GITHUB_STEP_SUMMARY | |
gocov convert ${{ github.workspace }}/cover/$(basename $PWD).out | gocov-html > ${{ github.workspace }}/report/$(basename $PWD).html || true | |
popd | |
done | |
continue-on-error: true | |
- name: Publish Test Results | |
uses: EnricoMi/publish-unit-test-result-action/linux@v2 | |
if: ${{ inputs.test_release }} | |
with: | |
check_name: "Unit Tests - Linux Platform" | |
junit_files: "unit/*.xml" | |
build-windows: | |
needs: check-release | |
runs-on: windows-latest | |
env: | |
GO_VERSION: 1.20.14 | |
CMAKE_VERSION: '3.22.x' | |
GOARCH: amd64 | |
GOOS: windows | |
CGO_ENABLED: 1 | |
QPEP_CI_ENV: 1 | |
CMAKE_BUILD_PARALLEL_LEVEL: 4 | |
IGNORE_PACKAGES: 'tray|docker|docs|version|webgui' | |
MINGW_BASEDIR: 'C:\ProgramData\chocolatey\lib\mingw\tools\install\mingw64\bin' | |
defaults: | |
run: | |
shell: cmd | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
clean: true | |
submodules: true | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: ${{ env.GO_VERSION }} | |
- name: Install Wix | |
uses: actions/checkout@v2 | |
with: | |
repository: fbarresi/wix | |
path: wix | |
- name: Install MSBuild | |
uses: microsoft/[email protected] | |
- name: Set up MinGW | |
uses: egor-tensin/setup-mingw@v2 | |
with: | |
platform: x64 | |
static: true | |
version: 11.1.0 | |
- name: Set up CMake | |
uses: jwlawson/[email protected] | |
with: | |
cmake-version: ${{ env.CMAKE_VERSION }} | |
- name: Prepare | |
run: | | |
@echo on | |
MKDIR build | |
MKDIR build\64bits | |
MKDIR build\32bits | |
COPY /Y windivert\LICENSE build\LICENSE.windivert | |
COPY /Y LICENSE build\LICENSE | |
go clean -cache -x | |
COPY /Y windivert\x64\* build\64bits | |
COPY /y "%MINGW_BASEDIR%\libgcc_s_seh-1.dll" build\64bits | |
COPY /y "%MINGW_BASEDIR%\libwinpthread-1.dll" build\64bits | |
COPY /y "%MINGW_BASEDIR%\libstdc++-6.dll" build\64bits | |
- name: Build Backends | |
run: | | |
cd backend/ | |
go generate | |
- name: Build QPep | |
run: | | |
go build -o build\64bits\qpep.exe | |
- name: Build QPep Tray | |
run: | | |
pushd qpep-tray | |
set CGO_ENABLED=0 | |
go build -ldflags -H=windowsgui -o ..\build\64bits\qpep-tray.exe | |
popd | |
- name: Build QPep Installer | |
run: | | |
sed -E 's/Version="[^"]+"/Version="1.${{ github.event.inputs.version_tag }}"/' installer/installer.wxs > installer/installer.wxs | |
sed -E 's/FileVersion:\s*"[^"]+"/FileVersion:\s*"v0.${{ github.event.inputs.version_tag }}"/' version/versioninfo.json > version/versioninfo.json | |
sed -E 's/ProductVersion:\s*"[^"]+"/ProductVersion:\s*"v${{ github.event.inputs.version_tag }}"/' version/versioninfo.json > version/versioninfo.json | |
set PATH=${{ github.workspace }}\wix\tools;%PATH% | |
msbuild installer\installer.sln | |
- uses: actions/upload-artifact@v4 | |
with: | |
name: qpep_windows_b${{ github.run_id }} | |
path: build/installer.msi | |
- name: Prepare Tests | |
run: | | |
MKDIR unit | |
MKDIR cover | |
MKDIR report | |
go install github.com/jstemmer/go-junit-report/[email protected] | |
go install github.com/axw/gocov/[email protected] | |
go install github.com/matm/gocov-html/cmd/[email protected] | |
go install github.com/AlekSi/[email protected] | |
- name: Test | |
if: ${{ inputs.test_release }} | |
shell: bash | |
run: | | |
set -x | |
export WORKSPACE=$( echo "${{ github.workspace }}" | sed -e 's|\\|/|g' ) | |
go generate github.com/Project-Faster/qpep/windivert | |
for i in $(go list ./... | grep -E -v "${IGNORE_PACKAGES}" | sed -n -e 's|github.com\/Project-Faster\/qpep\/||p') | |
do | |
pushd $i | |
cp -r $WORKSPACE/windivert/x64/* . | |
go test -v -gcflags=-l -cover -c -o qpep.$(basename $PWD).test &> NUL || true | |
./qpep.$(basename $PWD).test -test.v -test.timeout 5m -test.coverprofile=$WORKSPACE/cover/$(basename $PWD).out &> unit_tests.out || true | |
grep -E "PASS|FAIL|SKIP" unit_tests.out || true | |
cat unit_tests.out | go-junit-report > $WORKSPACE/unit/$(basename $PWD).xml | |
popd | |
done | |
continue-on-error: true | |
- name: Publish Unit Test Results | |
uses: EnricoMi/publish-unit-test-result-action/windows/bash@v2 | |
if: ${{ inputs.test_release }} | |
with: | |
check_name: "Unit Tests - Windows Platform" | |
junit_files: "unit/*.xml" | |
create-release-tag: | |
needs: [ build-windows, build-linux, build-mac-os, docs ] | |
runs-on: ubuntu-latest | |
defaults: | |
run: | |
shell: bash | |
steps: | |
- name: Download Windows Artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: qpep_windows_b${{ github.run_id }} | |
- name: Download Linux Artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: qpep_linux_b${{ github.run_id }} | |
- name: Download MacOS Artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: qpep_macos_b${{ github.run_id }} | |
- name: Download UserManual Artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: qpep_user_manual_b${{ github.run_id }} | |
- name: Prepare archives | |
run: | | |
cd ${{ github.workspace }} | |
7z a -tzip qpep_windows_b${{ github.run_id }}.zip ${{ github.workspace }}/installer.msi | |
7z a -tzip qpep_linux_b${{ github.run_id }}.zip ${{ github.workspace }}/qpep | |
7z a -tzip qpep_macos_b${{ github.run_id }}.zip ${{ github.workspace }}/*.pkg | |
7z a -tzip qpep_user_manual_b${{ github.run_id }}.zip ${{ github.workspace }}/user_manual.pdf | |
- name: Create Release | |
id: create_release | |
uses: actions/create-release@latest | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
tag_name: v${{ github.event.inputs.version_tag }} | |
release_name: Release v${{ github.event.inputs.version_tag }} | |
body: | | |
${{ steps.Changelog.outputs.changelog }} | |
draft: ${{ inputs.test_release }} | |
prerelease: false | |
- name: Attach Windows Release Asset | |
id: upload-release-asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps | |
asset_path: qpep_windows_b${{ github.run_id }}.zip | |
asset_name: qpep_windows_v${{ github.event.inputs.version_tag }}_b${{ github.run_id }}.zip | |
asset_content_type: application/zip | |
- name: Attach Linux Release Asset | |
id: upload-linux-asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps | |
asset_path: qpep_linux_b${{ github.run_id }}.zip | |
asset_name: qpep_linux_v${{ github.event.inputs.version_tag }}_b${{ github.run_id }}.zip | |
asset_content_type: application/zip | |
- name: Attach MacOS Release Asset | |
id: upload-macos-asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps | |
asset_path: qpep_macos_b${{ github.run_id }}.zip | |
asset_name: qpep_macos_v${{ github.event.inputs.version_tag }}_b${{ github.run_id }}.zip | |
asset_content_type: application/zip | |
- name: Attach UserManual Release Asset | |
id: upload-usermanual-asset | |
uses: actions/upload-release-asset@v1 | |
env: | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
with: | |
upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps | |
asset_path: qpep_user_manual_b${{ github.run_id }}.zip | |
asset_name: qpep_user_manual_v${{ github.event.inputs.version_tag }}_b${{ github.run_id }}.zip | |
asset_content_type: application/zip |