From 92f48144ac4d517b97e446b1425fb16a4faeef00 Mon Sep 17 00:00:00 2001 From: "Daniel A. Wozniak" Date: Fri, 22 Nov 2024 14:13:15 -0700 Subject: [PATCH] Add mac and windows --- .github/workflows/test-packages-action.yml | 269 ++++++++++++++++++++- 1 file changed, 266 insertions(+), 3 deletions(-) diff --git a/.github/workflows/test-packages-action.yml b/.github/workflows/test-packages-action.yml index a7d61556bd7..b97cd49f15e 100644 --- a/.github/workflows/test-packages-action.yml +++ b/.github/workflows/test-packages-action.yml @@ -57,8 +57,8 @@ env: jobs: - test: - name: Test + test-linux: + name: ${{ matrix.distro-slug }} runs-on: - ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || 'linux-arm64' }} container: @@ -189,12 +189,275 @@ jobs: !artifacts/salt-*.tar.* include-hidden-files: true + test-macos: + name: ${{ matrix.distro-slug }} + runs-on: ${{ matrix.runner }} + timeout-minutes: 150 # 2 & 1/2 Hours - More than this and something is wrong (MacOS needs a little more time) + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['macos'] }} + + steps: + + - name: "Throttle Builds" + shell: bash + run: | + t=$(python3 -c 'import random, sys; sys.stdout.write(str(random.randint(1, 15)))'); echo "Sleeping $t seconds"; sleep "$t" + + - name: "Set `TIMESTAMP` environment variable" + shell: bash + run: | + echo "TIMESTAMP=$(date +%s)" | tee -a "$GITHUB_ENV" + + - name: Checkout Source Code + uses: actions/checkout@v4 + + - name: Download Packages + uses: actions/download-artifact@v4 + with: + name: salt-${{ inputs.salt-version }}-${{ matrix.arch }}-${{ matrix.pkg_type }} + path: artifacts/pkg/ + + - name: Install System Dependencies + run: | + brew install tree + + - name: List Packages + run: | + tree artifacts/pkg/ + + - name: Download Onedir Tarball as an Artifact + uses: actions/download-artifact@v4 + with: + name: ${{ inputs.package-name }}-${{ inputs.salt-version }}-onedir-${{ matrix.platform }}-${{ matrix.arch }}.tar.xz + path: artifacts/ + + - name: Decompress Onedir Tarball + shell: bash + run: | + python3 -c "import os; os.makedirs('artifacts', exist_ok=True)" + cd artifacts + tar xvf ${{ inputs.package-name }}-${{ inputs.salt-version }}-onedir-${{ matrix.platform }}-${{ matrix.arch }}.tar.xz + + - name: Set up Python ${{ inputs.python-version }} + uses: actions/setup-python@v5 + with: + python-version: "${{ inputs.python-version }}" + + - name: Install Nox + run: | + python3 -m pip install 'nox==${{ inputs.nox-version }}' + env: + PIP_INDEX_URL: https://pypi.org/simple + + - name: Download nox.macos.${{ matrix.arch }}.tar.* artifact for session ${{ inputs.nox-session }} + uses: actions/download-artifact@v4 + with: + name: nox-macos-${{ matrix.arch }}-${{ inputs.nox-session }} + + - name: Decompress .nox Directory + run: | + nox --force-color -e decompress-dependencies -- macos ${{ matrix.arch }} + + - name: Show System Info + env: + SKIP_REQUIREMENTS_INSTALL: "1" + PRINT_SYSTEM_INFO_ONLY: "1" + run: | + sudo -E nox --force-color -e ${{ inputs.nox-session }}-pkgs -- ${{ matrix.tests-chunk }} + + - name: Run Package Tests + env: + SKIP_REQUIREMENTS_INSTALL: "1" + PRINT_TEST_SELECTION: "0" + PRINT_TEST_PLAN_ONLY: "0" + PRINT_SYSTEM_INFO: "0" + RERUN_FAILURES: "1" + GITHUB_ACTIONS_PIPELINE: "1" + SKIP_INITIAL_GH_ACTIONS_FAILURES: "1" + COVERAGE_CONTEXT: ${{ matrix.distro-slug }} + run: | + sudo -E nox --force-color -e ${{ inputs.nox-session }}-pkgs -- ${{ matrix.tests-chunk }} \ + ${{ matrix.version && format('--prev-version={0}', matrix.version) || ''}} + + - name: Fix file ownership + run: | + sudo chown -R "$(id -un)" . + + - name: Prepare Test Run Artifacts + id: download-artifacts-from-vm + if: always() + run: | + # Delete the salt onedir, we won't need it anymore and it will prevent + # from it showing in the tree command below + rm -rf artifacts/salt* + tree -a artifacts + + - name: Upload Test Run Artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: pkg-testrun-artifacts-${{ matrix.distro-slug }}-${{ matrix.pkg_type }}-${{ matrix.arch }}-${{ matrix.tests-chunk }}-${{ matrix.version || 'no-version'}}-${{ env.TIMESTAMP }} + path: | + artifacts/ + !artifacts/pkg/* + !artifacts/salt/* + !artifacts/salt-*.tar.* + include-hidden-files: true + + + test-windows: + name: ${{ matrix.distro-slug }} + runs-on: ${{ matrix.distro-slug }} + timeout-minutes: 120 # 2 Hours - More than this and something is wrong + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['linux'] }} + + steps: + + - name: Set up Python ${{ inputs.python-version }} + uses: actions/setup-python@v5 + with: + python-version: "${{ inputs.python-version }}" + + - name: "Throttle Builds" + shell: bash + run: | + t=$(python3 -c 'import random, sys; sys.stdout.write(str(random.randint(1, 15)))'); echo "Sleeping $t seconds"; sleep "$t" + + + - name: "Set `TIMESTAMP` environment variable" + shell: bash + run: | + echo "TIMESTAMP=$(date +%s)" | tee -a "$GITHUB_ENV" + + - name: Checkout Source Code + uses: actions/checkout@v4 + + - name: Download Packages + uses: actions/download-artifact@v4 + with: + name: ${{ inputs.package-name }}-${{ inputs.salt-version }}-${{ matrix.arch }}-${{ matrix.pkg_type }} + path: ./artifacts/pkg/ + + - name: Download Onedir Tarball as an Artifact + uses: actions/download-artifact@v4 + with: + name: ${{ inputs.package-name }}-${{ inputs.salt-version }}-onedir-${{ matrix.platform }}-${{ matrix.arch }}.tar.xz + path: ./artifacts/ + + - name: Decompress Onedir Tarball + shell: bash + run: | + python3 -c "import os; os.makedirs('artifacts', exist_ok=True)" + cd artifacts + tar xvf ${{ inputs.package-name }}-${{ inputs.salt-version }}-onedir-${{ matrix.platform }}-${{ matrix.arch }}.tar.xz + + - name: Install Nox + run: | + python3 -m pip install 'nox==${{ inputs.nox-version }}' + env: + PIP_INDEX_URL: https://pypi.org/simple + + - run: python3 --version + + - name: Download nox.windows.${{ matrix.arch }}.tar.* artifact for session ${{ inputs.nox-session }} + uses: actions/download-artifact@v4 + with: + name: nox-windows-${{ matrix.arch }}-${{ inputs.nox-session }} + + - name: Decompress .nox Directory + run: | + nox --force-color -e decompress-dependencies -- windows ${{ matrix.arch }} + + - name: List Important Directories + run: | + dir d:/ + dir . + dir artifacts/ + dir artifacts/pkg + dir .nox/ci-test-onedir/Scripts + + - name: Check onedir python + continue-on-error: true + run: | + artifacts/salt/Scripts/python.exe --version + + - name: Check nox python + continue-on-error: true + run: | + .nox/ci-test-onedir/Scripts/python.exe --version + + - name: Show System Info + env: + SKIP_REQUIREMENTS_INSTALL: "1" + SKIP_CODE_COVERAGE: "1" + PRINT_SYSTEM_INFO_ONLY: "1" + PYTHONUTF8: "1" + run: | + nox --force-color -f noxfile.py -e "${{ inputs.nox-session }}-pkgs" -- '${{ matrix.tests-chunk }}' --log-cli-level=debug + + - name: Run Package Tests + env: + SKIP_REQUIREMENTS_INSTALL: "1" + PRINT_TEST_SELECTION: "0" + PRINT_TEST_PLAN_ONLY: "0" + PRINT_SYSTEM_INFO: "0" + RERUN_FAILURES: "1" + GITHUB_ACTIONS_PIPELINE: "1" + SKIP_INITIAL_ONEDIR_FAILURES: "1" + SKIP_INITIAL_GH_ACTIONS_FAILURES: "1" + COVERAGE_CONTEXT: ${{ matrix.distro-slug }} + OUTPUT_COLUMNS: "190" + PYTHONUTF8: "1" + run: > + nox --force-color -f noxfile.py -e ${{ inputs.nox-session }}-pkgs -- ${{ matrix.tests-chunk }} + ${{ matrix.version && format('--prev-version={0}', matrix.version) || ''}} + + - name: Prepare Test Run Artifacts + id: download-artifacts-from-vm + if: always() + shell: bash + run: | + # Delete the salt onedir, we won't need it anymore and it will prevent + # from it showing in the tree command below + rm -rf artifacts/salt* + if [ "${{ inputs.skip-code-coverage }}" != "true" ]; then + mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ matrix.distro-slug }}.${{ inputs.nox-session }}.${{ matrix.transport }}.${{ matrix.tests-chunk }} + fi + + - name: Upload Test Run Log Artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: pkg-testrun-log-artifacts-${{ matrix.distro-slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ env.TIMESTAMP }} + path: | + artifacts/logs + include-hidden-files: true + + - name: Upload Test Run Artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: pkg-testrun-artifacts-${{ matrix.distro-slug }}-${{ matrix.pkg_type }}-${{ matrix.arch }}-${{ matrix.tests-chunk }}-${{ matrix.version || 'no-version'}}-${{ env.TIMESTAMP }} + path: | + artifacts/ + !artifacts/pkg/* + !artifacts/salt/* + !artifacts/salt-*.tar.* + include-hidden-files: true + report: name: Report runs-on: ubuntu-latest if: always() && fromJSON(needs.generate-matrix.outputs.build-reports) && needs.test.result != 'cancelled' && needs.test.result != 'skipped' needs: - - test + - test-linux + - test-macos + - test-windows strategy: matrix: include: ${{ fromJSON(inputs.matrix)['linux'] }}