Skip to content

Commit

Permalink
Convert azure pipeline to github actions.
Browse files Browse the repository at this point in the history
Make better enums constexpr since we use VS2019+ now.
Build deps now checks if atrac9 is cached and we're in CI, If it is, skip upgrade.
CMake to use Ninja on Windows for faster builds.

Added CI options for macOS ARM64 and x86_64 builds.
CI uses vcpkg for dependencies on Windows, Linux and macOS.
Added vcpkg.json for manifest based dependency management.
Added CMakePresets.json for easier default CMake configuration,
users can supply CMakeUsersPresets.json if they want their own.
  • Loading branch information
Dextinfire committed Sep 8, 2024
1 parent 67485b8 commit 85e64c7
Show file tree
Hide file tree
Showing 9 changed files with 349 additions and 512 deletions.
206 changes: 206 additions & 0 deletions .github/workflows/pipeline.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,206 @@
name: impacto
on:
push:
branches:
- "*"
- "!separate_renderer"
tags:
- "*"

env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}

jobs:
get_version:
name: Get Version
runs-on: ubuntu-latest
outputs:
version: ${{ steps.version.outputs.version }}
steps:
- uses: actions/checkout@v3
- name: Git Version
id: version
uses: codacy/[email protected]
job-matrix:
name: ${{ matrix.os_name }}
runs-on: ${{ matrix.os }}
needs: get_version
timeout-minutes: 120
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest, macos-13]
include:
- os: windows-latest
os_name: windows
triplet: x64-windows-release
- os: ubuntu-latest
os_name: linux
triplet: x64-linux-dynamic
- os: macos-latest
os_name: macos-arm64
triplet: arm64-osx-dynamic
- os: macos-13
os_name: macos-x64
triplet: x64-osx-dynamic
env:
VCPKG_DEFAULT_TRIPLET: ${{ matrix.triplet }}
vcpkgCommitId: '0f88ecb8528605f91980b90a2c5bad88e3cb565f'

steps:
- uses: actions/checkout@v3

- name: Cache LibAtrac9
uses: actions/cache@v3
with:
key: libatrac9 | ${{ matrix.os_name }}
path: vendor/LibAtrac9

- uses: lukka/get-cmake@latest
- name: Setup vcpkg
uses: lukka/run-vcpkg@v11
id: runvcpkg
with:
vcpkgDirectory: '${{ runner.workspace }}/build/vcpkg'
vcpkgGitCommitId: '${{ env.vcpkgCommitId }}'
vcpkgJsonGlob: '**/vcpkg.json'
- name: Build Atrac9 Windows
if: matrix.os == 'windows-latest'
run: |
./build-deps.ps1 -Arg1 x64
shell: pwsh
- name: Setup Dependencies Linux/MacOS
if: contains(matrix.os_name, 'macos') || contains(matrix.os_name, 'linux')
run: |-
pushd vendor
if [ ! -d "LibAtrac9" ]; then
git clone https://github.com/Thealexbarney/LibAtrac9.git --depth 1
fi
cd LibAtrac9/C
if [[ "${{ matrix.os_name }}" == "macos"* ]]; then
sed -i '' -e 's/,--version-script=libatrac9.version//g' Makefile
fi
make
mkdir -p ../include/libatrac9
mkdir -p ../libs
cp bin/libatrac9.a ../libs/
cp src/libatrac9.h ../include/libatrac9/
popd
echo "LIBATRAC9DIR=${{ github.workspace }}/vendor/LibAtrac9" >> $GITHUB_ENV
- name: Install Dependencies Linux
run: sudo apt-get install nasm libx11-dev libxft-dev libxext-dev libwayland-dev libxkbcommon-dev libegl1-mesa-dev libibus-1.0-dev libxrandr-dev
if: matrix.os_name == 'linux'
- name: Install Dependencies Mac
run: brew install nasm
if: contains(matrix.os_name, 'macos')
- name: Run CMake with vcpkg.json manifest
uses: lukka/run-cmake@v10
with:
cmakeListsTxtPath: '${{ github.workspace }}/CMakeLists.txt'
configurePreset: ci-release
configurePresetAdditionalArgs: "['-DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }}', '-DVCPKG_HOST_TRIPLET=${{ matrix.triplet }}', '-DVCPKG_BUILD_TYPE=release']"
buildPreset: CI-Build

- name: Copy docs
run: |
cp THIRDPARTY.md README.md LICENSE "${{ github.workspace }}/release/ci-release"
shell: bash
- name: Archive Artifacts
run: |
7z u impacto-${{ matrix.os_name }}-${{ needs.get_version.outputs.version }}-${{ github.sha }}.zip release/ci-release/*
- name: Upload Artifact
uses: actions/[email protected]
with:
path: impacto-${{ matrix.os_name }}-${{ needs.get_version.outputs.version }}-${{ github.sha }}.zip
name: release-${{ matrix.os_name }}


publish_artifacts:
name: Publish Artifacts
runs-on: ubuntu-22.04
needs:
- get_version
- job-matrix
if: (needs.job-matrix.result == 'success') && (startsWith(github.ref, 'refs/tags') || github.ref == 'refs/heads/master')
steps:
- uses: actions/download-artifact@v4
with:
pattern: release-*
path: "${{ github.workspace }}/release"
merge-multiple: true
- name: Upload Release
uses: softprops/action-gh-release@v2
if: startsWith(github.ref, 'refs/tags') || (github.ref == 'refs/heads/master')
with:
Name: Latest ${{ env.BRANCH_NAME }} build
tag_name: ${{ needs.get_version.outputs.version }}
files:
${{ github.workspace }}/release/*.zip
prerelease: true
fail_on_unmatched_files: true
target_commitish: ${{ github.sha }}
- name: Get current date
id: date
run: echo "NOW=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_ENV

# - uses: tsickert/[email protected]
# with:
# thread-id: ${{ secrets.discordChannelId }}
# webhook-url: ${{ secrets.discordWebhookKey }}
# username: IMPACTO
# avatar-url: https://cdn.discordapp.com/emojis/766988033127481344.png
# embed-title : "${{ github.event.commits[0].author.name }}"
# embed-color: 3659647
# embed-timestamp: ${{ env.NOW }}
# embed-description: >
# "Commit\n
# `${{ github.event.head_commit.message }} (${{ github.sha }})`\n
# from branch `${{ env.BRANCH_NAME }}` has been successfully built.\n\n
# Release URL:\n
# https://github.com/CommitteeOfZero/impacto/releases/tag/${{ needs.get_version.outputs.version }}\n\n
# Details:\n
# ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
notify_fail:
name: Notify failure
runs-on: ubuntu-22.04
needs:
- job-matrix
if: always() && (contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled'))
steps:
- uses: actions/checkout@v2
- name: 'Get Jobs Status'
id: get_jobs_status
run: |
echo "Fetch workflow run jobs"
json_data=$(curl -s -H "Authorization: Bearer ${{ github.token }}" \
"https://api.github.com/repos/${{ github.repository }}/actions/runs/${{ github.run_id }}/jobs")
name_conclusion_array=($(echo "$json_data" | jq -r '.jobs[] | select(.name | startswith("job-matrix")) | "\(.name).\(.conclusion)"'))
for item in "${name_conclusion_array[@]}"; do
IFS='.' read -r name conclusion <<< "$item"
echo "$name=$conclusion" >> $GITHUB_OUTPUT
done
- name: Get current date
id: date
run: echo "NOW=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_OUTPUT

# - uses: tsickert/[email protected]
# with:
# thread-id: ${{ secrets.discordChannelId }}
# webhook-url: ${{ secrets.discordWebhookKey }}
# username: IMPACTO
# avatar-url: https://cdn.discordapp.com/emojis/766988033127481344.png
# embed-title : "${{ github.event.commits[0].author.name }}"
# embed-color: 16711680
# embed-timestamp: ${{ steps.date.outputs.NOW }}
# embed-description: >
# "Commit\n
# `${{ github.event.head_commit.message }} (${{ github.sha }})`\n
# from branch `${{ env.BRANCH_NAME }}` has failed build.\n\n
# Job status:\n

# ${{join(steps.get_jobs_status.outputs.*, '\n')}}\n\n
# Details:\n
# ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ bld/
[Ll]og/
[Ii]nstall/
cmake-build-*/
impacto-build/

# Visual Studio 2015 cache/options directory
.vs/
Expand Down Expand Up @@ -274,5 +275,6 @@ __pycache__/
###

/CMakeSettings.json
CMakeUserPresets.json
vendor/LibAtrac9
vendor/imgui
4 changes: 0 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -1012,10 +1012,6 @@ if (EMSCRIPTEN)
set(CMAKE_EXECUTABLE_SUFFIX ".html")
endif ()

if (MSVC)
add_definitions(-DBETTER_ENUMS_NO_CONSTEXPR) # broken in MSVC 2017 apparently
endif ()

if (NX)
set_property(TARGET impacto PROPERTY NO_SYSTEM_FROM_IMPORTED ON) # to avoid -isystem
add_definitions(-DENV64BIT)
Expand Down
70 changes: 70 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 23
},
"configurePresets": [
{
"name": "ninja-multi-default",
"description": "Multi-Config Ninja Configure Preset",
"hidden": false,
"generator": "Ninja Multi-Config",
"binaryDir": "impacto-build/${presetName}",
"installDir": "install/${presetName}",
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"cacheVariables": {
"CMAKE_EXPORT_COMPILE_COMMANDS": "YES"
}
},
{
"name": "ci-release",
"description": "Release build for CI",
"hidden": false,
"generator": "Ninja",
"binaryDir": "ci-build/${presetName}",
"installDir": "release/${presetName}",
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
}
],
"buildPresets": [
{
"name": "CI-Build",
"description": "x64 Release",
"configurePreset": "ci-release",
"targets": [
"install"
]
},
{
"name": "x64-Release-Symbols",
"description": "x64 Release with Debug Symbols",
"configurePreset": "ninja-multi-default",
"configuration": "RelWithDebInfo",
"targets": [
"install"
]
},
{
"name": "x64-Release",
"description": "x64 Release",
"configurePreset": "ninja-multi-default",
"configuration": "Release",
"targets": [
"install"
]
},
{
"name": "x64-Debug",
"description": "x64 Debug",
"configurePreset": "ninja-multi-default",
"configuration": "Debug",
"targets": [
"install"
]
}
]
}
Loading

0 comments on commit 85e64c7

Please sign in to comment.