diff --git a/.github/workflows/mac-m1.yml b/.github/workflows/mac-m1.yml new file mode 100644 index 0000000000..d604436820 --- /dev/null +++ b/.github/workflows/mac-m1.yml @@ -0,0 +1,126 @@ +# https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners#supported-runners-and-hardware-resources +# TODO: add `python -m pytest --doctest-modules` + +name: Mac M1 test +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + workflow_call: + +permissions: + contents: read # to fetch code (actions/checkout) + +jobs: + lint-python: + name: Lint Python + runs-on: macos-14 + steps: + - uses: actions/checkout@v4 + - run: | + pip install --user ruff + python3 -m ruff --output-format=github --select="E,F,PLC,PLE,UP,W,YTT" --ignore="E721,PLC1901,S101,UP031" --target-version=py38 . + + lint-js: + name: Lint JS + runs-on: macos-14 + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Use Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + - name: Install Dependencies + run: npm install + - name: Lint + run: npm run lint + + check-engines: + name: Check Engines + runs-on: macos-14 + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Use Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + - name: Install Dependencies + run: npm install + - name: Check Engines + run: | + # TODO: move this to its own action + npm install @npmcli/arborist@7 semver@7 --no-save + node .github/scripts/check-engines.js + + test-pack: + name: Test Pack + runs-on: macos-14 + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Use Node.js 20.x + uses: actions/setup-node@v4 + with: + node-version: 20.x + - name: Update npm + run: npm install npm@latest -g + - name: Install Dependencies + run: npm install + - name: Pack + id: pack + env: + NODE_GYP_TEMP_DIR: '${{ runner.temp }}/node-gyp' + run: | + mkdir -p $NODE_GYP_TEMP_DIR + npm pack + tar xzf *.tgz -C $NODE_GYP_TEMP_DIR --strip-components=1 + cp -r test/ $NODE_GYP_TEMP_DIR/test/ + echo "dir=$NODE_GYP_TEMP_DIR" >> "$GITHUB_OUTPUT" + - name: Test + working-directory: ${{ steps.pack.outputs.dir }} + env: + FULL_TEST: '1' + run: | + npm install + # npm test # Why is this running Windows tests on macOS? + + tests: + # lint-python takes ~5 seconds, so wait for it to pass before running the full matrix of tests. + needs: [lint-python] + strategy: + fail-fast: false + max-parallel: 15 + matrix: + os: [macos-14] + python: ["3.8", "3.10", "3.12"] + node: [16.x, 18.x, 20.x] + name: ${{ matrix.os }} - ${{ matrix.python }} - ${{ matrix.node }} + runs-on: macos-14 + + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + - name: Use Node.js ${{ matrix.node }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node }} + - name: Use Python ${{ matrix.python }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python }} + env: + PYTHON_VERSION: ${{ matrix.python }} # Why do this? + - name: Install Dependencies + run: | + npm install + pip install pytest + - name: Run Python Tests + run: python -m pytest + - name: Run Tests (macOS or Linux) + shell: bash + run: npm test --python="${pythonLocation}/python" + env: + FULL_TEST: ${{ (matrix.node == '20.x' && matrix.python == '3.12') && '1' || '0' }}