Skip to content

Update GitHub Actions #5

Update GitHub Actions

Update GitHub Actions #5

Workflow file for this run

name: Build
on:
push:
branches:
- 'main'
- 'alpha'
- 'beta'
pull_request:
jobs:
build:
name: Build
runs-on: windows-2019
concurrency:
group: ukcp-build-${{ github.ref }}
cancel-in-progress: true
steps:
- name: Checkout Code and Submodules
uses: actions/checkout@v2
with:
submodules: recursive
# Environment things
- name: Set up Visual Studio Shell
uses: egor-tensin/vs-shell@v2
with:
arch: x86
- name: Check Clang Version
run: clang-cl --version
- name: Setup Ninja
uses: seanmiddleditch/gha-setup-ninja@master
# cURL
- name: Cache cURL
id: cache-curl
uses: actions/cache@v4
with:
path: "C:\\hostedtoolcache\\windows\\libcurl"
key: "ukcp-curl-build"
- name: Download and Build cURL
if: steps.cache-curl.outputs.cache-hit != 'true'
env:
CURL_DOWNLOAD_URL: "https://github.com/curl/curl/releases/download/curl-7_76_1/curl-7.76.1.zip"
CURL_VERSION: 7.76.1
run: |
New-Item -Path "C:\\hostedtoolcache\\windows" -Name "libcurl" -ItemType "directory"
$WebClient = New-Object System.Net.WebClient
$WebClient.DownloadFile(${env:CURL_DOWNLOAD_URL}, "C:\\hostedtoolcache\\windows\\libcurl\\curl.zip")
Set-Location -Path "C:\\hostedtoolcache\\windows\\libcurl"
7z x curl.zip
Remove-Item curl.zip
Set-Location -Path "C:\\hostedtoolcache\\windows\\libcurl\\curl-${env:CURL_VERSION}\\winbuild"
nmake /f Makefile.vc mode=static ENABLE_SCHANNEL=yes
- name: Setup cURL Environment
env:
CURL_VERSION: 7.76.1
run: |
echo "CURL_INCLUDEDIR=C:\\hostedtoolcache\\windows\\libcurl\\curl-${env:CURL_VERSION}\\builds\\libcurl-vc-x86-release-static-ipv6-sspi-schannel\\include" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
echo "CURL_LIBRARYDIR=C:\\hostedtoolcache\\windows\\libcurl\\curl-${env:CURL_VERSION}\\builds\\libcurl-vc-x86-release-static-ipv6-sspi-schannel\\lib" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
# Setup all the yarn things and node modules
- name: Setup Yarn
uses: actions/setup-node@v1
with:
node-version: '16'
- name: Get Yarn Cache Directory
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Load Yarn Cache
uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Load Cached Node Modules
uses: actions/cache@v4
with:
path: '**/node_modules'
key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }}
# Install yarn things
- name: Install Assets
run: yarn
- name: Setup Build Version
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: .\\.github\\workflows\\plugin_version.ps1
- name: Run CMake
env:
CC: clang-cl
CFLAGS: -m32
CXX: clang-cl
CXXFLAGS: -m32
run: cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -G Ninja -Bbuild
# Run the build and tests
- name: Run Ninja Build
working-directory: build
run: ninja
- name: Run Tests
working-directory: build
run: |
ctest -C Release --output-on-failure --no-tests=error
# Do Srclinting
- name: Get Changed Files (Src)
id: changed-files-src
uses: Ana06/[email protected]
with:
filter: |
src/**/*.cpp
- name: Clang Tidy (Src)
continue-on-error: true # Have to as clang-tidy doesnt want to run properly on Windows
if: false
run: |
if (-not ([string]::IsNullOrEmpty("${{ steps.changed-files-src.outputs.added_modified }}"))) { clang-tidy ${{ steps.changed-files-src.outputs.added_modified }} -p build }
# Upload artifacts
- name: Upload Core Binary As Artifact
uses: actions/upload-artifact@v4
with:
name: UKControllerPluginCore.dll
path: ".\\build\\bin\\UKControllerPluginCore.dll"
- name: Upload Updater Binary As Artifact
uses: actions/upload-artifact@v4
with:
name: UKControllerPluginUpdater.dll
path: ".\\build\\bin\\UKControllerPluginUpdater.dll"
- name: Upload Loader Binary As Artifact
uses: actions/upload-artifact@v4
with:
name: UKControllerPlugin.dll
path: ".\\build\\bin\\UKControllerPlugin.dll"
format:
name: Format
runs-on: windows-latest
concurrency:
group: ukcp-format-${{ github.ref }}
cancel-in-progress: true
steps:
- name: Checkout
uses: actions/checkout@v2
with:
persist-credentials: false
# Environment things
- name: Check Clang Version
run: clang-cl --version
- name: Get All Changed Files
id: changed-files
uses: Ana06/[email protected]
with:
filter: |
src/**/*.cpp
src/**/*.h
test/**/*.cpp
test/**/*.h
- name: Clang Format
run: |
if (-not ([string]::IsNullOrEmpty("${{ steps.changed-files.outputs.added_modified }}"))) { clang-format --style=file --dry-run -Werror ${{ steps.changed-files.outputs.added_modified }} }
release:
name: Release
runs-on: windows-latest
if: github.event_name == 'push' && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/beta' || github.ref == 'refs/heads/alpha')
needs: [build, format]
concurrency:
group: ukcp-release
cancel-in-progress: false
steps:
- name: Checkout
uses: actions/checkout@v2
with:
persist-credentials: false
# Setup all the yarn things and node modules
- name: Setup Yarn
uses: actions/setup-node@v1
with:
node-version: '16'
- name: Get Yarn Cache Directory
id: yarn-cache-dir-path
run: echo "::set-output name=dir::$(yarn cache dir)"
- name: Load Yarn Cache
uses: actions/cache@v4
id: yarn-cache
with:
path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
restore-keys: |
${{ runner.os }}-yarn-
- name: Load Cached Node Modules
uses: actions/cache@v4
with:
path: '**/node_modules'
key: ${{ runner.os }}-node-modules-${{ hashFiles('**/yarn.lock') }}
# Install yarn things
- name: Install Assets
run: yarn
# Download build artifacts
- name: Download Core Binary
uses: actions/download-artifact@v2
with:
name: UKControllerPluginCore.dll
path: ".\\build\\bin\\UKControllerPluginCore.dll"
- name: Download Updater Binary
uses: actions/download-artifact@v2
with:
name: UKControllerPluginUpdater.dll
path: ".\\build\\bin\\UKControllerPluginUpdater.dll"
- name: Download Loader Binary
uses: actions/download-artifact@v2
with:
name: UKControllerPlugin.dll
path: ".\\build\\bin\\UKControllerPlugin.dll"
- name: Create Release
env:
GITHUB_TOKEN: ${{ secrets.PAT }}
GH_TOKEN: ${{ secrets.PAT }}
run: |
yarn semantic-release