Skip to content

Use BytesIO wrapped font instead of passing path to avoid "Cannot open resource" error in Windows #1599

Use BytesIO wrapped font instead of passing path to avoid "Cannot open resource" error in Windows

Use BytesIO wrapped font instead of passing path to avoid "Cannot open resource" error in Windows #1599

Workflow file for this run

name: Build
on:
push:
branches:
- main
tags:
- "*"
pull_request:
paths:
- ".github/workflows/main.yml"
- "conda.recipe/**"
- "constructor/**"
- "examples/**"
- "scripts/**"
- "tests/**"
- "dev/**"
- "pyproject.toml"
- "setup.cfg"
- "setup.py"
concurrency:
# Concurrency group that uses the workflow name and PR number if available
# or commit SHA as a fallback. If a new build is triggered under that
# concurrency group while a previous build is running it will be canceled.
# Repeated pushes to a PR will cancel all previous builds, while multiple
# merges to main will not cancel.
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }}
cancel-in-progress: true
defaults:
run:
shell: bash -el {0}
jobs:
tests:
name: ${{ matrix.os }}, Python ${{ matrix.python-version }}, ${{ matrix.conda-standalone }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
# UBUNTU
- os: ubuntu-latest
python-version: "3.8"
conda-standalone: conda-standalone
check-docs: true
- os: ubuntu-latest
python-version: "3.9"
conda-standalone: conda-standalone
check-docs: true
- os: ubuntu-latest
python-version: "3.10"
conda-standalone: conda-standalone-nightly
- os: ubuntu-latest
python-version: "3.11"
conda-standalone: micromamba
- os: ubuntu-latest
python-version: "3.12"
conda-standalone: conda-standalone
# MACOS
- os: macos-13
python-version: "3.8"
conda-standalone: conda-standalone-nightly
# Not running for 3.9, 3.10 to save some CI resources
# - os: macos
# python-version: "3.9"
# conda-standalone: conda-standalone
# - os: macos-13
# python-version: "3.10"
# conda-standalone: micromamba
- os: macos-latest
python-version: "3.11"
conda-standalone: conda-standalone
- os: macos-latest
python-version: "3.12"
conda-standalone: micromamba
# WINDOWS
- os: windows-latest
python-version: "3.8"
conda-standalone: conda-standalone
- os: windows-latest
python-version: "3.9"
conda-standalone: conda-standalone-nightly
- os: windows-latest
python-version: "3.10"
conda-standalone: conda-standalone
- os: windows-latest
python-version: "3.11"
# conda-standalone: micromamba
conda-standalone: conda-standalone-nightly
- os: windows-latest
python-version: "3.12"
# conda-standalone: micromamba
conda-standalone: conda-standalone
env:
PYTHONUNBUFFERED: "1"
steps:
- name: Retrieve the source code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
fetch-depth: 0
- uses: conda-incubator/setup-miniconda@a4260408e20b96e80095f42ff7f1a15b27dd94ca # v3.0.4
with:
activate-environment: constructor-dev
environment-file: dev/environment.yml
python-version: ${{ matrix.python-version }}
- name: Install AzureSignTool
if: startswith(matrix.os, 'windows')
run: dotnet.exe tool install --global AzureSignTool
shell: pwsh
- name: Supply extra dependencies and install constructor
run: |
files=(--file "tests/requirements.txt")
test -f dev/extra-requirements-${{ runner.os }}.txt \
&& files+=(--file "dev/extra-requirements-${{ runner.os }}.txt")
conda install ${files[@]} -y
echo "NSIS_USING_LOG_BUILD=1" >> $GITHUB_ENV
pip install -e . --no-deps --no-build-isolation
- name: Set up conda executable
run: |
if [[ "${{ matrix.conda-standalone }}" == "micromamba" ]]; then
conda create -yqp "${{ runner.temp }}/micromamba" -c conda-forge micromamba
if [[ "${{ runner.os }}" == "Windows" ]]; then
echo "CONSTRUCTOR_CONDA_EXE=${{ runner.temp }}/micromamba/Library/bin/micromamba.exe" >> $GITHUB_ENV
else
echo "CONSTRUCTOR_CONDA_EXE=${{ runner.temp }}/micromamba/bin/micromamba" >> $GITHUB_ENV
fi
elif [[ "${{ matrix.conda-standalone }}" == "conda-standalone-nightly" ]]; then
conda create -yqp "${{ runner.temp }}/conda-standalone-nightly" -c conda-canary/label/dev conda-standalone
echo "CONSTRUCTOR_CONDA_EXE=${{ runner.temp }}/conda-standalone-nightly/standalone_conda/conda.exe" >> $GITHUB_ENV
else
conda activate constructor-dev
echo "CONSTRUCTOR_CONDA_EXE=$CONDA_PREFIX/standalone_conda/conda.exe" >> $GITHUB_ENV
fi
- name: Run unit tests
run: |
pytest -vv --cov=constructor --cov-branch tests/ -m "not examples"
coverage run --branch --append -m constructor -V
coverage json
- uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: unit
- name: Run examples
env:
AZURE_SIGNTOOL_KEY_VAULT_CERTIFICATE: ${{ secrets.AZURE_SIGNTOOL_KEY_VAULT_CERTIFICATE }}
AZURE_SIGNTOOL_KEY_VAULT_CLIENT_ID: ${{ secrets.AZURE_SIGNTOOL_KEY_VAULT_CLIENT_ID }}
AZURE_SIGNTOOL_KEY_VAULT_SECRET: ${{ secrets.AZURE_SIGNTOOL_KEY_VAULT_SECRET }}
AZURE_SIGNTOOL_KEY_VAULT_TENANT_ID: ${{ secrets.AZURE_SIGNTOOL_KEY_VAULT_TENANT_ID }}
AZURE_SIGNTOOL_KEY_VAULT_URL: ${{ secrets.AZURE_SIGNTOOL_KEY_VAULT_URL }}
CONSTRUCTOR_EXAMPLES_KEEP_ARTIFACTS: "${{ runner.temp }}/examples_artifacts"
CONSTRUCTOR_SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.17763.0/x86/signtool.exe"
run: |
rm -rf coverage.json
pytest -vv --cov=constructor --cov-branch tests/test_examples.py
coverage run --branch --append -m constructor -V
coverage json
- uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 # v4.5.0
with:
token: ${{ secrets.CODECOV_TOKEN }}
flags: integration
- name: Check docs are up-to-date
if: matrix.check-docs
run: |
python scripts/make_docs.py
git diff --exit-code
- name: Upload the example installers as artifacts
if: github.event_name == 'pull_request' && matrix.python-version == '3.9'
uses: actions/upload-artifact@89ef406dd8d7e03cfd12d9e0a4a378f454709029 # v4.3.5
with:
name: installers-${{ runner.os }}-${{ github.sha }}-${{ github.run_id }}-${{ github.run_number }}-${{ github.run_attempt }}
path: "${{ runner.temp }}/examples_artifacts"
retention-days: 7
report:
name: Report failures
needs: [tests]
if: always() && github.event_name == 'push' && github.ref_name == 'main' && needs.tests.result == 'failure'
runs-on: ubuntu-latest
steps:
- name: Retrieve the source code
uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
- name: Report failures
uses: JasonEtco/create-an-issue@1b14a70e4d8dc185e5cc76d3bec9eab20257b2c5 # v2.9.2
env:
GITHUB_TOKEN: ${{ secrets.CONSTRUCTOR_ISSUES }}
RUN_ID: ${{ github.run_id }}
TITLE: "Constructor tests failed"
with:
filename: .github/TEST_FAILURE_REPORT_TEMPLATE.md
update_existing: true
build:
name: Canary Build
needs: [tests]
# only build canary build if
# only build canary build if
# - prior steps succeeded,
# - this is the main repo, and
# - we are on the main (or feature) branch
if: >-
success()
&& !github.event.repository.fork
&& (
github.ref_name == 'main'
|| startsWith(github.ref_name, 'feature/')
)
strategy:
matrix:
include:
- runner: ubuntu-latest
subdir: linux-64
- runner: macos-13
subdir: osx-64
- runner: macos-latest
subdir: osx-arm64
- runner: windows-latest
subdir: win-64
runs-on: ${{ matrix.runner }}
steps:
# Clean checkout of specific git ref needed for package metadata version
# which needs env vars GIT_DESCRIBE_TAG and GIT_BUILD_STR:
- uses: actions/checkout@692973e3d937129bcbf40652eb9f2f61becf3332 # v4.1.7
with:
ref: ${{ github.ref }}
clean: true
fetch-depth: 0
- name: Create and upload canary build
uses: conda/actions/canary-release@976289d0cfd85139701b26ddd133abdd025a7b5f # v24.5.0
with:
package-name: ${{ github.event.repository.name }}
subdir: ${{ matrix.subdir }}
anaconda-org-channel: conda-canary
anaconda-org-label: ${{ github.ref_name == 'main' && 'dev' || format('{0}-{1}', github.event.repository.name, github.ref_name) }}
anaconda-org-token: ${{ secrets.ANACONDA_ORG_CONDA_CANARY_TOKEN }}
conda-build-arguments: '--override-channels -c conda-forge -c defaults'