mirror of
https://github.com/valinet/ExplorerPatcher.git
synced 2024-11-23 23:21:08 +01:00
243 lines
9.4 KiB
YAML
243 lines
9.4 KiB
YAML
# references:
|
|
# https://trstringer.com/github-actions-multiline-strings/
|
|
# https://trstringer.com/github-actions-create-release-upload-artifacts/
|
|
# https://github.com/Speedy37/sws/blob/444c67157a98652c4e7ffd3b6d6bbfb664071926/.github/workflows/msbuild.yml
|
|
# https://stackoverflow.com/questions/58886293/getting-current-branch-and-commit-hash-in-github-action
|
|
|
|
name: Build
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- '**'
|
|
tags-ignore:
|
|
- '**'
|
|
pull_request:
|
|
branches:
|
|
- '**'
|
|
tags-ignore:
|
|
- '**'
|
|
workflow_dispatch:
|
|
inputs:
|
|
ref:
|
|
description: 'Commit'
|
|
required: true
|
|
config:
|
|
description: 'Configuration'
|
|
required: false
|
|
build_dir:
|
|
description: 'Build dir'
|
|
required: false
|
|
|
|
env:
|
|
SOLUTION_FILE_PATH: .
|
|
BUILD_CONFIGURATION: Release
|
|
|
|
jobs:
|
|
build:
|
|
runs-on: windows-latest
|
|
|
|
steps:
|
|
- name: Print inputs
|
|
shell: bash
|
|
run: |
|
|
echo "ref: ${{ github.event.inputs.ref }}"
|
|
echo "config: ${{ github.event.inputs.config }}"
|
|
echo "build_dir: ${{ github.event.inputs.build_dir }}"
|
|
|
|
- name: Checkout latest build and submodules
|
|
uses: actions/checkout@v4
|
|
if: github.event.inputs.ref == ''
|
|
with:
|
|
submodules: recursive
|
|
|
|
- name: Checkout specific build and submodules
|
|
uses: actions/checkout@v4
|
|
if: github.event.inputs.ref != ''
|
|
with:
|
|
ref: ${{ github.event.inputs.ref }}
|
|
submodules: recursive
|
|
|
|
- name: Add MSBuild to PATH
|
|
uses: microsoft/setup-msbuild@v2
|
|
|
|
- name: Declare some variables
|
|
id: vars
|
|
shell: bash
|
|
run: |
|
|
echo "branch=$(echo ${GITHUB_REF#refs/heads/})" >> $GITHUB_OUTPUT
|
|
echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
|
|
|
- name: Enable SimpleWindowSwitcher support for newer Windows SDKs
|
|
shell: cmd
|
|
run: |
|
|
cd libs/sws
|
|
C:\msys64\usr\bin\wget.exe https://github.com/valinet/sws/commit/972acb76d1e6429133c92ed7cdefd29b9a2c6179.patch
|
|
C:\msys64\usr\bin\dos2unix.exe 972acb76d1e6429133c92ed7cdefd29b9a2c6179.patch
|
|
C:\msys64\usr\bin\dos2unix.exe SimpleWindowSwitcher/sws_def.h
|
|
C:\msys64\usr\bin\patch.exe -N SimpleWindowSwitcher/sws_def.h 972acb76d1e6429133c92ed7cdefd29b9a2c6179.patch
|
|
C:\msys64\usr\bin\unix2dos.exe SimpleWindowSwitcher/sws_def.h
|
|
exit /b 0
|
|
|
|
- name: Setup NuGet
|
|
uses: nuget/setup-nuget@v2
|
|
|
|
- name: Restore NuGet packages
|
|
run: |
|
|
nuget restore ExplorerPatcher.sln
|
|
|
|
- name: Build dependencies
|
|
shell: cmd
|
|
run: |
|
|
BuildDependencies%BUILD_CONFIGURATION%.bat
|
|
|
|
- name: Download ep_taskbar
|
|
uses: robinraju/release-downloader@v1
|
|
with:
|
|
repository: ExplorerPatcher/ep_taskbar_releases
|
|
fileName: ep_taskbar.*.dll
|
|
latest: true
|
|
out-file-path: build/Release
|
|
|
|
# build/Release/ep_taskbar.*.amd64.dll -> build/Release/x64/ep_taskbar.*.dll
|
|
# build/Release/ep_taskbar.*.arm64.dll -> build/Release/ARM64/ep_taskbar.*.dll
|
|
- name: Move ep_taskbar
|
|
shell: bash
|
|
run: |
|
|
if ls build/Release/ep_taskbar.*.amd64.dll 1> /dev/null 2>&1; then
|
|
mkdir -p build/Release/x64
|
|
for file in build/Release/ep_taskbar.*.amd64.dll; do
|
|
mv "$file" "build/Release/x64/$(basename "$file" .amd64.dll).dll"
|
|
done
|
|
fi
|
|
|
|
if ls build/Release/ep_taskbar.*.arm64.dll 1> /dev/null 2>&1; then
|
|
mkdir -p build/Release/ARM64
|
|
for file in build/Release/ep_taskbar.*.arm64.dll; do
|
|
mv "$file" "build/Release/ARM64/$(basename "$file" .arm64.dll).dll"
|
|
done
|
|
fi
|
|
|
|
- name: Build EP IA-32
|
|
if: github.event.inputs.config == ''
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
run: |
|
|
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=IA-32 ${{env.SOLUTION_FILE_PATH}}
|
|
|
|
- name: Build EP amd64
|
|
if: github.event.inputs.config == ''
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
run: |
|
|
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=amd64 ${{env.SOLUTION_FILE_PATH}}
|
|
|
|
- name: Build EP arm64
|
|
if: github.event.inputs.config == ''
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
run: |
|
|
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=arm64 /p:WithArm64XBinaries=true ${{env.SOLUTION_FILE_PATH}}
|
|
|
|
- name: Build EP custom
|
|
if: github.event.inputs.config != ''
|
|
working-directory: ${{env.GITHUB_WORKSPACE}}
|
|
run: |
|
|
msbuild /m /p:Configuration=${{env.BUILD_CONFIGURATION}} /p:Platform=${{ github.event.inputs.config }} ${{env.SOLUTION_FILE_PATH}}
|
|
|
|
- name: Create expected build directory
|
|
if: github.event.inputs.build_dir != ''
|
|
shell: bash
|
|
run: |
|
|
mkdir build
|
|
cp -r ${{ github.event.inputs.build_dir }}/Release build/Release
|
|
|
|
- name: Generate dxgi.dll
|
|
shell: bash
|
|
run: |
|
|
if [[ -f "build/Release/x64/ExplorerPatcher.amd64.dll" ]]; then cp build/Release/x64/ExplorerPatcher.amd64.dll build/Release/x64/dxgi.dll; fi
|
|
if [[ -f "build/Release/ARM64/ExplorerPatcher.arm64.dll" ]]; then cp build/Release/ARM64/ExplorerPatcher.arm64.dll build/Release/ARM64/dxgi.dll; fi
|
|
|
|
- name: Patch amd64 setup
|
|
shell: cmd
|
|
run: |
|
|
if exist "build\Release\x64\ExplorerPatcher.amd64.dll" (
|
|
"build\Release\x64\ep_setup_patch.exe" "build\Release\x64\ExplorerPatcher.amd64.dll" "build\Release\x64\ep_setup.exe"
|
|
)
|
|
exit /b 0
|
|
|
|
- name: Patch arm64 setup
|
|
shell: cmd
|
|
run: |
|
|
if exist "build\Release\ARM64\ExplorerPatcher.arm64.dll" (
|
|
"build\Release\x64\ep_setup_patch.exe" "build\Release\ARM64\ExplorerPatcher.arm64.dll" "build\Release\ARM64\ep_setup.exe"
|
|
)
|
|
exit /b 0
|
|
|
|
- name: Upload artifacts
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: ep_bin_multi_${{ steps.vars.outputs.sha_short }}_${{ steps.vars.outputs.branch }}
|
|
path: |
|
|
build/Release/
|
|
|
|
# build/Release/x64/ep_setup.exe -> build/Release/ep_setup.exe
|
|
# build/Release/ARM64/ep_setup.exe -> build/Release/ep_setup_arm64.exe
|
|
- name: Stage files for release
|
|
if: github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
|
shell: bash
|
|
run: |
|
|
if [ -d "build/Release/x64" ] && ls build/Release/x64/ep_setup.exe 1> /dev/null 2>&1; then
|
|
cp build/Release/x64/ep_setup.exe build/Release/ep_setup.exe
|
|
fi
|
|
if [ -d "build/Release/ARM64" ] && ls build/Release/ARM64/ep_setup.exe 1> /dev/null 2>&1; then
|
|
cp build/Release/ARM64/ep_setup.exe build/Release/ep_setup_arm64.exe
|
|
fi
|
|
|
|
- name: Generate release name
|
|
shell: bash
|
|
working-directory: build/Release/x64
|
|
if: github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
|
run: |
|
|
echo "data=$(./ep_generate_release_name.exe)" >> $GITHUB_OUTPUT
|
|
id: release_name
|
|
|
|
- name: Generate release notes
|
|
shell: bash
|
|
working-directory: build/Release/x64
|
|
if: github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
|
run: |
|
|
echo "data<<EP_RELEASE_DESCRIPTION_DELIM" >> $GITHUB_OUTPUT
|
|
echo "$(./ep_generate_release_description.exe ${{ steps.vars.outputs.sha_short }} ${{ steps.vars.outputs.branch }} ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }})" >> $GITHUB_OUTPUT
|
|
echo "EP_RELEASE_DESCRIPTION_DELIM" >> $GITHUB_OUTPUT
|
|
id: release_description
|
|
|
|
- name: Create/update release (valinet)
|
|
uses: softprops/action-gh-release@v2
|
|
if: github.repository_owner == 'valinet' && github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
|
id: create_release
|
|
with:
|
|
draft: false
|
|
prerelease: ${{ !startsWith(github.event.head_commit.message, 'rel_') }}
|
|
name: ${{ steps.release_name.outputs.data }}
|
|
tag_name: ${{ steps.release_name.outputs.data }}_${{ steps.vars.outputs.sha_short }}
|
|
body: ${{ steps.release_description.outputs.data }}
|
|
files: |
|
|
build/Release/ep_setup.exe
|
|
build/Release/ep_setup_arm64.exe
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.PAT }}
|
|
|
|
- name: Create/update release (forks)
|
|
uses: softprops/action-gh-release@v2
|
|
if: github.repository_owner != 'valinet' && github.ref == 'refs/heads/master' && github.event.inputs.ref == ''
|
|
id: create_release_fork
|
|
with:
|
|
draft: false
|
|
prerelease: ${{ !startsWith(github.event.head_commit.message, 'rel_') }}
|
|
name: ${{ steps.release_name.outputs.data }}
|
|
tag_name: ${{ steps.release_name.outputs.data }}_${{ steps.vars.outputs.sha_short }}
|
|
body: ${{ steps.release_description.outputs.data }}
|
|
files: |
|
|
build/Release/ep_setup.exe
|
|
build/Release/ep_setup_arm64.exe
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|