Trying all languages on docker #599
Workflow file for this run
This file contains hidden or 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: Release Python Package | |
| on: | |
| workflow_dispatch: | |
| pull_request: | |
| push: | |
| branches: [ master, develop ] | |
| paths: | |
| - '.github/workflows/release-python.yml' | |
| - 'source/ports/py_port/**' | |
| permissions: | |
| id-token: write | |
| contents: read | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| test: | |
| name: Python Port Tests (${{ matrix.os }}, ${{ matrix.build }}) | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: [ubuntu-latest, macos-latest, windows-latest] | |
| build: [debug, release] | |
| exclude: | |
| # Windows distributable ships release-only builds | |
| - os: windows-latest | |
| build: debug | |
| steps: | |
| - name: Check out the repo | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Install MetaCall (Unix) | |
| if: runner.os != 'Windows' | |
| shell: bash | |
| run: | | |
| FLAGS="${{ matrix.build == 'debug' && '-s -- --debug' || '' }}" | |
| curl -sL https://raw.githubusercontent.com/metacall/install/master/install.sh | sh $FLAGS | |
| - name: Install MetaCall (Windows) | |
| if: runner.os == 'Windows' | |
| run: powershell -NoProfile -ExecutionPolicy Unrestricted -Command "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; &([scriptblock]::Create((Invoke-WebRequest -UseBasicParsing 'https://raw.githubusercontent.com/metacall/install/master/install.ps1')))" | |
| - name: Install Python Port (Linux) | |
| if: runner.os == 'Linux' | |
| working-directory: source/ports/py_port | |
| run: | | |
| . /gnu/etc/profile | |
| pip install -e . | |
| - name: Install Python Port (Windows) | |
| if: runner.os == 'Windows' | |
| working-directory: source/ports/py_port | |
| run: pip install -e . | |
| # macOS: pip-install the port so the package is findable. | |
| - name: Install Python Port (macOS) | |
| if: runner.os == 'macOS' | |
| working-directory: source/ports/py_port | |
| run: pip install -e . | |
| # Single unified copy step | |
| - name: Populate scripts directory | |
| shell: bash | |
| run: | | |
| mkdir -p source/ports/py_port/scripts | |
| # Mock loader only needs a resolvable path, not actual content | |
| touch source/ports/py_port/scripts/sometestmock.mock | |
| # Python scripts | |
| cp source/scripts/python/helloworld/source/helloworld.py source/ports/py_port/scripts/ | |
| cp source/scripts/python/example/source/example.py source/ports/py_port/scripts/ | |
| # Ruby scripts | |
| cp source/scripts/ruby/hello/source/hello.rb source/ports/py_port/scripts/ | |
| cp source/scripts/ruby/second/source/second.rb source/ports/py_port/scripts/ | |
| # NodeJS scripts — derpyramda.js is self-contained (no npm deps) | |
| cp source/scripts/node/derpyramda/source/derpyramda.js source/ports/py_port/scripts/ | |
| - name: Test the Python Port (Linux) | |
| if: runner.os == 'Linux' | |
| working-directory: source/ports/py_port | |
| env: | |
| LOADER_SCRIPT_PATH: ${{ github.workspace }}/source/ports/py_port/scripts | |
| run: | | |
| . /gnu/etc/profile | |
| python test.py | |
| - name: Test the Python Port (macOS) | |
| if: runner.os == 'macOS' | |
| working-directory: source/ports/py_port | |
| env: | |
| LOADER_SCRIPT_PATH: ${{ github.workspace }}/source/ports/py_port/scripts | |
| # Include both the port package and the scripts dir so `import example` | |
| # (no file extension — falls through to plain Python import) resolves. | |
| PYTHONPATH: ${{ github.workspace }}/source/ports/py_port:${{ github.workspace }}/source/ports/py_port/scripts | |
| run: | | |
| # Derive loader paths from the installed Homebrew prefix — version-agnostic. | |
| METACALL_PREFIX="$(brew --prefix metacall)" | |
| export LOADER_LIBRARY_PATH="$METACALL_PREFIX/lib" | |
| export SERIAL_LIBRARY_PATH="$METACALL_PREFIX/lib" | |
| export DETOUR_LIBRARY_PATH="$METACALL_PREFIX/lib" | |
| export CONFIGURATION_PATH="$METACALL_PREFIX/configurations/global.json" | |
| # api.py finds libmetacall(d).dylib in /opt/homebrew/lib/ automatically; | |
| # running plain python (not `metacall python`) avoids the CLI re-entrancy | |
| # SIGSEGV where function_py_interface_invoke recurses infinitely. | |
| python test.py | |
| - name: Test the Python Port (Windows) | |
| if: runner.os == 'Windows' | |
| working-directory: source/ports/py_port | |
| env: | |
| LOADER_SCRIPT_PATH: ${{ github.workspace }}\source\ports\py_port\scripts | |
| run: python test.py | |
| release: | |
| name: Release Python Port | |
| runs-on: ubuntu-latest | |
| needs: test | |
| if: ${{ github.event_name != 'pull_request' }} | |
| steps: | |
| - name: Check out the repo | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Release the port | |
| working-directory: source/ports/py_port | |
| run: ./upload.sh |