Skip to content

Merge pull request #97 from CommitteeOfZero/cmake-dynamic-libs-packaging #356

Merge pull request #97 from CommitteeOfZero/cmake-dynamic-libs-packaging

Merge pull request #97 from CommitteeOfZero/cmake-dynamic-libs-packaging #356

Workflow file for this run

name: impacto
on:
push:
branches:
- "master"
tags:
- "*"
pull_request_target:
branches:
- "master"
workflow_dispatch:
env:
BRANCH_NAME: ${{ github.head_ref || github.ref_name }}
jobs:
lint:
name: Run linters
permissions:
checks: write
contents: write
runs-on: ubuntu-latest
outputs:
commitid: ${{ steps.commit.outputs.commitid }}
steps:
- name: Check out Git repository
uses: actions/checkout@v4
- name: Install ClangFormat
run: sudo apt-get install -y clang-format
- name: Run linters
uses: wearerequired/lint-action@v2
with:
auto_fix: true
clang_format: true
clang_format_auto_fix: true
continue_on_error: false
- name: Get latest commit
id: commit
run: |
SHA=$(git rev-parse HEAD)
echo "::set-output name=commitid::$SHA"
job-matrix:
name: ${{ matrix.os_name }}
runs-on: ${{ matrix.os }}
timeout-minutes: 120
needs: lint
permissions:
contents: read
strategy:
fail-fast: false
matrix:
include:
- os: windows-latest
os_name: windows
triplet: x64-windows-release
host_triplet: x64-windows-release
- os: ubuntu-latest
os_name: linux
triplet: x64-linux-ci
host_triplet: x64-linux-ci
- os: macos-latest
os_name: macos-arm64
triplet: arm64-osx-ci
host_triplet: arm64-osx-ci
- os: macos-13
os_name: macos-x64
triplet: x64-osx-ci
host_triplet: x64-osx-ci
- os: ubuntu-latest
os_name: android
triplet: arm64-android-ci
host_triplet: x64-linux-ci
env:
VCPKG_DEFAULT_TRIPLET: ${{ matrix.triplet }}
vcpkgCommitId: '0f88ecb8528605f91980b90a2c5bad88e3cb565f'
PresetName: ${{ (matrix.os_name == 'android') && 'ci-release-android' || 'ci-release' }}
steps:
- uses: actions/checkout@v3
with:
ref: ${{ needs.lint.outputs.commitid }}
- name: Setup Android Environment
if: matrix.os_name == 'android'
run: |
export ABI=arm64-v8a
export MINSDKVERSION=28
echo "MINSDKVERSION=$MINSDKVERSION" >> $GITHUB_ENV
echo "ABI=$ABI" >> $GITHUB_ENV
echo "CC=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin/clang --target=aarch64-linux-android$MINSDKVERSION -fPIC" >> $GITHUB_ENV
echo "VULKAN_SDK=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/sysroot/usr" >> $GITHUB_ENV
shell: bash
- name: Set up Java
uses: actions/setup-java@v4
if: matrix.os_name == 'android'
with:
java-version: 17
distribution: "temurin"
cache: 'gradle'
- 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: 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' || matrix.os_name == 'android'
- 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: ${{ env.PresetName }}
configurePresetAdditionalArgs: >-
[
'-DVCPKG_TARGET_TRIPLET=${{ matrix.triplet }}',
'-DVCPKG_HOST_TRIPLET=${{ matrix.host_triplet }}',
]
buildPreset: ${{ env.PresetName }}
- name: Copy Shaders
run: cp -r src/shaders "${{ github.workspace }}/release/${{ env.PresetName }}"
shell: bash
- name: Copy docs
run: |
cp THIRDPARTY.md README.md LICENSE "${{ github.workspace }}/release/${{ env.PresetName }}"
shell: bash
- name: Build Android
if: matrix.os_name == 'android'
run: |
pushd "${{ github.workspace }}/release/${{ env.PresetName }}"
ls
mkdir -p "${{ github.workspace }}/android/app/src/main/assets/"
mv profiles "${{ github.workspace }}/android/app/src/main/assets/"
mv games "${{ github.workspace }}/android/app/src/main/assets/"
mv shaders "${{ github.workspace }}/android/app/src/main/assets/"
mkdir -p "${{ github.workspace }}/android/app/src/main/jniLibs/$ABI/"
popd
pushd "${{ github.workspace }}/android/"
./gradlew assemble
find "${{ github.workspace }}/android" -name "*.apk"
cp "${{ github.workspace }}/android/distribution/android/app/outputs/apk/debug/app-debug.apk" "${{ github.workspace }}/release/${{ env.PresetName }}/impacto-debug.apk"
cp "${{ github.workspace }}/android/distribution/android/app/outputs/apk/release/app-release-unsigned.apk" "${{ github.workspace }}/release/${{ env.PresetName }}/impacto-unsigned.apk"
shell: bash
- name: Archive Artifacts
run: |
7z u impacto-${{ matrix.os_name }}-${{ vars.VERSION }}${{ github.run_number }}-${{ github.sha }}.zip release/${{ env.PresetName }}/*
- name: Upload Artifact
uses: actions/[email protected]
with:
path: impacto-${{ matrix.os_name }}-${{ vars.VERSION }}${{ github.run_number }}-${{ github.sha }}.zip
name: release-${{ matrix.os_name }}
switch:
runs-on: ubuntu-latest
timeout-minutes: 120
needs: lint
permissions:
contents: read
container:
image: ghcr.io/committeeofzero/impacto-switch:latest
steps:
- uses: actions/checkout@v3
with:
ref: ${{ needs.lint.outputs.commitid }}
- name: Run build
run: |-
cmake . -DCMAKE_TOOLCHAIN_FILE=HorizonNX.toolchain
make -j2
elf2nro impacto impacto.nro
mkdir -p "release/ci-release"
cp impacto.nro "release/ci-release"
cp -r profiles "release/ci-release"
cp -r games "release/ci-release"
- name: Copy Shaders
run: cp -r src/shaders "release/${{ env.PresetName }}"
shell: bash
- name: Copy docs
run: |
cp THIRDPARTY.md README.md LICENSE "release/${{ env.PresetName }}"
shell: bash
- name: Archive Artifacts
run: |
7z u impacto-switch-${{ vars.VERSION }}${{ github.run_number }}-${{ github.sha }}.zip release/ci-release/*
- name: Upload Artifact
uses: actions/[email protected]
with:
path: impacto-switch-${{ vars.VERSION }}${{ github.run_number }}-${{ github.sha }}.zip
name: release-switch
publish_artifacts:
name: Publish Artifacts
runs-on: ubuntu-22.04
permissions:
contents: write
needs:
- job-matrix
- switch
if: needs.job-matrix.result == 'success' && needs.switch.result == 'success' && github.event_name != 'pull_request_target' && ((startsWith(github.ref, 'refs/tags') || github.ref_name == '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_name == 'master')
with:
Name: Latest ${{ env.BRANCH_NAME }} build
tag_name: ${{ vars.VERSION }}${{ github.run_number }}
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:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
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
`${{ github.event.head_commit.message }} (${{ github.sha }})`
from branch `${{ env.BRANCH_NAME }}` has been successfully built.
Release URL:
https://github.com/CommitteeOfZero/impacto/releases/tag/${{ vars.VERSION }}${{ github.run_number }}
Details:
${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}
notify_fail:
name: Notify failure
runs-on: ubuntu-22.04
needs:
- job-matrix
- switch
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 | IN("macos-arm64", "linux", "windows", "switch", "macos-x64", "android")) |
"\(.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:
webhook-url: ${{ secrets.DISCORD_WEBHOOK_URL }}
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
`${{ github.event.head_commit.message }} (${{ github.sha }})`
from branch `${{ env.BRANCH_NAME }}` has failed build.
Job status:
windows: ${{steps.get_jobs_status.outputs.windows}}
linux: ${{steps.get_jobs_status.outputs.linux}}
macos-arm64: ${{steps.get_jobs_status.outputs.macos-arm64}}
macos-x64: ${{steps.get_jobs_status.outputs.macos-x64}}
switch: ${{steps.get_jobs_status.outputs.switch}}
android: ${{steps.get_jobs_status.outputs.android}}
Details:
${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}