name: Basic usage on: push: pull_request: schedule: # Weekly, at 5:30 AM on Saturday (somewhat randomly chosen). - cron: '30 5 * * 6' workflow_dispatch: jobs: lint: runs-on: ubuntu-20.04 name: Linting steps: - name: Checkout uses: actions/checkout@v2 - name: Run clang-format run: ./tools/project-clang-format.py --clang-format clang-format-10 basic: strategy: matrix: os: [ubuntu-18.04, windows-2016, windows-2019] include: # Prettier run names. - {os: windows-2016, name: VS 2017} - {os: windows-2019, name: VS 2019} - {os: ubuntu-18.04, name: Ubuntu} runs-on: '${{ matrix.os }}' name: '${{ matrix.name }}' defaults: run: shell: pwsh steps: - name: Checkout uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: '3.x' - name: Cache Boost uses: actions/cache@v2 with: path: boost_*.tar.gz key: boost_1.72.0 - name: Build Boost run: | python -m project.boost.download --cache . 1.72.0 python -m project.boost.build -- boost_1_72_0 --with-filesystem - name: Build example project run: | $src_dir = Join-Path examples boost python -m project.cmake.build --boost boost_1_72_0 --install install -- $src_dir - name: Run example project run: | $foo_path = Join-Path (Get-Location).Path install bin foo if ('${{ runner.os }}' -eq 'Windows') { $foo_path += '.exe' } $relative = 'test.txt' $absolute = Join-Path (Get-Location).Path $relative $actual = & $foo_path $relative echo 'Actual output:' echo $actual $expected = $foo_path,$absolute echo 'Expected output:' echo $expected if (Compare-Object $actual $expected -CaseSensitive) { throw 'Unexpected output' } publish: # TODO: figure out how to add a dependency on the *toolsets workflows. needs: [lint, basic] runs-on: ubuntu-20.04 name: Publish steps: - name: Checkout uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v2 with: python-version: 3 - name: Verify package can be installed run: python3 -m pip install . - name: Install tools run: python3 -m pip install --upgrade build - name: Build package run: python3 -m build - name: Upload dist uses: actions/upload-artifact@v2 with: name: dist path: dist if-no-files-found: error - name: Publish package if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags') uses: pypa/gh-action-pypi-publish@release/v1 with: user: __token__ password: ${{ secrets.PYPI_API_TOKEN }}