name: Build majestic runtime on: push env: LD_LIBRARY_PATH: /usr/local/lib jobs: linux-runtime: name: Runtime (Linux) runs-on: ubuntu-latest container: image: quay.io/pypa/manylinux2014_x86_64:2024-01-08-eb135ed steps: - uses: actions/checkout@v3 - name: Build runtime working-directory: ./src/runtime/c run: | autoreconf -i ./configure make make install - name: Upload artifact uses: actions/upload-artifact@v3 with: name: libpgf-linux path: | /usr/local/lib/libpgf* /usr/local/include/pgf linux-haskell: name: Haskell (Linux) runs-on: ubuntu-latest needs: linux-runtime steps: - uses: actions/checkout@v3 - name: Download artifact uses: actions/download-artifact@v3 with: name: libpgf-linux - run: | sudo mv lib/* /usr/local/lib/ sudo mv include/* /usr/local/include/ - name: Setup Haskell uses: haskell/actions/setup@v2 with: ghc-version: 8 - name: Install Haskell build tools run: | cabal v1-install alex happy - name: build and test the runtime working-directory: ./src/runtime/haskell run: | cabal v1-install --extra-lib-dirs=/usr/local/lib cabal test --extra-lib-dirs=/usr/local/lib - name: build the compiler working-directory: ./src/compiler run: | cabal v1-install - name: Upload artifact uses: actions/upload-artifact@master with: name: compiler-linux path: | ~/.cabal/bin/gf linux-python: name: Python (Linux) runs-on: ubuntu-latest needs: linux-runtime steps: - uses: actions/checkout@v3 - name: Download artifact uses: actions/download-artifact@v3 with: name: libpgf-linux - name: Install cibuildwheel run: | python3 -m pip install git+https://github.com/joerick/cibuildwheel.git@main - name: Install and test bindings env: CIBW_BEFORE_BUILD: cp -r lib/* /usr/lib/ && cp -r include/* /usr/include/ CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: "pytest {project}/src/runtime/python" CIBW_SKIP: "pp* *i686 *musllinux_x86_64" run: | python3 -m cibuildwheel src/runtime/python --output-dir wheelhouse - uses: actions/upload-artifact@master with: name: python-linux path: ./wheelhouse # linux-javascript: # name: JavaScript (Linux) # runs-on: ubuntu-latest # needs: linux-runtime # # steps: # - uses: actions/checkout@v3 # - name: Download artifact # uses: actions/download-artifact@master # with: # name: libpgf-linux # - run: | # sudo mv lib/* /usr/local/lib/ # sudo mv include/* /usr/local/include/ # # - name: Setup Node.js # uses: actions/setup-node@v2 # with: # node-version: '12' # # - name: Install dependencies # working-directory: ./src/runtime/javascript # run: | # npm ci # # - name: Run testsuite # working-directory: ./src/runtime/javascript # run: | # npm run test # ---------------------------------------------------------------------------- macos-runtime: name: Runtime (macOS) runs-on: macOS-11 steps: - uses: actions/checkout@v3 - name: Install build tools run: | brew install \ autoconf \ automake \ libtool \ - name: Build runtime working-directory: ./src/runtime/c run: | glibtoolize autoreconf -i ./configure make sudo make install - name: Upload artifact uses: actions/upload-artifact@master with: name: libpgf-macos path: | /usr/local/lib/libpgf* /usr/local/include/pgf macos-haskell: name: Haskell (macOS) runs-on: macOS-11 needs: macos-runtime steps: - uses: actions/checkout@v3 - name: Download artifact uses: actions/download-artifact@master with: name: libpgf-macos - run: | sudo mv lib/* /usr/local/lib/ sudo mv include/* /usr/local/include/ - name: Setup Haskell uses: haskell/actions/setup@v2 with: ghc-version: 8 - name: Build & run testsuite working-directory: ./src/runtime/haskell run: | cabal test --extra-lib-dirs=/usr/local/lib macos-python: name: Python (macOS) runs-on: macOS-11 needs: macos-runtime env: EXTRA_INCLUDE_DIRS: /usr/local/include EXTRA_LIB_DIRS: /usr/local/lib MACOSX_DEPLOYMENT_TARGET: 11.0 steps: - uses: actions/checkout@v3 - name: Download artifact uses: actions/download-artifact@master with: name: libpgf-macos - run: | sudo mv lib/* /usr/local/lib/ sudo mv include/* /usr/local/include/ - name: Install cibuildwheel run: | python3 -m pip install git+https://github.com/joerick/cibuildwheel.git@main - name: Install and test bindings env: CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: "pytest {project}/src/runtime/python" CIBW_SKIP: "pp* cp36* cp37* cp38* cp39*" run: | python3 -m cibuildwheel src/runtime/python --output-dir wheelhouse - uses: actions/upload-artifact@master with: name: python-macos path: ./wheelhouse # macos-javascript: # name: JavaScript (macOS) # runs-on: macOS-11 # needs: macos-runtime # # steps: # - uses: actions/checkout@v3 # - name: Download artifact # uses: actions/download-artifact@master # with: # name: libpgf-macos # - run: | # sudo mv lib/* /usr/local/lib/ # sudo mv include/* /usr/local/include/ # # - name: Setup Node.js # uses: actions/setup-node@v2 # with: # node-version: '12' # # - name: Install dependencies # working-directory: ./src/runtime/javascript # run: | # npm ci # # - name: Run testsuite # working-directory: ./src/runtime/javascript # run: | # npm run test # ---------------------------------------------------------------------------- mingw64-runtime: name: Runtime (MinGW64) runs-on: windows-latest steps: - uses: actions/checkout@v3 - name: Setup MSYS2 uses: msys2/setup-msys2@v2 with: msystem: MINGW64 install: >- base-devel autoconf automake libtool mingw-w64-x86_64-toolchain mingw-w64-x86_64-libtool - name: Build runtime shell: msys2 {0} working-directory: ./src/runtime/c run: | autoreconf -i ./configure make make install - name: Upload artifact uses: actions/upload-artifact@master with: name: libpgf-windows path: | ${{runner.temp}}/msys64/mingw64/bin/libpgf* ${{runner.temp}}/msys64/mingw64/bin/libgcc_s_seh-1.dll ${{runner.temp}}/msys64/mingw64/bin/libstdc++-6.dll ${{runner.temp}}/msys64/mingw64/bin/libwinpthread-1.dll ${{runner.temp}}/msys64/mingw64/lib/libpgf* ${{runner.temp}}/msys64/mingw64/include/pgf windows-python: name: Python (Windows) runs-on: windows-latest steps: - uses: actions/checkout@v3 - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: Install cibuildwheel run: | python3 -m pip install git+https://github.com/joerick/cibuildwheel.git@main - name: Install and test bindings env: CIBW_TEST_REQUIRES: pytest CIBW_TEST_COMMAND: "pytest {project}\\src\\runtime\\python" CIBW_SKIP: "pp* *-win32" run: | python3 -m cibuildwheel src\runtime\python --output-dir wheelhouse - uses: actions/upload-artifact@master with: name: python-windows path: ./wheelhouse upload_pypi: name: Upload to PyPI needs: [linux-python, macos-python, windows-python] runs-on: ubuntu-latest if: github.ref == 'refs/heads/majestic' && github.event_name == 'push' steps: - uses: actions/checkout@v3 - name: Set up Python uses: actions/setup-python@v3 with: python-version: '3.x' - name: Install twine run: pip install twine - uses: actions/download-artifact@master with: name: python-linux path: ./dist - uses: actions/download-artifact@master with: name: python-macos path: ./dist - uses: actions/download-artifact@master with: name: python-windows path: ./dist - name: Publish env: TWINE_USERNAME: __token__ TWINE_PASSWORD: ${{ secrets.pypi_majestic_password }} run: | (cd ./src/runtime/python && curl -I --fail https://pypi.org/project/$(python setup.py --name)/$(python setup.py --version)/) || twine upload --skip-existing dist/*