Files
libloot-python/.github/workflows/ci.yml
T
Oliver Hamlet 6f6b2269cf Migrate to windows-2019 GitHub Actions runners
windows-2016 was scheduled for removal in April 2022, though the
previous commit's build still worked.

This also means that the MSVC 2019 redistributable is now required.
Although libloot 0.15 is built with MSVC 2017, 2019 can link code
build with 2017 and the 2019 redistributable effectively replaces
the 2017 redistributable, so there's no compatibility issues.
2022-07-02 16:49:52 +01:00

139 lines
4.4 KiB
YAML

name: CI
on:
push:
# Don't run this workflow when a tag is pushed.
branches:
- '*'
pull_request:
env:
MSVC_CONFIG: RelWithDebInfo
jobs:
# Publish to Artifactory as a separate job that runs after the build jobs
# because we must first clean out any existing artifacts for this Git ref,
# and we don't want to do that as a pre-build step in case the build fails
# and we're left with no artifacts published.
publish-to-artifactory:
runs-on: ubuntu-18.04
needs: [windows]
if: github.event_name == 'push'
steps:
- name: Clean up artifacts on Artifactory
run: |
curl -sfSLO 'https://raw.githubusercontent.com/Ortham/ci-scripts/2.2.0/remove_old_artifactory_files.py'
python3 remove_old_artifactory_files.py \
--artifactory-host loot.jfrog.io \
--artifactory-api-key ${{ secrets.ARTIFACTORY_API_KEY }} \
--artifactory-repository libloot-python \
--current-branch "${GITHUB_REF#refs/*/}" \
--github-repository loot/libloot-python \
--github-token ${{ secrets.GITHUB_TOKEN }}
- name: Create empty directory for artifacts
run: |
rm -rf downloaded_artifacts
mkdir downloaded_artifacts
- name: Download all artifacts for this workflow from GitHub Actions
uses: actions/download-artifact@v2
with:
path: downloaded_artifacts
- name: Publish artifacts to Artifactory
shell: bash
run: |
curl -sfSLO 'https://raw.githubusercontent.com/Ortham/ci-scripts/2.2.0/percent_encode.py'
PERCENT_ENCODED_GIT_REF_NAME=$(python3 percent_encode.py "${GITHUB_REF#refs/*/}")
for ARTIFACT_DIRECTORY in downloaded_artifacts/*
do
ARTIFACT_NAME="${ARTIFACT_DIRECTORY#downloaded_artifacts/}"
PERCENT_ENCODED_ARTIFACT_NAME=$(python3 percent_encode.py "$ARTIFACT_NAME")
curl -sSfL \
-X PUT \
-T "$ARTIFACT_DIRECTORY/$ARTIFACT_NAME" \
-H "X-JFrog-Art-Api: ${{ secrets.ARTIFACTORY_API_KEY }}" \
"https://loot.jfrog.io/artifactory/libloot-python/${PERCENT_ENCODED_GIT_REF_NAME}/$PERCENT_ENCODED_ARTIFACT_NAME"
done
windows:
runs-on: windows-2019
strategy:
matrix:
platform: [Win32, x64]
python-version: [3.7]
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Get Python architecture
id: get-python-architecture
shell: bash
run: |
if [[ "${{ matrix.platform }}" == "Win32" ]]
then
PLATFORM=x86
else
PLATFORM=x64
fi
echo "::set-output name=architecture::$PLATFORM"
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v2
with:
python-version: ${{ matrix.python-version }}
architecture: ${{ steps.get-python-architecture.outputs.architecture }}
- name: Get descriptive version
id: get-version
shell: bash
run: |
GIT_DESCRIBE=$(git describe --tags --long --abbrev=7)
DESC_REF=${GIT_DESCRIBE}_${GITHUB_REF#refs/*/}
SAFE_DESC_REF=${DESC_REF//[\/<>\"|]/_}
echo "::set-output name=version::$SAFE_DESC_REF"
- name: Run CMake
run: |
mkdir build
cd build
cmake .. -G "Visual Studio 16 2019" -A ${{ matrix.platform }} -DCPACK_PACKAGE_VERSION="${{ steps.get-version.outputs.version }}-python${{ matrix.python-version }}"
cmake --build . --config ${{ env.MSVC_CONFIG }}
- name: Run tests
run: |
cd build
ctest -C ${{ env.MSVC_CONFIG }}
- name: Build archive
id: build-archive
shell: bash
run: |
cd build
cpack -C ${{ env.MSVC_CONFIG }}
VERSION="${{ steps.get-version.outputs.version }}-python${{ matrix.python-version }}"
if [[ "${{ matrix.platform }}" == "Win32" ]]
then
PLATFORM=win32
else
PLATFORM=win64
fi
echo "::set-output name=filename::libloot-python-${VERSION}-${PLATFORM}.zip"
- name: Upload archive
uses: actions/upload-artifact@v2
with:
name: ${{ steps.build-archive.outputs.filename }}
path: build/package/${{ steps.build-archive.outputs.filename }}
if: github.event_name == 'push'