[build] Run github action workflow for dockerfile and makefile #178
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Build Pacparser | |
on: | |
push: | |
branches: [master] | |
paths: | |
- 'src/**' | |
- '.github/workflows/build.yml' | |
- Makefile | |
- Dockerfile | |
pull_request: | |
workflow_dispatch: | |
inputs: | |
tag: | |
description: 'Tag to run workflow for' | |
required: true | |
permissions: | |
contents: read | |
packages: write | |
jobs: | |
build: | |
strategy: | |
matrix: | |
os: [ubuntu, windows, macos] | |
runs-on: ${{ matrix.os }}-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
if: ${{ !contains(github.event_name, 'workflow_dispatch') }} | |
with: | |
fetch-depth: 0 | |
- name: Check out code for workflow_dispatch | |
if: ${{ contains(github.event_name, 'workflow_dispatch') }} | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.inputs.tag }} | |
- name: make non-windows | |
if: ${{ matrix.os != 'windows' }} | |
run: make -C src | |
- name: make windows | |
if: ${{ matrix.os == 'windows' }} | |
run: make -C src -f Makefile.win32 | |
- name: Get ref_name | |
id: get_ref_name | |
if: ${{ matrix.os != 'windows' }} | |
run: | | |
if [ "${{ github.event_name }}" == "pull_request" ]; then | |
echo "ref_name=${{ github.base_ref }}" | |
echo "ref_name=${{ github.base_ref }}" >> $GITHUB_OUTPUT || exit 1 | |
else | |
echo "ref_name=${{ github.ref_name }}" | |
echo "ref_name=${{ github.ref_name }}" >> $GITHUB_OUTPUT || exit 1 | |
fi | |
- name: make non-windows dist | |
if: ${{ matrix.os != 'windows' }} | |
run: | | |
DIST_OS_SUFFIX=${{ matrix.os }} make -C src dist | |
ls -R src/*.zip | |
- name: make windows dist | |
if: ${{ matrix.os == 'windows' }} | |
run: | | |
make -C src -f Makefile.win32 dist | |
- name: Upload dist (non-windows) | |
if: ${{ matrix.os != 'windows' }} | |
uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0 | |
with: | |
name: pacparser-dist-${{ matrix.os }} | |
path: src/pacparser*.zip | |
- name: Upload dist (windows) | |
if: ${{ matrix.os == 'windows' }} | |
uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0 | |
with: | |
name: pacparser-dist-${{ matrix.os }} | |
path: src/dist | |
python-module-build: | |
strategy: | |
matrix: | |
os: [ubuntu, windows, macos] | |
python-version: ['3.8', '3.9', '3.10', '3.11', '3.12'] | |
runs-on: ${{ matrix.os }}-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
if: ${{ !contains(github.event_name, 'workflow_dispatch') }} | |
with: | |
fetch-depth: 0 | |
- name: Check out code for workflow_dispatch | |
if: ${{ contains(github.event_name, 'workflow_dispatch') }} | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.inputs.tag }} | |
- name: Set up Python | |
uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 | |
with: | |
python-version: ${{ matrix.python-version }} | |
architecture: x64 | |
- name: Set up setuptools | |
run: | | |
python --version | |
python -mpip install setuptools | |
- name: make non-windows | |
if: ${{ matrix.os != 'windows' }} | |
run: make -C src pymod-dist | |
- name: make windows | |
if: ${{ matrix.os == 'windows' }} | |
run: make -C src -f Makefile.win32 pymod-dist | |
- name: Upload dist | |
uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0 | |
with: | |
name: pacparser-python-${{ matrix.python-version }}-${{ matrix.os }}-dist | |
path: src/pymod/pacparser-python* | |
- name: Build wheel non-linux | |
if: ${{ matrix.os != 'ubuntu' }} | |
run: | | |
python -m pip install wheel | |
cd src/pymod && python setup.py bdist_wheel | |
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1 | |
id: changes | |
with: | |
filters: | | |
src: | |
- 'src/**' | |
- name: Publish package to PyPI (non-linux) | |
if: ${{ (matrix.os != 'ubuntu') && (steps.changes.outputs.src == 'true') && (github.event_name != 'pull_request') }} | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI }} | |
run: | | |
python -m pip install twine | |
ls -R . | |
twine upload src/pymod/dist/* | |
build-linux-wheels: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
if: ${{ !contains(github.event_name, 'workflow_dispatch') }} | |
with: | |
fetch-depth: 0 | |
- name: Check out code for workflow_dispatch | |
if: ${{ contains(github.event_name, 'workflow_dispatch') }} | |
uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.inputs.tag }} | |
- name: Set env | |
run: echo "PACPARSER_VERSION=$(git describe --always --tags --candidate=100)" >> $GITHUB_ENV | |
- name: Set up Python | |
uses: actions/setup-python@0a5c61591373683505ea898e09a3ea4f39ef2b9c # v5.0.0 | |
- name: Set up setuptools | |
run: | | |
python --version | |
python -mpip install setuptools | |
- name: make | |
run: make -C src pymod | |
- name: Build sdist | |
run: cd src/pymod && python setup.py sdist | |
- name: Install cibuildwheel and twine | |
run: python -m pip install cibuildwheel twine | |
- name: Build wheel using cibuildwheel | |
run: | | |
cp src/spidermonkey/libjs.a src/pacparser.o src/pacparser.h src/pymod | |
cd src/pymod && python -m cibuildwheel --output-dir dist | |
env: | |
CIBW_BUILD: 'cp{37,38,39,310,311}-manylinux*64' | |
CIBW_ENVIRONMENT: 'PACPARSER_VERSION=${{ env.PACPARSER_VERSION }}' | |
- uses: dorny/paths-filter@4512585405083f25c027a35db413c2b3b9006d50 # v2.11.1 | |
id: changes | |
with: | |
filters: | | |
src: | |
- 'src/**' | |
- name: Publish package to PyPI | |
if: ${{ startsWith(github.ref, 'refs/tags/v') || (github.ref == 'refs/heads/master' && steps.changes.outputs.src == 'true') }} | |
env: | |
TWINE_USERNAME: __token__ | |
TWINE_PASSWORD: ${{ secrets.PYPI }} | |
run: | | |
twine upload src/pymod/dist/* | |
build_and_push_docker_multiarch: | |
name: Build and push multiarch docker image | |
if: github.repository == 'manugarg/pacparser' && (github.ref == 'refs/heads/master' || startswith(github.ref, 'refs/heads/docker') || startsWith(github.ref, 'refs/tags/v')) | |
runs-on: ubuntu-latest | |
steps: | |
- name: Check out code into the Go module directory | |
if: ${{ !contains(github.event_name, 'workflow_dispatch') }} | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
- name: Check out code into the Go module directory | |
if: ${{ contains(github.event_name, 'workflow_dispatch') }} | |
uses: actions/checkout@v2 | |
with: | |
fetch-depth: 0 | |
ref: ${{ github.event.inputs.tag }} | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v1 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v1 | |
- name: Login to GHCR | |
uses: docker/login-action@v1 | |
with: | |
registry: ghcr.io | |
username: ${{ github.repository_owner }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Build and push release Docker Image (main-ghcr) | |
run: make docker_multiarch DOCKER_IMAGE=ghcr.io/manugarg/pactester | |