If no indexURL is provided, we throw and catch an error and
then use ErrorStackParser to calculate where pyodide.js has
been loaded from. Resolves #2290.
ENH Calculate indexURL from error stack trace. If no indexURL is provided, we throw and catch an error and
then use ErrorStackParser to calculate where pyodide.js has
been loaded from. Resolves #2290.
name: main

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

concurrency:
  group: main-${{ github.head_ref }}
  cancel-in-progress: true

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v3
        with:
          python-version: 3.10.2
      - uses: pre-commit/action@v2.0.3

  build-core:
    runs-on: ubuntu-latest
    env:
      EMSDK_NUM_CORES: 3
      EMCC_CORES: 3
      PYODIDE_JOBS: 3
      CCACHE_DIR: /tmp/ccache

    steps:
      - uses: actions/checkout@v2

      - name: Cache ccache output
        uses: actions/cache@v2
        with:
          path: |
            /tmp/ccache
          key: ${{ hashFiles('Makefile.envs') }}-v20211025-

      - uses: conda-incubator/setup-miniconda@v2
        with:
          activate-environment: pyodide-env
          python-version: 3.10.2
          channels: conda-forge

      - name: Check Python versions
        shell: bash -l {0}
        run: |
          python --version
          which python

      - name: Install dependencies
        shell: bash -l {0}
        run: |
          sudo apt install -y build-essential git
          conda install -y nodejs ccache f2c pkg-config swig make patch pkg-config texinfo autoconf automake libtool
          pip install -r requirements.txt

      - name: Build emsdk
        shell: bash -l {0}
        run: |
          which ccache

          ccache -z
          make -C emsdk
          ccache -s

      - name: Build Cpython
        shell: bash -l {0}
        run: |
          # This is necessary to use the ccache from emsdk
          source pyodide_env.sh

          which ccache

          ccache -z
          make -C cpython
          ccache -s

      - name: build Pyodide core + numpy
        shell: bash -l {0}
        run: |
          # This is necessary to use the ccache from emsdk
          source pyodide_env.sh
          ccache -z
          PYODIDE_PACKAGES="core,numpy" make
          ccache -s

      - name: check-size
        run: ls -lh build/

      - name: Store artifacts build
        uses: actions/upload-artifact@v2
        with:
          name: core-build
          path: ./build/
          retention-days: 60

  test-core:
    runs-on: ubuntu-latest
    env:
      DISPLAY: :99

    needs: [build-core]
    strategy:
      matrix:
        selenium_runner: [firefox]

    steps:
      - uses: actions/checkout@v2

      - name: Download build artifact
        uses: actions/download-artifact@v2
        with:
          name: core-build
          path: ./build/

      - uses: conda-incubator/setup-miniconda@v2
        with:
          activate-environment: pyodide-env
          python-version: 3.10.2
          channels: conda-forge

      - name: install test requirements
        shell: bash -l {0}
        run: |
          pip install -r requirements.txt

      - name: run core tests
        env:
          SELENIUM_RUNNER: ${{ matrix.selenium_runner }}
        shell: bash -l {0}
        run: |
          ls -lh
          ls -lh build/
          tools/pytest_wrapper.py src packages/micropip/ -v -k "${SELENIUM_RUNNER}"

      - name: run package tests
        env:
          SELENIUM_RUNNER: ${{ matrix.selenium_runner }}
        shell: bash -l {0}
        run: |
          ls -lh
          ls -lh build/
          tools/pytest_wrapper.py packages/test* packages/*/test* -v -k "numpy and not joblib and ${SELENIUM_RUNNER}"

name: main

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

concurrency:
  group: main-${{ github.head_ref }}
  cancel-in-progress: true

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-python@v3
        with:
          python-version: 3.10.2
      - uses: pre-commit/action@v2.0.3

  build-core:
    runs-on: ubuntu-latest
    env:
      EMSDK_NUM_CORES: 3
      EMCC_CORES: 3
      PYODIDE_JOBS: 3
      CCACHE_DIR: /tmp/ccache

    steps:
      - uses: actions/checkout@v2

      - name: Cache ccache output
        uses: actions/cache@v2
        with:
          path: |
            /tmp/ccache
          key: ${{ hashFiles('Makefile.envs') }}-v20211025-

      - uses: conda-incubator/setup-miniconda@v2
        with:
          activate-environment: pyodide-env
          python-version: 3.10.2
          channels: conda-forge

      - name: Check Python versions
        shell: bash -l {0}
        run: |
          python --version
          which python

      - name: Install dependencies
        shell: bash -l {0}
        run: |
          sudo apt install -y build-essential git
          conda install -y nodejs ccache f2c pkg-config swig make patch pkg-config texinfo autoconf automake libtool
          pip install -r requirements.txt

      - name: Build emsdk
        shell: bash -l {0}
        run: |
          which ccache

          ccache -z
          make -C emsdk
          ccache -s

      - name: Build Cpython
        shell: bash -l {0}
        run: |
          # This is necessary to use the ccache from emsdk
          source pyodide_env.sh

          which ccache

          ccache -z
          make -C cpython
          ccache -s

      - name: build Pyodide core + numpy
        shell: bash -l {0}
        run: |
          # This is necessary to use the ccache from emsdk
          source pyodide_env.sh
          ccache -z
          PYODIDE_PACKAGES="core,numpy" make
          ccache -s

      - name: check-size
        run: ls -lh build/

      - name: Store artifacts build
        uses: actions/upload-artifact@v2
        with:
          name: core-build
          path: ./build/
          retention-days: 60

  test-core:
    runs-on: ubuntu-latest
    env:
      DISPLAY: :99

    needs: [build-core]
    strategy:
      matrix:
        selenium_runner: [firefox]

    steps:
      - uses: actions/checkout@v2

      - name: Download build artifact
        uses: actions/download-artifact@v2
        with:
          name: core-build
          path: ./build/

      - uses: conda-incubator/setup-miniconda@v2
        with:
          activate-environment: pyodide-env
          python-version: 3.10.2
          channels: conda-forge

      - name: install test requirements
        shell: bash -l {0}
        run: |
          pip install -r requirements.txt

      - name: run core tests
        env:
          SELENIUM_RUNNER: ${{ matrix.selenium_runner }}
        shell: bash -l {0}
        run: |
          ls -lh
          ls -lh build/
          tools/pytest_wrapper.py src packages/micropip/ -v -k "${SELENIUM_RUNNER}"

      - name: run package tests
        env:
          SELENIUM_RUNNER: ${{ matrix.selenium_runner }}
        shell: bash -l {0}
        run: |
          ls -lh
          ls -lh build/
          tools/pytest_wrapper.py packages/test* packages/*/test* -v -k "numpy and not joblib and ${SELENIUM_RUNNER}"
