servatrice/.github/workflows/windows-builds.yml
Joel Bethke 8845a23d5d
CI: Fix up Windows builds and add GitHub Actions for Windows (#4193)
* ci: Add vcpkg submodule

* cmake: Fix NSIS not detecting platform arch

* cmake: Add QTDIR(64|32)

This change adds a new var for QTDIR(32|64) which makes it easier
to specify a specific directory for Qt, rather than having to edit
the prefix path directly, which can get pretty messy. Functionally,
this shouldn't affect any builds that are already finding Qt as
part of path, and should not affect Linux/macOS.

* cmake: Bump min cmake version

* ci: Add GitHub Actions for Windows
2020-11-30 23:54:50 -05:00

214 lines
7.8 KiB
YAML

name: 'Build on Windows'
on:
push:
branches:
- master
paths-ignore:
- '**.md'
tags:
- '*'
pull_request:
branches:
- master
paths-ignore:
- '**.md'
jobs:
win64:
name: 'Windows 64-bit'
runs-on: [windows-latest]
env:
QT_VERSION: '5.12.9'
CMAKE_GENERATOR: "Visual Studio 16 2019"
steps:
- name: 'Add msbuild to PATH'
uses: microsoft/setup-msbuild@v1.0.2
- name: 'Checkout'
uses: actions/checkout@v2
with:
submodules: 'recursive'
- name: 'Get Cockatrice git info'
shell: bash
working-directory: ${{ github.workspace }}
run: |
git fetch --prune --unshallow
echo "GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
echo "GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
echo "GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
- name: 'Restore Qt 64-bit from cache'
id: cache-qt32
uses: actions/cache@v2
with:
path: |
${{ runner.workspace }}/Qt64
key: ${{ runner.os }}-QtCache-64bit
- name: 'Install 64-bit Qt'
uses: jurplel/install-qt-action@v2
with:
cached: ${{ steps.cache-qt.outputs.cache-hit }}
version: '${{ env.QT_VERSION }}'
arch: 'win64_msvc2017_64'
dir: ${{ runner.workspace }}/Qt64
- name: 'Restore or setup vcpkg'
uses: lukka/run-vcpkg@v6
with:
vcpkgArguments: '@${{ github.workspace }}/vcpkg.txt'
vcpkgDirectory: '${{ github.workspace }}/vcpkg'
appendedCacheKey: ${{ hashFiles('**/vcpkg.txt') }}
vcpkgTriplet: x64-windows
- name: 'Configure Cockatrice 64-bit'
working-directory: ${{ github.workspace }}
run: |
New-Item build64 -type directory -force
cd build64
cmake .. -G "${{ env.CMAKE_GENERATOR }}" -A "x64" -DQTDIR="${{ runner.workspace }}\Qt64\Qt\5.12.9\msvc2017_64" -DCMAKE_BUILD_TYPE="Release" -DWITH_SERVER=1 -DTEST=t
- name: 'Build Cockatrice 64-bit'
working-directory: ${{ github.workspace }}
run: msbuild /m /p:Configuration=Release .\build64\Cockatrice.sln
- name: 'Build Cockatrice Installer Package 64-bit'
working-directory: ${{ github.workspace }}
run: |
cd build64
msbuild /m /p:Configuration=Release PACKAGE.vcxproj
cp *.exe ../Cockatrice-${{ env.GIT_TAG }}-${{ env.GIT_HASH }}-64bit-installer.exe
- name: 'Run Tests'
working-directory: ${{ github.workspace }}/build64
run: ctest -T Test -C Release
- name: 'Publish'
if: success()
uses: actions/upload-artifact@v2
with:
name: 'Cockatrice-${{ env.GIT_TAG }}-64bit'
path: './*.exe'
win32:
name: 'Windows 32-bit'
runs-on: [windows-latest]
env:
QT_VERSION: '5.12.9'
CMAKE_GENERATOR: "Visual Studio 16 2019"
steps:
- name: 'Add msbuild to PATH'
uses: microsoft/setup-msbuild@v1.0.2
- name: 'Checkout'
uses: actions/checkout@v2
with:
submodules: 'recursive'
- name: 'Get Cockatrice git info'
shell: bash
working-directory: ${{ github.workspace }}
run: |
git fetch --prune --unshallow
echo "GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
echo "GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
echo "GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
- name: 'Restore Qt from cache'
id: cache-qt32
uses: actions/cache@v2
with:
path: |
${{ runner.workspace }}/Qt32
key: ${{ runner.os }}-QtCache-32bit
- name: 'Install 32-bit Qt'
uses: jurplel/install-qt-action@v2
with:
cached: ${{ steps.cache-qt.outputs.cache-hit }}
version: '${{ env.QT_VERSION }}'
arch: 'win32_msvc2017'
dir: ${{ runner.workspace }}/Qt32
- name: 'Restore or setup vcpkg'
uses: lukka/run-vcpkg@v6
with:
vcpkgArguments: '@${{ github.workspace }}/vcpkg.txt'
vcpkgDirectory: '${{ github.workspace }}/vcpkg'
appendedCacheKey: ${{ hashFiles('**/vcpkg.txt') }}
vcpkgTriplet: x86-windows
- name: 'Configure Cockatrice 32-bit'
working-directory: ${{ github.workspace }}
run: |
New-Item build32 -type directory -force
cd build32
cmake .. -G "${{ env.CMAKE_GENERATOR }}" -A "Win32" -DQTDIR="${{ runner.workspace }}\Qt32\Qt\5.12.9\msvc2017" -DCMAKE_BUILD_TYPE="Release" -DWITH_SERVER=1 -DTEST=1
- name: 'Build Cockatrice 32-bit'
working-directory: ${{ github.workspace }}
run: msbuild /m /p:Configuration=Release .\build32\Cockatrice.sln
- name: 'Build Cockatrice Installer Package 32-bit'
working-directory: ${{ github.workspace }}
run: |
cd build32
msbuild /m /p:Configuration=Release PACKAGE.vcxproj
cp *.exe ../Cockatrice-${{ env.GIT_TAG }}-${{ env.GIT_HASH }}-32bit-installer.exe
- name: 'Run Tests'
working-directory: ${{ github.workspace }}/build32
run: ctest -T Test -C Release
- name: 'Publish'
if: success()
uses: actions/upload-artifact@v2
with:
name: 'Cockatrice-${{ env.GIT_TAG }}-32bit'
path: './*.exe'
make-release:
name: 'Create and upload release'
runs-on: [ubuntu-latest]
if: github.event_name == 'push' && contains(github.ref, 'refs/tags/')
needs: [win32,win64]
steps:
- name: 'Checkout'
uses: actions/checkout@v2
with:
submodules: 'recursive'
- name: 'Fetch git tags and generate file name'
shell: bash
run: |
git fetch --prune --unshallow
echo "GIT_BRANCH=$(git rev-parse --abbrev-ref HEAD)" >> $GITHUB_ENV
echo "GIT_HASH=$(git rev-parse --short HEAD)" >> $GITHUB_ENV
echo "GIT_TAG=$(git describe --tags --abbrev=0)" >> $GITHUB_ENV
- name: 'Checking if beta'
if: contains(env.GIT_TAG, 'beta')
shell: bash
run: |
echo 'IS_BETA=true' >> $GITHUB_ENV
- name: 'Checking if beta'
if: "!contains(env.GIT_TAG, 'beta')"
shell: bash
run: |
echo 'IS_BETA=false' >> $GITHUB_ENV
- name: 'Create Release'
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ env.GIT_TAG }}
release_name: Cockatrice ${{ env.GIT_TAG }}
draft: true
prerelease: ${{ env.IS_BETA }}
- name: 'Generate filenames'
shell: bash
run: |
FILE_NAME=Cockatrice-${{ env.GIT_TAG }}-${{ env.GIT_HASH }}
echo "FILE_NAME=${FILE_NAME}" >> $GITHUB_ENV
- name: 'Download artifacts'
uses: actions/download-artifact@v2
with:
path: ./
- name: 'Upload 32bit to release'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./Cockatrice-${{ env.GIT_TAG }}-32bit/${{ env.FILE_NAME }}-32bit-installer.exe
asset_name: Cockatrice-${{ env.GIT_TAG }}-32bit-installer.exe
asset_content_type: application/octet-stream
- name: 'Upload 64bit to release'
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./Cockatrice-${{ env.GIT_TAG }}-64bit/${{ env.FILE_NAME }}-64bit-installer.exe
asset_name: Cockatrice-${{ env.GIT_TAG }}-64bit-installer.exe
asset_content_type: application/octet-stream