diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 690b27ae672..c5fcbf50fca 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -6,6 +6,3 @@ contact_links: - name: Salt-Users Forum url: https://groups.google.com/forum/#!forum/salt-users about: Please ask and answer questions here. - - name: Salt on LiberaChat - url: https://web.libera.chat/#salt - about: Please ask and answer questions here. diff --git a/.github/ISSUE_TEMPLATE/tech-debt.md b/.github/ISSUE_TEMPLATE/tech-debt.md index 6761145a442..0fe65bff3c9 100644 --- a/.github/ISSUE_TEMPLATE/tech-debt.md +++ b/.github/ISSUE_TEMPLATE/tech-debt.md @@ -8,7 +8,7 @@ assignees: '' --- ### Description of the tech debt to be addressed, include links and screenshots - + ### Versions Report (Provided by running `salt --versions-report`. Please also mention any differences in master/minion versions.) diff --git a/.github/actionlint.yaml b/.github/actionlint.yaml index f37fdbea969..b651ab58f18 100644 --- a/.github/actionlint.yaml +++ b/.github/actionlint.yaml @@ -1,14 +1,5 @@ self-hosted-runner: # Labels of self-hosted runner in array of string labels: - - bastion - - x86_64 - - arm64 - - aarch64 - - amd64 - - repo-nightly - - repo-staging - - repo-release - - medium - - large - - macos-13-xlarge + - linux-x86_64 + - linux-arm64 diff --git a/.github/actions/cache/action.yml b/.github/actions/cache/action.yml index 020b9d1e6b8..b8bea242cf0 100644 --- a/.github/actions/cache/action.yml +++ b/.github/actions/cache/action.yml @@ -26,10 +26,6 @@ inputs: description: 'Check if a cache entry exists for the given input(s) (key, restore-keys) without downloading the cache' default: 'false' required: false - save-always: - description: 'Run the post step to save the cache even if another step before fails' - default: 'false' - required: false outputs: cache-hit: @@ -49,7 +45,6 @@ runs: echo "GHA_CACHE_ENABLE_CROSS_OS_ARCHIVE=${{ inputs.enableCrossOsArchive }}" | tee -a "${GITHUB_ENV}" echo "GHA_CACHE_FAIL_ON_CACHE_MISS=${{ inputs.fail-on-cache-miss }}" | tee -a "${GITHUB_ENV}" echo "GHA_CACHE_LOOKUP_ONLY=${{ inputs.lookup-only }}" | tee -a "${GITHUB_ENV}" - echo "GHA_CACHE_SAVE_ALWAYS=${{ inputs.save-always }}" | tee -a "${GITHUB_ENV}" echo "GHA_CACHE_RESTORE_KEYS=${{ inputs.restore-keys }}" | tee -a "${GITHUB_ENV}" echo "GHA_CACHE_UPLOAD_CHUNK_SIZE=${{ inputs.upload-chunk-size }}" | tee -a "${GITHUB_ENV}" @@ -63,7 +58,6 @@ runs: enableCrossOsArchive: ${{ env.GHA_CACHE_ENABLE_CROSS_OS_ARCHIVE }} fail-on-cache-miss: ${{ env.GHA_CACHE_FAIL_ON_CACHE_MISS }} lookup-only: ${{ env.GHA_CACHE_LOOKUP_ONLY }} - save-always: ${{ env.GHA_CACHE_SAVE_ALWAYS }} restore-keys: ${{ env.GHA_CACHE_RESTORE_KEYS }} upload-chunk-size: ${{ env.GHA_CACHE_UPLOAD_CHUNK_SIZE }} @@ -97,7 +91,6 @@ runs: enableCrossOsArchive: ${{ env.GHA_CACHE_ENABLE_CROSS_OS_ARCHIVE }} fail-on-cache-miss: ${{ env.GHA_CACHE_FAIL_ON_CACHE_MISS }} lookup-only: ${{ env.GHA_CACHE_LOOKUP_ONLY }} - save-always: ${{ env.GHA_CACHE_SAVE_ALWAYS }} restore-keys: ${{ env.GHA_CACHE_RESTORE_KEYS }} upload-chunk-size: ${{ env.GHA_CACHE_UPLOAD_CHUNK_SIZE }} diff --git a/.github/actions/setup-python-tools-scripts/action.yml b/.github/actions/setup-python-tools-scripts/action.yml index e640ffe86f7..21390a12c4a 100644 --- a/.github/actions/setup-python-tools-scripts/action.yml +++ b/.github/actions/setup-python-tools-scripts/action.yml @@ -54,10 +54,13 @@ runs: working-directory: ${{ inputs.cwd }} run: | PYTHON_EXE=${{ steps.tools-virtualenv.outputs.python-executable }} + ${PYTHON_EXE} -m ensurepip --upgrade (${PYTHON_EXE} -m pip install --help | grep break-system-packages > /dev/null 2>&1) && exitcode=0 || exitcode=1 if [ $exitcode -eq 0 ]; then + ${PYTHON_EXE} -m pip install --break-system-packages --upgrade setuptools ${PYTHON_EXE} -m pip install --break-system-packages -r requirements/static/ci/py${{ steps.get-python-version.outputs.version }}/tools.txt else + ${PYTHON_EXE} -m pip install --upgrade setuptools ${PYTHON_EXE} -m pip install -r requirements/static/ci/py${{ steps.get-python-version.outputs.version }}/tools.txt fi diff --git a/.github/config.yml b/.github/config.yml index b89e3c822bd..1d916579c6c 100644 --- a/.github/config.yml +++ b/.github/config.yml @@ -11,18 +11,16 @@ newIssueWelcomeComment: > Also, check out some of our community resources including: - - [Community Wiki](https://github.com/saltstack/community/wiki) - [Salt’s Contributor Guide](https://docs.saltproject.io/en/master/topics/development/contributing.html) - [Join our Community Discord](https://discord.com/invite/J7b7EscrAs) - - [IRC on LiberaChat](https://web.libera.chat/#salt) - [Salt Project YouTube channel](https://www.youtube.com/channel/UCpveTIucFx9ljGelW63-BWg) - - [Salt Project Twitch channel](https://www.twitch.tv/saltprojectoss) + - [Community Wiki](https://github.com/saltstack/community/wiki) There are lots of ways to get involved in our community. Every month, there are around a dozen opportunities to meet with other contributors and the Salt Core team and collaborate in real time. The best way to keep track is by subscribing to the Salt Community Events Calendar. - If you have additional questions, email us at saltproject@vmware.com. We’re glad + If you have additional questions, email us at saltproject.pdl@broadcom.com. We’re glad you’ve joined our community and look forward to doing awesome things with you! @@ -37,18 +35,16 @@ newPRWelcomeComment: > Also, check out some of our community resources including: - - [Community Wiki](https://github.com/saltstack/community/wiki) - [Salt’s Contributor Guide](https://docs.saltproject.io/en/master/topics/development/contributing.html) - [Join our Community Discord](https://discord.com/invite/J7b7EscrAs) - - [IRC on LiberaChat](https://web.libera.chat/#salt) - [Salt Project YouTube channel](https://www.youtube.com/channel/UCpveTIucFx9ljGelW63-BWg) - - [Salt Project Twitch channel](https://www.twitch.tv/saltprojectoss) + - [Community Wiki](https://github.com/saltstack/community/wiki) There are lots of ways to get involved in our community. Every month, there are around a dozen opportunities to meet with other contributors and the Salt Core team and collaborate in real time. The best way to keep track is by subscribing to the Salt Community Events Calendar. - If you have additional questions, email us at saltproject@vmware.com. We’re glad + If you have additional questions, email us at saltproject.pdl@broadcom.com. We’re glad you’ve joined our community and look forward to doing awesome things with you! diff --git a/.github/workflows/build-deps-ci-action.yml b/.github/workflows/build-deps-ci-action.yml index 577f7c55c84..5ccabd6d822 100644 --- a/.github/workflows/build-deps-ci-action.yml +++ b/.github/workflows/build-deps-ci-action.yml @@ -34,6 +34,14 @@ on: type: string description: The onedir package name to use default: salt + matrix: + required: true + type: string + description: Json job matrix config + linux_arm_runner: + required: true + type: string + description: Json job matrix config env: @@ -48,54 +56,22 @@ env: jobs: - generate-matrix: - name: Generate Matrix - runs-on: ubuntu-latest - outputs: - matrix-include: ${{ steps.generate-matrix.outputs.matrix }} - env: - PIP_INDEX_URL: https://pypi.org/simple - steps: - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Checkout Source Code - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - env: - PIP_INDEX_URL: https://pypi.org/simple - - - name: Generate Test Matrix - id: generate-matrix - run: | - tools ci deps-matrix - - linux-dependencies: name: Linux - needs: - - generate-matrix + if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }} runs-on: - - self-hosted - - linux - - bastion + - ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || inputs.linux_arm_runner }} env: - USE_S3_CACHE: 'true' + USE_S3_CACHE: 'false' timeout-minutes: 90 strategy: fail-fast: false matrix: - include: ${{ fromJSON(needs.generate-matrix.outputs.matrix-include)['linux'] }} + include: ${{ fromJSON(inputs.matrix)['linux'] }} steps: + - uses: actions/setup-python@v5 + with: + python-version: '3.10' - name: "Throttle Builds" shell: bash @@ -105,6 +81,10 @@ jobs: - name: Checkout Source Code uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + - name: Cache nox.linux.${{ matrix.arch }}.tar.* for session ${{ inputs.nox-session }} id: nox-dependencies-cache uses: ./.github/actions/cache @@ -138,53 +118,34 @@ jobs: with: cache-prefix: ${{ inputs.cache-prefix }}-build-deps-ci - - name: Get Salt Project GitHub Actions Bot Environment + - name: Install System Dependencies if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" + echo true - - name: Start VM - if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' - id: spin-up-vm - run: | - tools --timestamps vm create --environment "${SPB_ENVIRONMENT}" --retries=2 ${{ matrix.distro-slug }} - - - name: List Free Space + - name: Install Nox if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' run: | - tools --timestamps vm ssh ${{ matrix.distro-slug }} -- df -h || true - - - name: Upload Checkout To VM - if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' - run: | - tools --timestamps vm rsync ${{ matrix.distro-slug }} + python3 -m pip install 'nox==${{ inputs.nox-version }}' - name: Install Dependencies if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' + env: + PRINT_TEST_SELECTION: "0" + PRINT_SYSTEM_INFO: "0" + RELENV_BUILDENV: "1" run: | - tools --timestamps vm install-dependencies --nox-session=${{ inputs.nox-session }} ${{ matrix.distro-slug }} + nox --install-only -e ${{ inputs.nox-session }} - name: Cleanup .nox Directory if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' run: | - tools --timestamps vm pre-archive-cleanup ${{ matrix.distro-slug }} + nox --force-color -e "pre-archive-cleanup(pkg=False)" - name: Compress .nox Directory if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' run: | - tools --timestamps vm compress-dependencies ${{ matrix.distro-slug }} - - - name: Download Compressed .nox Directory - if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' - run: | - tools --timestamps vm download-dependencies ${{ matrix.distro-slug }} - - - name: Destroy VM - if: always() && steps.nox-dependencies-cache.outputs.cache-hit != 'true' - run: | - tools --timestamps vm destroy --no-wait ${{ matrix.distro-slug }} + nox --force-color -e compress-dependencies -- linux ${{ matrix.arch }} - name: Upload Nox Requirements Tarball uses: actions/upload-artifact@v4 @@ -194,14 +155,13 @@ jobs: macos-dependencies: name: MacOS - needs: - - generate-matrix - runs-on: ${{ matrix.distro-slug == 'macos-13-arm64' && 'macos-13-xlarge' || matrix.distro-slug }} + runs-on: ${{ matrix.arch == 'x86_64' && 'macos-13' || 'macos-14' }} + if: ${{ toJSON(fromJSON(inputs.matrix)['macos']) != '[]' }} timeout-minutes: 90 strategy: fail-fast: false matrix: - include: ${{ fromJSON(needs.generate-matrix.outputs.matrix-include)['macos'] }} + include: ${{ fromJSON(inputs.matrix)['macos'] }} env: PIP_INDEX_URL: https://pypi.org/simple steps: @@ -280,21 +240,19 @@ jobs: name: nox-macos-${{ matrix.arch }}-${{ inputs.nox-session }} path: nox.macos.${{ matrix.arch }}.tar.* + windows-dependencies: - needs: - - generate-matrix name: Windows - runs-on: - - self-hosted - - linux - - bastion + runs-on: windows-latest + if: ${{ toJSON(fromJSON(inputs.matrix)['windows']) != '[]' }} env: - USE_S3_CACHE: 'true' + USE_S3_CACHE: 'false' + GITHUB_WORKSPACE: 'C:\Windows\Temp\testing' timeout-minutes: 90 strategy: fail-fast: false matrix: - include: ${{ fromJSON(needs.generate-matrix.outputs.matrix-include)['windows'] }} + include: ${{ fromJSON(inputs.matrix)['windows'] }} steps: - name: "Throttle Builds" @@ -302,6 +260,10 @@ jobs: run: | t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" + - name: "Show environment" + run: | + env + - name: Checkout Source Code uses: actions/checkout@v4 @@ -327,10 +289,11 @@ jobs: cd artifacts tar xvf ${{ inputs.package-name }}-${{ inputs.salt-version }}-onedir-windows-${{ matrix.arch }}.tar.xz - - name: PyPi Proxy + - name: Set up Python ${{ inputs.python-version }} if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' - run: | - sed -i '7s;^;--index-url=${{ vars.PIP_INDEX_URL }} --trusted-host ${{ vars.PIP_TRUSTED_HOST }} --extra-index-url=${{ vars.PIP_EXTRA_INDEX_URL }}\n;' requirements/static/ci/*/*.txt + uses: actions/setup-python@v5 + with: + python-version: "${{ inputs.python-version }}" - name: Setup Python Tools Scripts if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' @@ -338,53 +301,33 @@ jobs: with: cache-prefix: ${{ inputs.cache-prefix }}-build-deps-ci - - name: Get Salt Project GitHub Actions Bot Environment + - name: Install System Dependencies if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" + echo true - - name: Start VM - if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' - id: spin-up-vm - run: | - tools --timestamps vm create --environment "${SPB_ENVIRONMENT}" --retries=2 ${{ matrix.distro-slug }} - - - name: List Free Space + - name: Install Nox if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' run: | - tools --timestamps vm ssh ${{ matrix.distro-slug }} -- df -h || true - - - name: Upload Checkout To VM - if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' - run: | - tools --timestamps vm rsync ${{ matrix.distro-slug }} + python3 -m pip install 'nox==${{ inputs.nox-version }}' - name: Install Dependencies if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' + env: + PRINT_TEST_SELECTION: "0" + PRINT_SYSTEM_INFO: "0" run: | - tools --timestamps vm install-dependencies --nox-session=${{ inputs.nox-session }} ${{ matrix.distro-slug }} + nox --install-only -e ${{ inputs.nox-session }} - name: Cleanup .nox Directory if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' run: | - tools --timestamps vm pre-archive-cleanup ${{ matrix.distro-slug }} + nox --force-color -e "pre-archive-cleanup(pkg=False)" - name: Compress .nox Directory if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' run: | - tools --timestamps vm compress-dependencies ${{ matrix.distro-slug }} - - - name: Download Compressed .nox Directory - if: steps.nox-dependencies-cache.outputs.cache-hit != 'true' - run: | - tools --timestamps vm download-dependencies ${{ matrix.distro-slug }} - - - name: Destroy VM - if: always() && steps.nox-dependencies-cache.outputs.cache-hit != 'true' - run: | - tools --timestamps vm destroy --no-wait ${{ matrix.distro-slug }} + nox --force-color -e compress-dependencies -- windows ${{ matrix.arch }} - name: Upload Nox Requirements Tarball uses: actions/upload-artifact@v4 diff --git a/.github/workflows/build-deps-onedir.yml b/.github/workflows/build-deps-onedir.yml index f687306a023..a5f4f4fc6f6 100644 --- a/.github/workflows/build-deps-onedir.yml +++ b/.github/workflows/build-deps-onedir.yml @@ -8,12 +8,6 @@ on: type: string required: true description: The Salt version to set prior to building packages. - github-hosted-runners: - type: boolean - required: true - self-hosted-runners: - type: boolean - required: true cache-seed: required: true type: string @@ -26,6 +20,14 @@ on: required: true type: string description: The version of python to use with relenv + matrix: + required: true + type: string + description: Json job matrix config + linux_arm_runner: + required: true + type: string + description: Json job matrix config env: RELENV_DATA: "${{ github.workspace }}/.relenv" @@ -41,20 +43,15 @@ jobs: build-deps-linux: name: Linux - if: ${{ inputs.self-hosted-runners }} + if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }} + runs-on: + - ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || inputs.linux_arm_runner }} strategy: fail-fast: false matrix: - arch: - - x86_64 - - arm64 - runs-on: - - self-hosted - - linux - - medium - - ${{ matrix.arch }} + include: ${{ fromJSON(inputs.matrix)['linux'] }} env: - USE_S3_CACHE: 'true' + USE_S3_CACHE: 'false' steps: - name: "Throttle Builds" @@ -64,6 +61,10 @@ jobs: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: @@ -89,19 +90,23 @@ jobs: build-deps-macos: name: macOS - if: ${{ inputs.github-hosted-runners }} + if: ${{ toJSON(fromJSON(inputs.matrix)['macos']) != '[]' }} strategy: fail-fast: false max-parallel: 2 matrix: - arch: ${{ github.event.repository.fork && fromJSON('["x86_64"]') || fromJSON('["x86_64", "arm64"]') }} + include: ${{ fromJSON(inputs.matrix)['macos'] }} runs-on: - - ${{ matrix.arch == 'arm64' && 'macos-13-xlarge' || 'macos-12' }} + - ${{ matrix.arch == 'arm64' && 'macos-14' || 'macos-13' }} env: USE_S3_CACHE: 'false' PIP_INDEX_URL: https://pypi.org/simple steps: + - name: "Check cores" + shell: bash + run: sysctl -n hw.ncpu + - name: "Throttle Builds" shell: bash run: | @@ -139,14 +144,12 @@ jobs: build-deps-windows: name: Windows - if: ${{ inputs.github-hosted-runners }} + if: ${{ toJSON(fromJSON(inputs.matrix)['windows']) != '[]' }} strategy: fail-fast: false max-parallel: 2 matrix: - arch: - - x86 - - amd64 + include: ${{ fromJSON(inputs.matrix)['windows'] }} runs-on: windows-latest env: USE_S3_CACHE: 'false' diff --git a/.github/workflows/build-docs.yml b/.github/workflows/build-docs.yml index 88c244d3a54..3372769516a 100644 --- a/.github/workflows/build-docs.yml +++ b/.github/workflows/build-docs.yml @@ -24,15 +24,15 @@ jobs: build: name: Build runs-on: - - ubuntu-latest + - ubuntu-22.04 strategy: fail-fast: false matrix: docs-output: - - linkcheck - - spellcheck + # XXX re-enable lintcheck and spellcheck then fix the errors + # - linkcheck + # - spellcheck - html - # - pdf steps: - uses: actions/checkout@v4 diff --git a/.github/workflows/build-packages.yml b/.github/workflows/build-packages.yml index 47a24bf2975..b78cc6e68a8 100644 --- a/.github/workflows/build-packages.yml +++ b/.github/workflows/build-packages.yml @@ -36,6 +36,14 @@ on: required: true type: string description: Seed used to invalidate caches + matrix: + required: true + type: string + description: Json job matrix config + linux_arm_runner: + required: true + type: string + description: Json job matrix config env: COLUMNS: 190 @@ -46,19 +54,199 @@ env: jobs: + build-deb-packages: + name: DEB + if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }} + runs-on: + - ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || inputs.linux_arm_runner }} + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['linux'] }} + + container: + image: ghcr.io/saltstack/salt-ci-containers/packaging:debian-12 + + steps: + # Checkout here so we can easily use custom actions + - uses: actions/checkout@v4 + + # We need a more recent rustc + - name: Install a more recent `rustc` + if: ${{ inputs.source == 'src' }} + uses: actions-rust-lang/setup-rust-toolchain@v1 + + - name: Set rust environment variables + if: ${{ inputs.source == 'src' }} + run: | + CARGO_HOME=${CARGO_HOME:-${HOME}/.cargo} + export CARGO_HOME + echo "CARGO_HOME=${CARGO_HOME}" | tee -a "${GITHUB_ENV}" + echo "${CARGO_HOME}/bin" | tee -a "${GITHUB_PATH}" + + # Checkout here for the build process + - name: Checkout in build directory + uses: actions/checkout@v4 + with: + path: + pkgs/checkout/ + + - name: Download Onedir Tarball as an Artifact + uses: actions/download-artifact@v4 + with: + name: salt-${{ inputs.salt-version }}-onedir-linux-${{ matrix.arch }}.tar.xz + path: pkgs/checkout/artifacts/ + + - name: Download Release Patch + if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} + uses: actions/download-artifact@v4 + with: + name: salt-${{ inputs.salt-version }}.patch + path: pkgs/checkout/ + + - name: Setup Python Tools Scripts + uses: ./.github/actions/setup-python-tools-scripts + with: + cwd: pkgs/checkout/ + cache-prefix: ${{ inputs.cache-prefix }} + + - name: Setup Salt Version + id: setup-salt-version + uses: ./.github/actions/setup-salt-version + with: + salt-version: "${{ inputs.salt-version }}" + cwd: pkgs/checkout/ + + - name: Configure Git + if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} + working-directory: pkgs/checkout/ + run: | + tools pkg configure-git + + - name: Apply release patch + if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} + working-directory: pkgs/checkout/ + run: | + tools pkg apply-release-patch salt-${{ inputs.salt-version }}.patch --delete + + - name: Build Deb + working-directory: pkgs/checkout/ + run: | + tools pkg build deb --relenv-version=${{ inputs.relenv-version }} --python-version=${{ inputs.python-version }} ${{ + inputs.source == 'onedir' && + format('--onedir=salt-{0}-onedir-linux-{1}.tar.xz', inputs.salt-version, matrix.arch) + || + format('--arch={0}', matrix.arch) + }} + + - name: Cleanup + run: | + rm -rf pkgs/checkout/ + + - name: Set Artifact Name + id: set-artifact-name + run: | + if [ "${{ inputs.source }}" != "src" ]; then + echo "artifact-name=salt-${{ inputs.salt-version }}-${{ matrix.arch }}-deb" >> "$GITHUB_OUTPUT" + else + echo "artifact-name=salt-${{ inputs.salt-version }}-${{ matrix.arch }}-deb-from-src" >> "$GITHUB_OUTPUT" + fi + + - name: Upload DEBs + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.set-artifact-name.outputs.artifact-name }} + path: ${{ github.workspace }}/pkgs/* + retention-days: 7 + if-no-files-found: error + + build-rpm-packages: + name: RPM + if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }} + runs-on: + - ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || inputs.linux_arm_runner }} + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['linux'] }} + + container: + image: ghcr.io/saltstack/salt-ci-containers/packaging:rockylinux-9 + + steps: + - uses: actions/checkout@v4 + + - name: Download Onedir Tarball as an Artifact + uses: actions/download-artifact@v4 + with: + name: salt-${{ inputs.salt-version }}-onedir-linux-${{ matrix.arch }}.tar.xz + path: artifacts/ + + - name: Download Release Patch + if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} + uses: actions/download-artifact@v4 + with: + name: salt-${{ inputs.salt-version }}.patch + + - name: Setup Python Tools Scripts + uses: ./.github/actions/setup-python-tools-scripts + with: + cache-prefix: ${{ inputs.cache-prefix }} + + - name: Setup Salt Version + id: setup-salt-version + uses: ./.github/actions/setup-salt-version + with: + salt-version: "${{ inputs.salt-version }}" + + - name: Configure Git + if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} + run: | + tools pkg configure-git + + - name: Apply release patch + if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} + run: | + tools pkg apply-release-patch salt-${{ inputs.salt-version }}.patch --delete + + - name: Build RPM + run: | + tools pkg build rpm --relenv-version=${{ inputs.relenv-version }} --python-version=${{ inputs.python-version }} ${{ + inputs.source == 'onedir' && + format('--onedir=salt-{0}-onedir-linux-{1}.tar.xz', inputs.salt-version, matrix.arch) + || + format('--arch={0}', matrix.arch) + }} + + - name: Set Artifact Name + id: set-artifact-name + run: | + if [ "${{ inputs.source }}" != "src" ]; then + echo "artifact-name=salt-${{ inputs.salt-version }}-${{ matrix.arch }}-rpm" >> "$GITHUB_OUTPUT" + else + echo "artifact-name=salt-${{ inputs.salt-version }}-${{ matrix.arch }}-rpm-from-src" >> "$GITHUB_OUTPUT" + fi + + - name: Upload RPMs + uses: actions/upload-artifact@v4 + with: + name: ${{ steps.set-artifact-name.outputs.artifact-name }} + path: ~/rpmbuild/RPMS/${{ matrix.arch == 'arm64' && 'aarch64' || matrix.arch }}/*.rpm + retention-days: 7 + if-no-files-found: error + build-macos-pkgs: name: macOS + if: ${{ toJSON(fromJSON(inputs.matrix)['macos']) != '[]' }} environment: ${{ inputs.environment }} strategy: fail-fast: false matrix: - arch: ${{ github.event.repository.fork && fromJSON('["x86_64"]') || fromJSON('["x86_64", "arm64"]') }} - source: - - ${{ inputs.source }} + include: ${{ fromJSON(inputs.matrix)['macos'] }} env: PIP_INDEX_URL: https://pypi.org/simple runs-on: - - ${{ matrix.arch == 'arm64' && 'macos-13-xlarge' || 'macos-12' }} + - ${{ matrix.arch == 'arm64' && 'macos-14' || 'macos-13' }} steps: - name: Check Package Signing Enabled @@ -162,212 +350,15 @@ jobs: retention-days: 7 if-no-files-found: error - build-deb-packages: - name: DEB - runs-on: - - self-hosted - - linux - - medium - - ${{ matrix.arch }} - strategy: - fail-fast: false - matrix: - arch: - - x86_64 - - arm64 - source: - - ${{ inputs.source }} - - container: - image: ghcr.io/saltstack/salt-ci-containers/packaging:debian-12 - - steps: - # Checkout here so we can easily use custom actions - - uses: actions/checkout@v4 - - # We need a more recent rustc - - name: Install a more recent `rustc` - if: ${{ inputs.source == 'src' }} - uses: actions-rust-lang/setup-rust-toolchain@v1 - - - name: Set rust environment variables - if: ${{ inputs.source == 'src' }} - run: | - CARGO_HOME=${CARGO_HOME:-${HOME}/.cargo} - export CARGO_HOME - echo "CARGO_HOME=${CARGO_HOME}" | tee -a "${GITHUB_ENV}" - echo "${CARGO_HOME}/bin" | tee -a "${GITHUB_PATH}" - - # Checkout here for the build process - - name: Checkout in build directory - uses: actions/checkout@v4 - with: - path: - pkgs/checkout/ - - - name: Download Onedir Tarball as an Artifact - uses: actions/download-artifact@v4 - with: - name: salt-${{ inputs.salt-version }}-onedir-linux-${{ matrix.arch }}.tar.xz - path: pkgs/checkout/artifacts/ - - - name: Download Release Patch - if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} - uses: actions/download-artifact@v4 - with: - name: salt-${{ inputs.salt-version }}.patch - path: pkgs/checkout/ - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cwd: pkgs/checkout/ - cache-prefix: ${{ inputs.cache-prefix }} - - - name: Setup Salt Version - id: setup-salt-version - uses: ./.github/actions/setup-salt-version - with: - salt-version: "${{ inputs.salt-version }}" - cwd: pkgs/checkout/ - - - name: Configure Git - if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} - working-directory: pkgs/checkout/ - run: | - tools pkg configure-git - - - name: Apply release patch - if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} - working-directory: pkgs/checkout/ - run: | - tools pkg apply-release-patch salt-${{ inputs.salt-version }}.patch --delete - - - name: Build Deb - working-directory: pkgs/checkout/ - run: | - tools pkg build deb --relenv-version=${{ inputs.relenv-version }} --python-version=${{ inputs.python-version }} ${{ - inputs.source == 'onedir' && - format('--onedir=salt-{0}-onedir-linux-{1}.tar.xz', inputs.salt-version, matrix.arch) - || - format('--arch={0}', matrix.arch) - }} - - - name: Cleanup - run: | - rm -rf pkgs/checkout/ - - - name: Set Artifact Name - id: set-artifact-name - run: | - if [ "${{ inputs.source }}" != "src" ]; then - echo "artifact-name=salt-${{ inputs.salt-version }}-${{ matrix.arch }}-deb" >> "$GITHUB_OUTPUT" - else - echo "artifact-name=salt-${{ inputs.salt-version }}-${{ matrix.arch }}-deb-from-src" >> "$GITHUB_OUTPUT" - fi - - - name: Upload DEBs - uses: actions/upload-artifact@v4 - with: - name: ${{ steps.set-artifact-name.outputs.artifact-name }} - path: ${{ github.workspace }}/pkgs/* - retention-days: 7 - if-no-files-found: error - - build-rpm-packages: - name: RPM - runs-on: - - self-hosted - - linux - - medium - - ${{ matrix.arch }} - strategy: - fail-fast: false - matrix: - arch: - - x86_64 - - arm64 - source: - - ${{ inputs.source }} - - container: - image: ghcr.io/saltstack/salt-ci-containers/packaging:rockylinux-9 - - steps: - - uses: actions/checkout@v4 - - - name: Download Onedir Tarball as an Artifact - uses: actions/download-artifact@v4 - with: - name: salt-${{ inputs.salt-version }}-onedir-linux-${{ matrix.arch }}.tar.xz - path: artifacts/ - - - name: Download Release Patch - if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} - uses: actions/download-artifact@v4 - with: - name: salt-${{ inputs.salt-version }}.patch - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - - - name: Setup Salt Version - id: setup-salt-version - uses: ./.github/actions/setup-salt-version - with: - salt-version: "${{ inputs.salt-version }}" - - - name: Configure Git - if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} - run: | - tools pkg configure-git - - - name: Apply release patch - if: ${{ startsWith(github.event.ref, 'refs/tags') == false }} - run: | - tools pkg apply-release-patch salt-${{ inputs.salt-version }}.patch --delete - - - name: Build RPM - run: | - tools pkg build rpm --relenv-version=${{ inputs.relenv-version }} --python-version=${{ inputs.python-version }} ${{ - inputs.source == 'onedir' && - format('--onedir=salt-{0}-onedir-linux-{1}.tar.xz', inputs.salt-version, matrix.arch) - || - format('--arch={0}', matrix.arch) - }} - - - name: Set Artifact Name - id: set-artifact-name - run: | - if [ "${{ inputs.source }}" != "src" ]; then - echo "artifact-name=salt-${{ inputs.salt-version }}-${{ matrix.arch }}-rpm" >> "$GITHUB_OUTPUT" - else - echo "artifact-name=salt-${{ inputs.salt-version }}-${{ matrix.arch }}-rpm-from-src" >> "$GITHUB_OUTPUT" - fi - - - name: Upload RPMs - uses: actions/upload-artifact@v4 - with: - name: ${{ steps.set-artifact-name.outputs.artifact-name }} - path: ~/rpmbuild/RPMS/${{ matrix.arch == 'arm64' && 'aarch64' || matrix.arch }}/*.rpm - retention-days: 7 - if-no-files-found: error - build-windows-pkgs: name: Windows + if: ${{ toJSON(fromJSON(inputs.matrix)['windows']) != '[]' }} environment: ${{ inputs.environment }} strategy: fail-fast: false max-parallel: 2 matrix: - arch: - - x86 - - amd64 - source: - - ${{ inputs.source }} - + include: ${{ fromJSON(inputs.matrix)['windows'] }} runs-on: - windows-latest env: diff --git a/.github/workflows/build-salt-onedir.yml b/.github/workflows/build-salt-onedir.yml index 5913038bbd2..5c3078b2c96 100644 --- a/.github/workflows/build-salt-onedir.yml +++ b/.github/workflows/build-salt-onedir.yml @@ -8,12 +8,6 @@ on: type: string required: true description: The Salt version to set prior to building packages. - github-hosted-runners: - type: boolean - required: true - self-hosted-runners: - type: boolean - required: true cache-seed: required: true type: string @@ -26,6 +20,14 @@ on: required: true type: string description: The version of python to use with relenv + matrix: + type: string + required: true + description: Json config for build matrix + linux_arm_runner: + required: true + type: string + description: Json job matrix config env: RELENV_DATA: "${{ github.workspace }}/.relenv" @@ -39,21 +41,18 @@ env: jobs: + build-salt-linux: name: Linux - if: ${{ inputs.self-hosted-runners }} + if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }} env: - USE_S3_CACHE: 'true' + USE_S3_CACHE: 'false' + runs-on: + - ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || inputs.linux_arm_runner }} strategy: fail-fast: false matrix: - arch: - - x86_64 - - arm64 - runs-on: - - self-hosted - - linux - - ${{ matrix.arch }} + include: ${{ fromJSON(inputs.matrix)['linux'] }} steps: - name: "Throttle Builds" @@ -63,6 +62,10 @@ jobs: - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: @@ -95,18 +98,22 @@ jobs: build-salt-macos: name: macOS - if: ${{ inputs.github-hosted-runners }} + if: ${{ toJSON(fromJSON(inputs.matrix)['macos']) != '[]' }} strategy: fail-fast: false max-parallel: 2 matrix: - arch: ${{ github.event.repository.fork && fromJSON('["x86_64"]') || fromJSON('["x86_64", "arm64"]') }} + include: ${{ fromJSON(inputs.matrix)['macos'] }} runs-on: - - ${{ matrix.arch == 'arm64' && 'macos-13-xlarge' || 'macos-12' }} + - ${{ matrix.arch == 'arm64' && 'macos-14' || 'macos-13' }} env: PIP_INDEX_URL: https://pypi.org/simple steps: + - name: "Check cores" + shell: bash + run: sysctl -n hw.ncpu + - name: "Throttle Builds" shell: bash run: | @@ -150,14 +157,12 @@ jobs: build-salt-windows: name: Windows - if: ${{ inputs.github-hosted-runners }} + if: ${{ toJSON(fromJSON(inputs.matrix)['windows']) != '[]' }} strategy: fail-fast: false max-parallel: 2 matrix: - arch: - - x86 - - amd64 + include: ${{ fromJSON(inputs.matrix)['windows'] }} runs-on: windows-latest env: PIP_INDEX_URL: https://pypi.org/simple diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8fee4569e59..6cee9eff0a1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ on: env: COLUMNS: 190 - CACHE_SEED: SEED-2 # Bump the number to invalidate all caches + CACHE_SEED: SEED-1 # Bump the number to invalidate all caches RELENV_DATA: "${{ github.workspace }}/.relenv" PIP_DISABLE_PIP_VERSION_CHECK: "1" RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" @@ -38,13 +38,11 @@ jobs: prepare-workflow: name: Prepare Workflow Run - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 + environment: ci outputs: jobs: ${{ steps.define-jobs.outputs.jobs }} - runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - os-labels: ${{ steps.get-pull-labels.outputs.os-labels }} - pull-labels: ${{ steps.get-pull-labels.outputs.test-labels }} testrun: ${{ steps.define-testrun.outputs.testrun }} salt-version: ${{ steps.setup-salt-version.outputs.salt-version }} cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }} @@ -53,6 +51,9 @@ jobs: release-changelog-target: ${{ steps.get-release-changelog-target.outputs.release-changelog-target }} testing-releases: ${{ steps.get-testing-releases.outputs.testing-releases }} nox-archive-hash: ${{ steps.nox-archive-hash.outputs.nox-archive-hash }} + config: ${{ steps.workflow-config.outputs.config }} + env: + LINUX_ARM_RUNNER: ${{ vars.LINUX_ARM_RUNNER }} steps: - uses: actions/checkout@v4 with: @@ -165,14 +166,6 @@ jobs: salt-version: "" validate-version: true - - name: Get Pull Request Test Labels - id: get-pull-labels - if: ${{ github.event_name == 'pull_request'}} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - tools ci get-pr-test-labels --repository ${{ github.repository }} - - name: Get Hash For Nox Tarball Cache id: nox-archive-hash run: | @@ -197,11 +190,6 @@ jobs: run: | echo '${{ steps.process-changed-files.outputs.changed-files }}' | jq -C '.' - - name: Define Runner Types - id: runner-types - run: | - tools ci runner-types ${{ github.event_name }} - - name: Define Jobs To Run id: define-jobs run: | @@ -226,6 +214,11 @@ jobs: run: | tools ci define-testrun ${{ github.event_name }} changed-files.json + - name: Define workflow config + id: workflow-config + run: | + tools ci workflow-config ${{ steps.setup-salt-version.outputs.salt-version }} ${{ github.event_name }} changed-files.json + - name: Check Contents of generated testrun-changed-files.txt if: ${{ fromJSON(steps.define-testrun.outputs.testrun)['type'] != 'full' }} run: | @@ -246,7 +239,6 @@ jobs: pre-commit: name: Pre-Commit - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/pre-commit-action.yml needs: - prepare-workflow @@ -257,7 +249,7 @@ jobs: lint: name: Lint - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['lint'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['lint'] }} uses: ./.github/workflows/lint-action.yml needs: - prepare-workflow @@ -265,7 +257,6 @@ jobs: changed-files: ${{ needs.prepare-workflow.outputs.changed-files }} nsis-tests: name: NSIS Tests - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/nsis-tests.yml needs: - prepare-workflow @@ -274,8 +265,9 @@ jobs: prepare-release: name: "Prepare Release: ${{ needs.prepare-workflow.outputs.salt-version }}" - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['prepare-release'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - runs-on: ubuntu-latest + runs-on: + - ubuntu-22.04 + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['prepare-release'] }} needs: - prepare-workflow steps: @@ -397,7 +389,7 @@ jobs: build-docs: name: Documentation - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-docs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-docs'] }} needs: - prepare-workflow - build-source-tarball @@ -408,11 +400,11 @@ jobs: build-source-tarball: name: Build Source Tarball - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-source-tarball'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-source-tarball'] }} needs: - prepare-workflow - prepare-release - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -438,22 +430,22 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" build-deps-onedir: - name: Build Dependencies Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-onedir'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + name: Build Onedir Dependencies + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-deps-onedir'] }} needs: - prepare-workflow uses: ./.github/workflows/build-deps-onedir.yml with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-salt-onedir: name: Build Salt Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-salt-onedir'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-salt-onedir'] }} needs: - prepare-workflow - build-deps-onedir @@ -462,14 +454,14 @@ jobs: with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-pkgs-onedir: name: Build Packages - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] }} needs: - prepare-workflow - build-salt-onedir @@ -477,26 +469,14 @@ jobs: with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" source: "onedir" - - build-pkgs-src: - name: Build Packages - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-salt-onedir - uses: ./.github/workflows/build-packages.yml - with: - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - relenv-version: "0.17.3" - python-version: "3.10.15" - source: "src" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-ci-deps: name: CI Deps - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] }} needs: - prepare-workflow - build-salt-onedir @@ -508,1513 +488,55 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" - - rockylinux-8-pkg-tests: - name: Rocky Linux 8 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'rockylinux-8') }} + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} + test-packages: + name: Test Package + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test-pkg'] }} needs: - prepare-workflow - build-pkgs-onedir - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml + uses: ./.github/workflows/test-packages-action.yml with: - distro-slug: rockylinux-8 nox-session: ci-test-onedir - platform: linux - arch: x86_64 salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm nox-version: 2022.8.7 python-version: "3.10" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-8-arm64-pkg-tests: - name: Rocky Linux 8 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'rockylinux-8-arm64') }} + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} + test: + name: Test Salt + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test'] }} needs: - prepare-workflow - - build-pkgs-onedir - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml + uses: ./.github/workflows/test-action.yml with: - distro-slug: rockylinux-8-arm64 nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm nox-version: 2022.8.7 python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-9-pkg-tests: - name: Rocky Linux 9 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: rockylinux-9 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-9-arm64-pkg-tests: - name: Rocky Linux 9 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'rockylinux-9-arm64') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: rockylinux-9-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2-pkg-tests: - name: Amazon Linux 2 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'amazonlinux-2') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2-arm64-pkg-tests: - name: Amazon Linux 2 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'amazonlinux-2-arm64') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2023-pkg-tests: - name: Amazon Linux 2023 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'amazonlinux-2023') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2023 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2023-arm64-pkg-tests: - name: Amazon Linux 2023 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2023-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-11-pkg-tests: - name: Debian 11 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'debian-11') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-11 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-11-arm64-pkg-tests: - name: Debian 11 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'debian-11-arm64') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-11-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-12-pkg-tests: - name: Debian 12 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'debian-12') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-12 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-12-arm64-pkg-tests: - name: Debian 12 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'debian-12-arm64') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-12-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-pkg-tests: - name: Photon OS 4 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-4') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-arm64-pkg-tests: - name: Photon OS 4 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-4-arm64') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-pkg-tests-fips: - name: Photon OS 4 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-4') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-4-arm64-pkg-tests-fips: - name: Photon OS 4 Arm64 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-4-arm64') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-5-pkg-tests: - name: Photon OS 5 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-5') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-5-arm64-pkg-tests: - name: Photon OS 5 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-5-pkg-tests-fips: - name: Photon OS 5 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-5') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-5-arm64-pkg-tests-fips: - name: Photon OS 5 Arm64 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - ubuntu-2004-pkg-tests: - name: Ubuntu 20.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-20.04') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-20.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2004-arm64-pkg-tests: - name: Ubuntu 20.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-20.04-arm64') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-20.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2204-pkg-tests: - name: Ubuntu 22.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-22.04') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-22.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2204-arm64-pkg-tests: - name: Ubuntu 22.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-22.04-arm64') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-22.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2404-pkg-tests: - name: Ubuntu 24.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-24.04') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-24.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2404-arm64-pkg-tests: - name: Ubuntu 24.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-24.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-12-pkg-tests: - name: macOS 12 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-12 - runner: macos-12 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-13-pkg-tests: - name: macOS 13 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'macos-13') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-13 - runner: macos-13 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-13-arm64-pkg-tests: - name: macOS 13 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'macos-13-arm64') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-13-arm64 - runner: macos-13-xlarge - nox-session: ci-test-onedir - platform: macos - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016-nsis-pkg-tests: - name: Windows 2016 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'windows-2016') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016-msi-pkg-tests: - name: Windows 2016 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'windows-2016') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2019-nsis-pkg-tests: - name: Windows 2019 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'windows-2019') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2019-msi-pkg-tests: - name: Windows 2019 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'windows-2019') }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2022-nsis-pkg-tests: - name: Windows 2022 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2022-msi-pkg-tests: - name: Windows 2022 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016: - name: Windows 2016 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'windows-2016') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - windows-2019: - name: Windows 2019 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'windows-2019') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - windows-2022: - name: Windows 2022 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - macos-12: - name: macOS 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-12 - runner: macos-12 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - macos-13: - name: macOS 13 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'macos-13') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-13 - runner: macos-13 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - macos-13-arm64: - name: macOS 13 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'macos-13-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-13-arm64 - runner: macos-13-xlarge - nox-session: ci-test-onedir - platform: macos - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-8: - name: Rocky Linux 8 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'rockylinux-8') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-8 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-8-arm64: - name: Rocky Linux 8 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'rockylinux-8-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-8-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-9: - name: Rocky Linux 9 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-9 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-9-arm64: - name: Rocky Linux 9 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'rockylinux-9-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-9-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2: - name: Amazon Linux 2 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'amazonlinux-2') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2-arm64: - name: Amazon Linux 2 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'amazonlinux-2-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2023: - name: Amazon Linux 2023 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'amazonlinux-2023') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2023 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2023-arm64: - name: Amazon Linux 2023 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2023-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-11: - name: Debian 11 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'debian-11') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-11 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-11-arm64: - name: Debian 11 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'debian-11-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-11-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-12: - name: Debian 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'debian-12') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-12 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-12-arm64: - name: Debian 12 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'debian-12-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-12-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - fedora-40: - name: Fedora 40 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'fedora-40') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: fedora-40 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - opensuse-15: - name: Opensuse 15 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'opensuse-15') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: opensuse-15 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4: - name: Photon OS 4 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-4') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4-arm64: - name: Photon OS 4 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-4-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4-fips: - name: Photon OS 4 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-4') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-4-arm64-fips: - name: Photon OS 4 Arm64 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-4-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-5: - name: Photon OS 5 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-5') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-5-arm64: - name: Photon OS 5 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-5-fips: - name: Photon OS 5 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'photonos-5') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-5-arm64-fips: - name: Photon OS 5 Arm64 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - ubuntu-2004: - name: Ubuntu 20.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-20.04') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-20.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2004-arm64: - name: Ubuntu 20.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-20.04-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-20.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2204: - name: Ubuntu 22.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-22.04') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-22.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2204-arm64: - name: Ubuntu 22.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-22.04-arm64') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-22.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2404: - name: Ubuntu 24.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'ubuntu-24.04') }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-24.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2404-arm64: - name: Ubuntu 24.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-24.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} + default-timeout: 180 + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} combine-all-code-coverage: name: Combine Code Coverage if: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] == false }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 env: PIP_INDEX_URL: https://pypi.org/simple needs: - prepare-workflow - build-ci-deps - - windows-2016 - - windows-2019 - - windows-2022 - - macos-12 - - macos-13 - - macos-13-arm64 - - rockylinux-8 - - rockylinux-8-arm64 - - rockylinux-9 - - rockylinux-9-arm64 - - amazonlinux-2 - - amazonlinux-2-arm64 - - amazonlinux-2023 - - amazonlinux-2023-arm64 - - debian-11 - - debian-11-arm64 - - debian-12 - - debian-12-arm64 - - fedora-40 - - opensuse-15 - - photonos-4 - - photonos-4-arm64 - - photonos-4-fips - - photonos-4-arm64-fips - - photonos-5 - - photonos-5-arm64 - - photonos-5-fips - - photonos-5-arm64-fips - - ubuntu-2004 - - ubuntu-2004-arm64 - - ubuntu-2204 - - ubuntu-2204-arm64 - - ubuntu-2404 - - ubuntu-2404-arm64 steps: - uses: actions/checkout@v4 @@ -2140,7 +662,7 @@ jobs: # on a pull request instead of requiring all name: Set the ${{ github.workflow }} Pipeline Exit Status if: always() - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: - prepare-workflow - pre-commit @@ -2149,78 +671,10 @@ jobs: - build-docs - build-deps-onedir - build-salt-onedir - - build-pkgs-src - combine-all-code-coverage - build-ci-deps - - windows-2016 - - windows-2019 - - windows-2022 - - macos-12 - - macos-13 - - macos-13-arm64 - - rockylinux-8 - - rockylinux-8-arm64 - - rockylinux-9 - - rockylinux-9-arm64 - - amazonlinux-2 - - amazonlinux-2-arm64 - - amazonlinux-2023 - - amazonlinux-2023-arm64 - - debian-11 - - debian-11-arm64 - - debian-12 - - debian-12-arm64 - - fedora-40 - - opensuse-15 - - photonos-4 - - photonos-4-arm64 - - photonos-4-fips - - photonos-4-arm64-fips - - photonos-5 - - photonos-5-arm64 - - photonos-5-fips - - photonos-5-arm64-fips - - ubuntu-2004 - - ubuntu-2004-arm64 - - ubuntu-2204 - - ubuntu-2204-arm64 - - ubuntu-2404 - - ubuntu-2404-arm64 - - rockylinux-8-pkg-tests - - rockylinux-8-arm64-pkg-tests - - rockylinux-9-pkg-tests - - rockylinux-9-arm64-pkg-tests - - amazonlinux-2-pkg-tests - - amazonlinux-2-arm64-pkg-tests - - amazonlinux-2023-pkg-tests - - amazonlinux-2023-arm64-pkg-tests - - debian-11-pkg-tests - - debian-11-arm64-pkg-tests - - debian-12-pkg-tests - - debian-12-arm64-pkg-tests - - photonos-4-pkg-tests - - photonos-4-arm64-pkg-tests - - photonos-4-pkg-tests-fips - - photonos-4-arm64-pkg-tests-fips - - photonos-5-pkg-tests - - photonos-5-arm64-pkg-tests - - photonos-5-pkg-tests-fips - - photonos-5-arm64-pkg-tests-fips - - ubuntu-2004-pkg-tests - - ubuntu-2004-arm64-pkg-tests - - ubuntu-2204-pkg-tests - - ubuntu-2204-arm64-pkg-tests - - ubuntu-2404-pkg-tests - - ubuntu-2404-arm64-pkg-tests - - macos-12-pkg-tests - - macos-13-pkg-tests - - macos-13-arm64-pkg-tests - - windows-2016-nsis-pkg-tests - - windows-2016-msi-pkg-tests - - windows-2019-nsis-pkg-tests - - windows-2019-msi-pkg-tests - - windows-2022-nsis-pkg-tests - - windows-2022-msi-pkg-tests + - test-packages + - test steps: - name: Get workflow information id: get-workflow-info diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml new file mode 100644 index 00000000000..c509e5cd1ea --- /dev/null +++ b/.github/workflows/draft-release.yml @@ -0,0 +1,132 @@ +--- +name: Draft Github Release + +on: + workflow_call: + inputs: + salt-version: + type: string + required: true + description: The Salt version to set prior to building packages. + matrix: + required: true + type: string + description: Json job matrix config + build-matrix: + required: true + type: string + description: Json job matrix config + +env: + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + +jobs: + + list-artifacts: + name: List Artifacts + runs-on: ubuntu-22.04 + steps: + # Checkout here so we can easily use custom actions + - uses: actions/download-artifact@v4 + with: + path: artifacts/ + - name: List Directory Structure + run: ls -R artifacts/ + + create-github-release: + name: Draft Release v${{ inputs.salt-version }} + runs-on: ubuntu-22.04 + outputs: + upload_url: ${{ steps.create_release.outputs.upload_url }} + steps: + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + release_name: "Release v${{ inputs.salt-version }}" + tag_name: v${{ inputs.salt-version }} + draft: true + prerelease: false + - name: Release Output + run: echo "upload_url=${{ steps.create_release.outputs.upload_url }}" >> "$GITHUB_OUTPUT" + + upload-source-tarball: + needs: + - create-github-release + uses: ./.github/workflows/release-artifact.yml + with: + name: salt-${{ inputs.salt-version }}.tar.gz + upload_url: ${{ needs.create-github-release.outputs.upload_url }} + + upload-onedir: + needs: + - create-github-release + strategy: + matrix: + include: ${{ fromJSON(inputs.matrix) }} + uses: ./.github/workflows/release-artifact.yml + with: + name: salt-${{ inputs.salt-version }}-onedir-${{ matrix.platform }}-${{ matrix.arch }}.${{ matrix.platform == 'windows' && 'zip' || 'tar.xz' }} + upload_url: ${{ needs.create-github-release.outputs.upload_url }} + + upload-deb-packages: + needs: + - create-github-release + strategy: + matrix: + include: ${{ fromJSON(inputs.build-matrix)['linux'] }} + uses: ./.github/workflows/release-artifact.yml + with: + name: salt-${{ inputs.salt-version }}-${{ matrix.arch }}-deb + upload_url: ${{ needs.create-github-release.outputs.upload_url }} + pattern: "*.deb" + + upload-rpm-packages: + needs: + - create-github-release + strategy: + matrix: + include: ${{ fromJSON(inputs.build-matrix)['linux'] }} + uses: ./.github/workflows/release-artifact.yml + with: + name: salt-${{ inputs.salt-version }}-${{ matrix.arch }}-rpm + upload_url: ${{ needs.create-github-release.outputs.upload_url }} + + upload-mac-packages: + needs: + - create-github-release + strategy: + matrix: + include: ${{ fromJSON(inputs.build-matrix)['macos'] }} + uses: ./.github/workflows/release-artifact.yml + with: + name: salt-${{ inputs.salt-version }}-${{ matrix.arch }}-macos + upload_url: ${{ needs.create-github-release.outputs.upload_url }} + + upload-windows-msi-packages: + needs: + - create-github-release + strategy: + matrix: + include: ${{ fromJSON(inputs.build-matrix)['windows'] }} + uses: ./.github/workflows/release-artifact.yml + with: + name: salt-${{ inputs.salt-version }}-${{ matrix.arch }}-MSI + upload_url: ${{ needs.create-github-release.outputs.upload_url }} + + upload-windows-nsis-packages: + needs: + - create-github-release + strategy: + matrix: + include: ${{ fromJSON(inputs.build-matrix)['windows'] }} + uses: ./.github/workflows/release-artifact.yml + with: + name: salt-${{ inputs.salt-version }}-${{ matrix.arch }}-NSIS + upload_url: ${{ needs.create-github-release.outputs.upload_url }} diff --git a/.github/workflows/lint-action.yml b/.github/workflows/lint-action.yml index 3c3df9cfb89..09f614fbf36 100644 --- a/.github/workflows/lint-action.yml +++ b/.github/workflows/lint-action.yml @@ -18,17 +18,13 @@ env: jobs: Salt: name: Lint Salt's Source Code - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 if: ${{ contains(fromJSON('["push", "schedule", "workflow_dispatch"]'), github.event_name) || fromJSON(inputs.changed-files)['salt'] || fromJSON(inputs.changed-files)['lint'] }} container: image: ghcr.io/saltstack/salt-ci-containers/python:3.10 steps: - - name: Install System Deps - run: | - apt-get update - apt-get install -y enchant-2 git gcc make zlib1g-dev libc-dev libffi-dev g++ libxml2 libxml2-dev libxslt-dev libcurl4-openssl-dev libssl-dev libgnutls28-dev - name: Add Git Safe Directory run: | @@ -62,18 +58,13 @@ jobs: Tests: name: Lint Salt's Test Suite - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 if: ${{ contains(fromJSON('["push", "schedule", "workflow_dispatch"]'), github.event_name) || fromJSON(inputs.changed-files)['tests'] || fromJSON(inputs.changed-files)['lint'] }} container: image: ghcr.io/saltstack/salt-ci-containers/python:3.10 steps: - - name: Install System Deps - run: | - echo "deb http://deb.debian.org/debian bookworm-backports main" >> /etc/apt/sources.list - apt-get update - apt-get install -y enchant-2 git gcc make zlib1g-dev libc-dev libffi-dev g++ libxml2 libxml2-dev libxslt-dev libcurl4-openssl-dev libssl-dev libgnutls28-dev - name: Add Git Safe Directory run: | diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 7ef16632062..83cff56555a 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -22,7 +22,7 @@ on: env: COLUMNS: 190 - CACHE_SEED: SEED-2 # Bump the number to invalidate all caches + CACHE_SEED: SEED-1 # Bump the number to invalidate all caches RELENV_DATA: "${{ github.workspace }}/.relenv" PIP_DISABLE_PIP_VERSION_CHECK: "1" RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" @@ -40,7 +40,7 @@ jobs: workflow-requirements: name: Check Workflow Requirements - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 outputs: requirements-met: ${{ steps.check-requirements.outputs.requirements-met }} steps: @@ -72,7 +72,7 @@ jobs: trigger-branch-nightly-builds: name: Trigger Branch Workflows if: ${{ github.event_name == 'schedule' && fromJSON(needs.workflow-requirements.outputs.requirements-met) }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: - workflow-requirements @@ -92,16 +92,14 @@ jobs: prepare-workflow: name: Prepare Workflow Run - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 + environment: ci if: ${{ fromJSON(needs.workflow-requirements.outputs.requirements-met) }} needs: - workflow-requirements outputs: jobs: ${{ steps.define-jobs.outputs.jobs }} - runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - os-labels: ${{ steps.get-pull-labels.outputs.os-labels }} - pull-labels: ${{ steps.get-pull-labels.outputs.test-labels }} testrun: ${{ steps.define-testrun.outputs.testrun }} salt-version: ${{ steps.setup-salt-version.outputs.salt-version }} cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }} @@ -110,6 +108,9 @@ jobs: release-changelog-target: ${{ steps.get-release-changelog-target.outputs.release-changelog-target }} testing-releases: ${{ steps.get-testing-releases.outputs.testing-releases }} nox-archive-hash: ${{ steps.nox-archive-hash.outputs.nox-archive-hash }} + config: ${{ steps.workflow-config.outputs.config }} + env: + LINUX_ARM_RUNNER: ${{ vars.LINUX_ARM_RUNNER }} steps: - uses: actions/checkout@v4 with: @@ -222,14 +223,6 @@ jobs: salt-version: "" validate-version: true - - name: Get Pull Request Test Labels - id: get-pull-labels - if: ${{ github.event_name == 'pull_request'}} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - tools ci get-pr-test-labels --repository ${{ github.repository }} - - name: Get Hash For Nox Tarball Cache id: nox-archive-hash run: | @@ -254,11 +247,6 @@ jobs: run: | echo '${{ steps.process-changed-files.outputs.changed-files }}' | jq -C '.' - - name: Define Runner Types - id: runner-types - run: | - tools ci runner-types ${{ github.event_name }} - - name: Define Jobs To Run id: define-jobs run: | @@ -283,6 +271,11 @@ jobs: run: | tools ci define-testrun ${{ github.event_name }} changed-files.json + - name: Define workflow config + id: workflow-config + run: | + tools ci workflow-config${{ inputs.skip-salt-test-suite && ' --skip-tests' || '' }}${{ inputs.skip-salt-pkg-test-suite && ' --skip-pkg-tests' || '' }} ${{ steps.setup-salt-version.outputs.salt-version }} ${{ github.event_name }} changed-files.json + - name: Check Contents of generated testrun-changed-files.txt if: ${{ fromJSON(steps.define-testrun.outputs.testrun)['type'] != 'full' }} run: | @@ -303,7 +296,6 @@ jobs: pre-commit: name: Pre-Commit - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/pre-commit-action.yml needs: - prepare-workflow @@ -314,7 +306,7 @@ jobs: lint: name: Lint - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['lint'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['lint'] }} uses: ./.github/workflows/lint-action.yml needs: - prepare-workflow @@ -322,7 +314,6 @@ jobs: changed-files: ${{ needs.prepare-workflow.outputs.changed-files }} nsis-tests: name: NSIS Tests - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/nsis-tests.yml needs: - prepare-workflow @@ -331,8 +322,9 @@ jobs: prepare-release: name: "Prepare Release: ${{ needs.prepare-workflow.outputs.salt-version }}" - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['prepare-release'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - runs-on: ubuntu-latest + runs-on: + - ubuntu-22.04 + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['prepare-release'] }} needs: - prepare-workflow steps: @@ -454,7 +446,7 @@ jobs: build-docs: name: Documentation - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-docs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-docs'] }} needs: - prepare-workflow - build-source-tarball @@ -465,11 +457,11 @@ jobs: build-source-tarball: name: Build Source Tarball - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-source-tarball'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-source-tarball'] }} needs: - prepare-workflow - prepare-release - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -495,22 +487,22 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" build-deps-onedir: - name: Build Dependencies Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-onedir'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + name: Build Onedir Dependencies + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-deps-onedir'] }} needs: - prepare-workflow uses: ./.github/workflows/build-deps-onedir.yml with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-salt-onedir: name: Build Salt Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-salt-onedir'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-salt-onedir'] }} needs: - prepare-workflow - build-deps-onedir @@ -519,14 +511,14 @@ jobs: with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-pkgs-onedir: name: Build Packages - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] }} needs: - prepare-workflow - build-salt-onedir @@ -534,9 +526,11 @@ jobs: with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" source: "onedir" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} environment: nightly sign-macos-packages: false sign-windows-packages: false @@ -544,7 +538,7 @@ jobs: build-pkgs-src: name: Build Packages - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] }} needs: - prepare-workflow - build-salt-onedir @@ -552,16 +546,18 @@ jobs: with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" source: "src" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} environment: nightly sign-macos-packages: false sign-windows-packages: false secrets: inherit build-ci-deps: name: CI Deps - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] }} needs: - prepare-workflow - build-salt-onedir @@ -573,2305 +569,52 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" - - rockylinux-8-pkg-tests: - name: Rocky Linux 8 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} + test-packages: + name: Test Package + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test-pkg'] }} needs: - prepare-workflow - build-pkgs-onedir - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml + uses: ./.github/workflows/test-packages-action.yml with: - distro-slug: rockylinux-8 nox-session: ci-test-onedir - platform: linux - arch: x86_64 salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm nox-version: 2022.8.7 python-version: "3.10" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 skip-code-coverage: true testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-8-arm64-pkg-tests: - name: Rocky Linux 8 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} + test: + name: Test Salt + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test'] }} needs: - prepare-workflow - - build-pkgs-onedir - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml + uses: ./.github/workflows/test-action.yml with: - distro-slug: rockylinux-8-arm64 nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm nox-version: 2022.8.7 python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-9-pkg-tests: - name: Rocky Linux 9 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: rockylinux-9 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-9-arm64-pkg-tests: - name: Rocky Linux 9 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: rockylinux-9-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2-pkg-tests: - name: Amazon Linux 2 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2-arm64-pkg-tests: - name: Amazon Linux 2 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2023-pkg-tests: - name: Amazon Linux 2023 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2023 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2023-arm64-pkg-tests: - name: Amazon Linux 2023 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2023-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-11-pkg-tests: - name: Debian 11 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-11 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-11-arm64-pkg-tests: - name: Debian 11 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-11-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-12-pkg-tests: - name: Debian 12 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-12 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-12-arm64-pkg-tests: - name: Debian 12 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-12-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-pkg-tests: - name: Photon OS 4 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-arm64-pkg-tests: - name: Photon OS 4 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-pkg-tests-fips: - name: Photon OS 4 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-4-arm64-pkg-tests-fips: - name: Photon OS 4 Arm64 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-5-pkg-tests: - name: Photon OS 5 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-5-arm64-pkg-tests: - name: Photon OS 5 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-5-pkg-tests-fips: - name: Photon OS 5 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-5-arm64-pkg-tests-fips: - name: Photon OS 5 Arm64 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - ubuntu-2004-pkg-tests: - name: Ubuntu 20.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-20.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2004-arm64-pkg-tests: - name: Ubuntu 20.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-20.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2204-pkg-tests: - name: Ubuntu 22.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-22.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2204-arm64-pkg-tests: - name: Ubuntu 22.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-22.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2404-pkg-tests: - name: Ubuntu 24.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-24.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2404-arm64-pkg-tests: - name: Ubuntu 24.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-24.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-12-pkg-tests: - name: macOS 12 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-12 - runner: macos-12 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-13-pkg-tests: - name: macOS 13 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-13 - runner: macos-13 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-13-arm64-pkg-tests: - name: macOS 13 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-13-arm64 - runner: macos-13-xlarge - nox-session: ci-test-onedir - platform: macos - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016-nsis-pkg-tests: - name: Windows 2016 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016-msi-pkg-tests: - name: Windows 2016 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2019-nsis-pkg-tests: - name: Windows 2019 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2019-msi-pkg-tests: - name: Windows 2019 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2022-nsis-pkg-tests: - name: Windows 2022 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2022-msi-pkg-tests: - name: Windows 2022 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016: - name: Windows 2016 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 skip-code-coverage: true workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - windows-2019: - name: Windows 2019 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - windows-2022: - name: Windows 2022 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - macos-12: - name: macOS 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-12 - runner: macos-12 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - macos-13: - name: macOS 13 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-13 - runner: macos-13 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - macos-13-arm64: - name: macOS 13 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-13-arm64 - runner: macos-13-xlarge - nox-session: ci-test-onedir - platform: macos - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-8: - name: Rocky Linux 8 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-8 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-8-arm64: - name: Rocky Linux 8 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-8-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-9: - name: Rocky Linux 9 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-9 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-9-arm64: - name: Rocky Linux 9 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-9-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2: - name: Amazon Linux 2 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2-arm64: - name: Amazon Linux 2 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2023: - name: Amazon Linux 2023 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2023 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2023-arm64: - name: Amazon Linux 2023 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2023-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-11: - name: Debian 11 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-11 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-11-arm64: - name: Debian 11 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-11-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-12: - name: Debian 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-12 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-12-arm64: - name: Debian 12 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-12-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - fedora-40: - name: Fedora 40 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: fedora-40 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - opensuse-15: - name: Opensuse 15 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: opensuse-15 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4: - name: Photon OS 4 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4-arm64: - name: Photon OS 4 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4-fips: - name: Photon OS 4 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-4-arm64-fips: - name: Photon OS 4 Arm64 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-5: - name: Photon OS 5 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-5-arm64: - name: Photon OS 5 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-5-fips: - name: Photon OS 5 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-5-arm64-fips: - name: Photon OS 5 Arm64 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - ubuntu-2004: - name: Ubuntu 20.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-20.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2004-arm64: - name: Ubuntu 20.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-20.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2204: - name: Ubuntu 22.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-22.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2204-arm64: - name: Ubuntu 22.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-22.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2404: - name: Ubuntu 24.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-24.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2404-arm64: - name: Ubuntu 24.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-24.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: nightly - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - build-src-repo: - name: Build Repository - environment: nightly - runs-on: - - self-hosted - - linux - - repo-nightly - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-source-tarball - - build-pkgs-src - strategy: - fail-fast: false - matrix: - pkg-type: - - src - - steps: - - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download Source Tarball - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create src --key-id=64CBBC8173D76B3F --nightly-build-from=${{ github.ref_name }} \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Copy Files For Source Only Artifact Uploads - run: | - mkdir artifacts/src - find artifacts/pkgs/repo -type f -print -exec cp {} artifacts/src \; - - - name: Upload Standalone Repository As An Artifact - uses: actions/upload-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-nightly-src-repo - path: | - artifacts/src/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz - artifacts/src/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz.* - artifacts/src/*-GPG-* - retention-days: 7 - if-no-files-found: error - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-nightly-repo-src - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: src-repo - - build-deb-repo: - name: Build Repository - environment: nightly - runs-on: - - self-hosted - - linux - - repo-nightly - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-pkgs-onedir - strategy: - fail-fast: false - matrix: - include: - - pkg-type: deb - distro: debian - version: "11" - arch: x86_64 - - pkg-type: deb - distro: debian - version: "11" - arch: arm64 - - pkg-type: deb - distro: debian - version: "12" - arch: x86_64 - - pkg-type: deb - distro: debian - version: "12" - arch: arm64 - - pkg-type: deb - distro: ubuntu - version: "20.04" - arch: x86_64 - - pkg-type: deb - distro: ubuntu - version: "20.04" - arch: arm64 - - pkg-type: deb - distro: ubuntu - version: "22.04" - arch: x86_64 - - pkg-type: deb - distro: ubuntu - version: "22.04" - arch: arm64 - - pkg-type: deb - distro: ubuntu - version: "24.04" - arch: x86_64 - - pkg-type: deb - distro: ubuntu - version: "24.04" - arch: arm64 - - steps: - - uses: actions/checkout@v4 - - - name: Download System Dependencies - run: | - sudo apt update - sudo apt install -y devscripts apt-utils - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download DEB Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-${{ matrix.arch }}-deb - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create deb --key-id=64CBBC8173D76B3F --distro-arch=${{ matrix.arch }} --nightly-build-from=${{ github.ref_name }} \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --distro=${{ matrix.distro }} --distro-version=${{ matrix.version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-nightly-repo-${{ matrix.pkg-type }}-${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }} - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: ${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }}-repo - - build-rpm-repo: - name: Build Repository - environment: nightly - runs-on: - - self-hosted - - linux - - repo-nightly - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-pkgs-onedir - strategy: - fail-fast: false - matrix: - include: - - pkg-type: rpm - distro: amazon - version: "2" - arch: x86_64 - - pkg-type: rpm - distro: amazon - version: "2" - arch: arm64 - - pkg-type: rpm - distro: amazon - version: "2" - arch: aarch64 - - pkg-type: rpm - distro: amazon - version: "2023" - arch: x86_64 - - pkg-type: rpm - distro: amazon - version: "2023" - arch: arm64 - - pkg-type: rpm - distro: amazon - version: "2023" - arch: aarch64 - - pkg-type: rpm - distro: fedora - version: "40" - arch: x86_64 - - pkg-type: rpm - distro: fedora - version: "40" - arch: arm64 - - pkg-type: rpm - distro: fedora - version: "40" - arch: aarch64 - - pkg-type: rpm - distro: photon - version: "4" - arch: x86_64 - - pkg-type: rpm - distro: photon - version: "4" - arch: arm64 - - pkg-type: rpm - distro: photon - version: "4" - arch: aarch64 - - pkg-type: rpm - distro: photon - version: "5" - arch: x86_64 - - pkg-type: rpm - distro: photon - version: "5" - arch: arm64 - - pkg-type: rpm - distro: photon - version: "5" - arch: aarch64 - - pkg-type: rpm - distro: redhat - version: "8" - arch: x86_64 - - pkg-type: rpm - distro: redhat - version: "8" - arch: arm64 - - pkg-type: rpm - distro: redhat - version: "8" - arch: aarch64 - - pkg-type: rpm - distro: redhat - version: "9" - arch: x86_64 - - pkg-type: rpm - distro: redhat - version: "9" - arch: arm64 - - pkg-type: rpm - distro: redhat - version: "9" - arch: aarch64 - - steps: - - uses: actions/checkout@v4 - - - name: Download System Dependencies - run: | - sudo apt update - sudo apt install -y rpm - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download RPM Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}-rpm - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - env: - SALT_REPO_DOMAIN_RELEASE: ${{ vars.SALT_REPO_DOMAIN_RELEASE || 'repo.saltproject.io' }} - SALT_REPO_DOMAIN_STAGING: ${{ vars.SALT_REPO_DOMAIN_STAGING || 'staging.repo.saltproject.io' }} - run: | - tools pkg repo create rpm --key-id=64CBBC8173D76B3F --distro-arch=${{ matrix.arch }} --nightly-build-from=${{ github.ref_name }} \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --distro=${{ matrix.distro }} --distro-version=${{ matrix.version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-nightly-repo-${{ matrix.pkg-type }}-${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }} - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: ${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }}-repo - - build-windows-repo: - name: Build Repository - environment: nightly - runs-on: - - self-hosted - - linux - - repo-nightly - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-pkgs-onedir - strategy: - fail-fast: false - matrix: - pkg-type: - - windows - - steps: - - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download Windows NSIS x86 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-x86-NSIS - path: artifacts/pkgs/incoming - - - name: Download Windows MSI x86 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-x86-MSI - path: artifacts/pkgs/incoming - - - name: Download Windows NSIS amd64 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-amd64-NSIS - path: artifacts/pkgs/incoming - - - name: Download Windows MSI amd64 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-amd64-MSI - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create windows --key-id=64CBBC8173D76B3F --nightly-build-from=${{ github.ref_name }} \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-nightly-repo-windows - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: windows-repo - - build-macos-repo: - name: Build Repository - environment: nightly - runs-on: - - self-hosted - - linux - - repo-nightly - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-pkgs-onedir - strategy: - fail-fast: false - matrix: - pkg-type: - - macos - - steps: - - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download macOS x86_64 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-x86_64-macos - path: artifacts/pkgs/incoming - - - name: Download macOS Arch64 Packages - if: ${{ ! github.event.repository.fork }} - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-arm64-macos - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create macos --key-id=64CBBC8173D76B3F --nightly-build-from=${{ github.ref_name }} \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-nightly-repo-macos - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: macos-repo - - build-onedir-repo: - name: Build Repository - environment: nightly - runs-on: - - self-hosted - - linux - - repo-nightly - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-salt-onedir - strategy: - fail-fast: false - matrix: - pkg-type: - - onedir - - steps: - - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download Linux x86_64 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-linux-x86_64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download Linux arm64 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-linux-arm64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download macOS x86_64 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-macos-x86_64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download macOS arm64 Onedir Archive - if: ${{ ! github.event.repository.fork }} - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-macos-arm64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download Windows amd64 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-windows-amd64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download Windows amd64 Onedir Archive(zip) - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-windows-amd64.zip - path: artifacts/pkgs/incoming - - - name: Download Windows x86 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-windows-x86.tar.xz - path: artifacts/pkgs/incoming - - - name: Download Windows amd64 Onedir Archive(zip) - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-windows-x86.zip - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create onedir --key-id=64CBBC8173D76B3F --nightly-build-from=${{ github.ref_name }} \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-nightly-repo-onedir - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: onedir-repo - - publish-repositories: - name: Publish Repositories - if: ${{ always() && ! failure() && ! cancelled() }} - runs-on: - - self-hosted - - linux - - repo-nightly - environment: nightly - needs: - - prepare-workflow - - build-docs - - build-src-repo - - build-deb-repo - - build-rpm-repo - - build-windows-repo - - build-macos-repo - - build-onedir-repo - - build-ci-deps - - windows-2016 - - windows-2019 - - windows-2022 - - macos-12 - - macos-13 - - macos-13-arm64 - - rockylinux-8 - - rockylinux-8-arm64 - - rockylinux-9 - - rockylinux-9-arm64 - - amazonlinux-2 - - amazonlinux-2-arm64 - - amazonlinux-2023 - - amazonlinux-2023-arm64 - - debian-11 - - debian-11-arm64 - - debian-12 - - debian-12-arm64 - - fedora-40 - - opensuse-15 - - photonos-4 - - photonos-4-arm64 - - photonos-4-fips - - photonos-4-arm64-fips - - photonos-5 - - photonos-5-arm64 - - photonos-5-fips - - photonos-5-arm64-fips - - ubuntu-2004 - - ubuntu-2004-arm64 - - ubuntu-2204 - - ubuntu-2204-arm64 - - ubuntu-2404 - - ubuntu-2404-arm64 - - steps: - - - uses: actions/checkout@v4 - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Download Repository Artifact - uses: actions/download-artifact@v4 - with: - pattern: salt-${{ needs.prepare-workflow.outputs.salt-version }}-nightly-repo-* - merge-multiple: true - path: repo/ - - - name: Decompress Repository Artifacts - run: | - find repo/ -type f -name '*.tar.gz' -print -exec tar xvf {} \; - find repo/ -type f -name '*.tar.gz' -print -exec rm -f {} \; - - - name: Show Repository - run: | - tree -a artifacts/pkgs/repo/ - - - name: Upload Repository Contents (nightly) - env: - SALT_REPO_DOMAIN_RELEASE: ${{ vars.SALT_REPO_DOMAIN_RELEASE || 'repo.saltproject.io' }} - SALT_REPO_DOMAIN_STAGING: ${{ vars.SALT_REPO_DOMAIN_STAGING || 'staging.repo.saltproject.io' }} - run: | - tools pkg repo publish nightly --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} artifacts/pkgs/repo/ + default-timeout: 360 + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} set-pipeline-exit-status: # This step is just so we can make github require this step, to pass checks # on a pull request instead of requiring all name: Set the ${{ github.workflow }} Pipeline Exit Status if: always() - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 environment: nightly needs: - workflow-requirements @@ -2884,42 +627,9 @@ jobs: - build-deps-onedir - build-salt-onedir - build-pkgs-src - - publish-repositories - - rockylinux-8-pkg-tests - - rockylinux-8-arm64-pkg-tests - - rockylinux-9-pkg-tests - - rockylinux-9-arm64-pkg-tests - - amazonlinux-2-pkg-tests - - amazonlinux-2-arm64-pkg-tests - - amazonlinux-2023-pkg-tests - - amazonlinux-2023-arm64-pkg-tests - - debian-11-pkg-tests - - debian-11-arm64-pkg-tests - - debian-12-pkg-tests - - debian-12-arm64-pkg-tests - - photonos-4-pkg-tests - - photonos-4-arm64-pkg-tests - - photonos-4-pkg-tests-fips - - photonos-4-arm64-pkg-tests-fips - - photonos-5-pkg-tests - - photonos-5-arm64-pkg-tests - - photonos-5-pkg-tests-fips - - photonos-5-arm64-pkg-tests-fips - - ubuntu-2004-pkg-tests - - ubuntu-2004-arm64-pkg-tests - - ubuntu-2204-pkg-tests - - ubuntu-2204-arm64-pkg-tests - - ubuntu-2404-pkg-tests - - ubuntu-2404-arm64-pkg-tests - - macos-12-pkg-tests - - macos-13-pkg-tests - - macos-13-arm64-pkg-tests - - windows-2016-nsis-pkg-tests - - windows-2016-msi-pkg-tests - - windows-2019-nsis-pkg-tests - - windows-2019-msi-pkg-tests - - windows-2022-nsis-pkg-tests - - windows-2022-msi-pkg-tests + - build-ci-deps + - test-packages + - test steps: - name: Get workflow information id: get-workflow-info diff --git a/.github/workflows/pre-commit-action.yml b/.github/workflows/pre-commit-action.yml index ac8ff64a10e..26c119aa69a 100644 --- a/.github/workflows/pre-commit-action.yml +++ b/.github/workflows/pre-commit-action.yml @@ -21,21 +21,16 @@ jobs: Pre-Commit: name: Run Pre-Commit Against Salt - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 container: - image: ghcr.io/saltstack/salt-ci-containers/python:3.10 + image: ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-22.04 env: PRE_COMMIT_COLOR: always steps: - - name: Install System Deps - run: | - apt-get update - apt-get install -y wget curl enchant-2 git gcc make zlib1g-dev libc-dev libffi-dev g++ libxml2 libxml2-dev libxslt-dev libcurl4-openssl-dev libssl-dev libgnutls28-dev rustc - - name: Add Git Safe Directory run: | git config --global --add safe.directory "$(pwd)" diff --git a/.github/workflows/release-artifact.yml b/.github/workflows/release-artifact.yml new file mode 100644 index 00000000000..35a9854046b --- /dev/null +++ b/.github/workflows/release-artifact.yml @@ -0,0 +1,69 @@ +--- +name: Upload Release Artifact + +on: + workflow_call: + inputs: + name: + type: string + required: true + description: The Salt version to set prior to building packages. + upload_url: + type: string + required: true + description: Release's upload url. + pattern: + type: string + required: false + description: Pattern of files to upload + + +jobs: + + list-files: + name: List ${{ inputs.name }} + runs-on: ubuntu-22.04 + outputs: + files: ${{ steps.list-files.outputs.files }} + steps: + - uses: actions/download-artifact@v4 + with: + name: ${{ inputs.name }} + path: artifacts + - run: find artifacts -maxdepth 1 -type f -printf '%f\n' + - id: list-files + run: | + if [ "${{ inputs.pattern }}" != "" ]; then + echo files="$(find artifacts -maxdepth 1 -type f -name '${{ inputs.pattern }}' -printf '%f\n' | jq -Rnc '[inputs | { file: "\(.)" }]')" >> "$GITHUB_OUTPUT" + else + echo files="$(find artifacts -maxdepth 1 -type f -printf '%f\n' | jq -Rnc '[inputs | { file: "\(.)" }]')" >> "$GITHUB_OUTPUT" + fi + + upload-files: + name: Upload ${{ matrix.file }} from ${{ inputs.name }} + runs-on: ubuntu-22.04 + needs: + - list-files + strategy: + matrix: + include: ${{ fromJSON(needs.list-files.outputs.files) }} + steps: + - uses: actions/download-artifact@v4 + with: + name: ${{ inputs.name }} + path: artifacts + + - name: Detect type of ${{ matrix.file }} + id: file-type + run: echo "file_type=$( file --mime-type artifacts/${{ matrix.file }} )" >> "$GITHUB_OUTPUT" + + - name: Upload ${{ matrix.file }} + id: upload-release-asset-source + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ inputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps + asset_path: artifacts/${{ matrix.file }} + asset_name: ${{ matrix.file }} + asset_content_type: ${{ steps.file-type.outputs.file_type }} diff --git a/.github/workflows/release-tag.yml b/.github/workflows/release-tag.yml index bc4624ef086..7d88b2d63f6 100644 --- a/.github/workflows/release-tag.yml +++ b/.github/workflows/release-tag.yml @@ -32,7 +32,7 @@ jobs: permissions: contents: write # for dev-drprasad/delete-tag-and-release to delete tags or releases name: Generate Tag and Github Release - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: dev-drprasad/delete-tag-and-release@v0.2.0 if: github.event.inputs.reTag == 'true' diff --git a/.github/workflows/release-update-winrepo.yml b/.github/workflows/release-update-winrepo.yml index ab32d73d3c7..f6d47681a90 100644 --- a/.github/workflows/release-update-winrepo.yml +++ b/.github/workflows/release-update-winrepo.yml @@ -19,7 +19,7 @@ permissions: jobs: update-winrepo: name: Update Winrepo - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - name: Checkout Salt diff --git a/.github/workflows/release-upload-virustotal.yml b/.github/workflows/release-upload-virustotal.yml index 431ea00039a..dc760371bb2 100644 --- a/.github/workflows/release-upload-virustotal.yml +++ b/.github/workflows/release-upload-virustotal.yml @@ -31,7 +31,6 @@ jobs: runs-on: - self-hosted - linux - - repo-release steps: - name: Checkout Salt diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 30ced2d7efa..69d3dd7966e 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,7 +21,7 @@ on: env: COLUMNS: 190 - CACHE_SEED: SEED-2 # Bump the number to invalidate all caches + CACHE_SEED: SEED-1 # Bump the number to invalidate all caches RELENV_DATA: "${{ github.workspace }}/.relenv" PIP_DISABLE_PIP_VERSION_CHECK: "1" RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" @@ -37,7 +37,7 @@ jobs: check-requirements: name: Check Requirements - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 environment: release-check steps: - name: Check For Admin Permission @@ -49,11 +49,9 @@ jobs: prepare-workflow: name: Prepare Workflow Run runs-on: - - self-hosted - - linux - - repo-release + - linux-x86_64 env: - USE_S3_CACHE: 'true' + USE_S3_CACHE: 'false' environment: release needs: - check-requirements @@ -63,6 +61,7 @@ jobs: latest-release: ${{ steps.get-salt-releases.outputs.latest-release }} releases: ${{ steps.get-salt-releases.outputs.releases }} nox-archive-hash: ${{ steps.nox-archive-hash.outputs.nox-archive-hash }} + config: ${{ steps.workflow-config.outputs.config }} steps: - uses: actions/checkout@v4 with: @@ -121,12 +120,15 @@ jobs: run: | echo "nox-archive-hash=${{ hashFiles('requirements/**/*.txt', 'cicd/golden-images.json', 'noxfile.py', 'pkg/common/env-cleanup-rules.yml', '.github/workflows/build-deps-ci-action.yml') }}" | tee -a "$GITHUB_OUTPUT" + - name: Define workflow config + id: workflow-config + run: | + tools ci workflow-config${{ inputs.skip-salt-pkg-download-test-suite && ' --skip-pkg-download-tests' || '' }} ${{ steps.setup-salt-version.outputs.salt-version }} ${{ github.event_name }} changed-files.json + download-onedir-artifact: name: Download Staging Onedir Artifact runs-on: - - self-hosted - - linux - - repo-release + - linux-x86_64 env: USE_S3_CACHE: 'true' environment: release @@ -186,13 +188,13 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} backup: name: Backup runs-on: - - self-hosted - - linux - - repo-release + - linux-x86_64 needs: - prepare-workflow env: @@ -223,9 +225,7 @@ jobs: publish-repositories: name: Publish Repositories runs-on: - - self-hosted - - linux - - repo-release + - linux-x86_64 env: USE_S3_CACHE: 'true' needs: @@ -255,40 +255,17 @@ jobs: run: | tools pkg repo publish release ${{ needs.prepare-workflow.outputs.salt-version }} - pkg-download-tests: - name: Package Downloads - if: ${{ inputs.skip-salt-pkg-download-test-suite == false }} - needs: - - prepare-workflow - - publish-repositories - - build-ci-deps - - download-onedir-artifact - uses: ./.github/workflows/test-package-downloads-action.yml - with: - nox-session: ci-test-onedir - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - environment: release - nox-version: 2022.8.7 - python-version: "3.10" - skip-code-coverage: true - latest-release: "${{ needs.prepare-workflow.outputs.latest-release }}" - secrets: inherit - release: name: Release v${{ needs.prepare-workflow.outputs.salt-version }} if: ${{ always() && ! failure() && ! cancelled() }} runs-on: - - self-hosted - - linux - - repo-release + - linux-x86_64 env: USE_S3_CACHE: 'true' needs: - prepare-workflow - backup - publish-repositories - - pkg-download-tests environment: release steps: - name: Clone The Salt Repository @@ -395,9 +372,7 @@ jobs: - release environment: release runs-on: - - self-hosted - - linux - - repo-release + - linux-x86_64 env: USE_S3_CACHE: 'true' steps: @@ -449,12 +424,11 @@ jobs: # on a pull request instead of requiring all name: Set the ${{ github.workflow }} Pipeline Exit Status if: always() - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: - check-requirements - prepare-workflow - publish-repositories - - pkg-download-tests - release - publish-pypi - build-ci-deps diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index b8619c9fef7..f8d147d8070 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -12,7 +12,7 @@ on: env: COLUMNS: 190 - CACHE_SEED: SEED-2 # Bump the number to invalidate all caches + CACHE_SEED: SEED-1 # Bump the number to invalidate all caches RELENV_DATA: "${{ github.workspace }}/.relenv" PIP_DISABLE_PIP_VERSION_CHECK: "1" RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" @@ -30,7 +30,7 @@ jobs: workflow-requirements: name: Check Workflow Requirements - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 outputs: requirements-met: ${{ steps.check-requirements.outputs.requirements-met }} steps: @@ -62,7 +62,7 @@ jobs: trigger-branch-scheduled-builds: name: Trigger Branch Workflows if: ${{ github.event_name == 'schedule' && fromJSON(needs.workflow-requirements.outputs.requirements-met) }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: - workflow-requirements @@ -82,16 +82,14 @@ jobs: prepare-workflow: name: Prepare Workflow Run - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 + environment: ci if: ${{ fromJSON(needs.workflow-requirements.outputs.requirements-met) }} needs: - workflow-requirements outputs: jobs: ${{ steps.define-jobs.outputs.jobs }} - runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - os-labels: ${{ steps.get-pull-labels.outputs.os-labels }} - pull-labels: ${{ steps.get-pull-labels.outputs.test-labels }} testrun: ${{ steps.define-testrun.outputs.testrun }} salt-version: ${{ steps.setup-salt-version.outputs.salt-version }} cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }} @@ -100,6 +98,9 @@ jobs: release-changelog-target: ${{ steps.get-release-changelog-target.outputs.release-changelog-target }} testing-releases: ${{ steps.get-testing-releases.outputs.testing-releases }} nox-archive-hash: ${{ steps.nox-archive-hash.outputs.nox-archive-hash }} + config: ${{ steps.workflow-config.outputs.config }} + env: + LINUX_ARM_RUNNER: ${{ vars.LINUX_ARM_RUNNER }} steps: - uses: actions/checkout@v4 with: @@ -212,14 +213,6 @@ jobs: salt-version: "" validate-version: true - - name: Get Pull Request Test Labels - id: get-pull-labels - if: ${{ github.event_name == 'pull_request'}} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - tools ci get-pr-test-labels --repository ${{ github.repository }} - - name: Get Hash For Nox Tarball Cache id: nox-archive-hash run: | @@ -244,11 +237,6 @@ jobs: run: | echo '${{ steps.process-changed-files.outputs.changed-files }}' | jq -C '.' - - name: Define Runner Types - id: runner-types - run: | - tools ci runner-types ${{ github.event_name }} - - name: Define Jobs To Run id: define-jobs run: | @@ -273,6 +261,11 @@ jobs: run: | tools ci define-testrun ${{ github.event_name }} changed-files.json + - name: Define workflow config + id: workflow-config + run: | + tools ci workflow-config ${{ steps.setup-salt-version.outputs.salt-version }} ${{ github.event_name }} changed-files.json + - name: Check Contents of generated testrun-changed-files.txt if: ${{ fromJSON(steps.define-testrun.outputs.testrun)['type'] != 'full' }} run: | @@ -293,7 +286,6 @@ jobs: pre-commit: name: Pre-Commit - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/pre-commit-action.yml needs: - prepare-workflow @@ -304,7 +296,7 @@ jobs: lint: name: Lint - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['lint'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['lint'] }} uses: ./.github/workflows/lint-action.yml needs: - prepare-workflow @@ -312,7 +304,6 @@ jobs: changed-files: ${{ needs.prepare-workflow.outputs.changed-files }} nsis-tests: name: NSIS Tests - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/nsis-tests.yml needs: - prepare-workflow @@ -321,8 +312,9 @@ jobs: prepare-release: name: "Prepare Release: ${{ needs.prepare-workflow.outputs.salt-version }}" - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['prepare-release'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - runs-on: ubuntu-latest + runs-on: + - ubuntu-22.04 + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['prepare-release'] }} needs: - prepare-workflow steps: @@ -444,7 +436,7 @@ jobs: build-docs: name: Documentation - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-docs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-docs'] }} needs: - prepare-workflow - build-source-tarball @@ -455,11 +447,11 @@ jobs: build-source-tarball: name: Build Source Tarball - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-source-tarball'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-source-tarball'] }} needs: - prepare-workflow - prepare-release - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -485,22 +477,22 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" build-deps-onedir: - name: Build Dependencies Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-onedir'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + name: Build Onedir Dependencies + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-deps-onedir'] }} needs: - prepare-workflow uses: ./.github/workflows/build-deps-onedir.yml with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-salt-onedir: name: Build Salt Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-salt-onedir'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-salt-onedir'] }} needs: - prepare-workflow - build-deps-onedir @@ -509,14 +501,14 @@ jobs: with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-pkgs-onedir: name: Build Packages - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] }} needs: - prepare-workflow - build-salt-onedir @@ -524,26 +516,14 @@ jobs: with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" source: "onedir" - - build-pkgs-src: - name: Build Packages - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-salt-onedir - uses: ./.github/workflows/build-packages.yml - with: - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - relenv-version: "0.17.3" - python-version: "3.10.15" - source: "src" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-ci-deps: name: CI Deps - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] }} needs: - prepare-workflow - build-salt-onedir @@ -555,1476 +535,52 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" - - rockylinux-8-pkg-tests: - name: Rocky Linux 8 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} + test-packages: + name: Test Package + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test-pkg'] }} needs: - prepare-workflow - build-pkgs-onedir - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml + uses: ./.github/workflows/test-packages-action.yml with: - distro-slug: rockylinux-8 nox-session: ci-test-onedir - platform: linux - arch: x86_64 salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm nox-version: 2022.8.7 python-version: "3.10" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 skip-code-coverage: true testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-8-arm64-pkg-tests: - name: Rocky Linux 8 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} + test: + name: Test Salt + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test'] }} needs: - prepare-workflow - - build-pkgs-onedir - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml + uses: ./.github/workflows/test-action.yml with: - distro-slug: rockylinux-8-arm64 nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm nox-version: 2022.8.7 python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-9-pkg-tests: - name: Rocky Linux 9 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: rockylinux-9 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-9-arm64-pkg-tests: - name: Rocky Linux 9 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: rockylinux-9-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2-pkg-tests: - name: Amazon Linux 2 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2-arm64-pkg-tests: - name: Amazon Linux 2 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2023-pkg-tests: - name: Amazon Linux 2023 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2023 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2023-arm64-pkg-tests: - name: Amazon Linux 2023 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2023-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-11-pkg-tests: - name: Debian 11 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-11 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-11-arm64-pkg-tests: - name: Debian 11 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-11-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-12-pkg-tests: - name: Debian 12 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-12 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-12-arm64-pkg-tests: - name: Debian 12 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-12-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-pkg-tests: - name: Photon OS 4 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-arm64-pkg-tests: - name: Photon OS 4 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-pkg-tests-fips: - name: Photon OS 4 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-4-arm64-pkg-tests-fips: - name: Photon OS 4 Arm64 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-5-pkg-tests: - name: Photon OS 5 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-5-arm64-pkg-tests: - name: Photon OS 5 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-5-pkg-tests-fips: - name: Photon OS 5 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-5-arm64-pkg-tests-fips: - name: Photon OS 5 Arm64 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - ubuntu-2004-pkg-tests: - name: Ubuntu 20.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-20.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2004-arm64-pkg-tests: - name: Ubuntu 20.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-20.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2204-pkg-tests: - name: Ubuntu 22.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-22.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2204-arm64-pkg-tests: - name: Ubuntu 22.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-22.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2404-pkg-tests: - name: Ubuntu 24.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-24.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2404-arm64-pkg-tests: - name: Ubuntu 24.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-24.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-12-pkg-tests: - name: macOS 12 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-12 - runner: macos-12 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-13-pkg-tests: - name: macOS 13 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-13 - runner: macos-13 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-13-arm64-pkg-tests: - name: macOS 13 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-13-arm64 - runner: macos-13-xlarge - nox-session: ci-test-onedir - platform: macos - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016-nsis-pkg-tests: - name: Windows 2016 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016-msi-pkg-tests: - name: Windows 2016 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2019-nsis-pkg-tests: - name: Windows 2019 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2019-msi-pkg-tests: - name: Windows 2019 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2022-nsis-pkg-tests: - name: Windows 2022 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2022-msi-pkg-tests: - name: Windows 2022 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016: - name: Windows 2016 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 skip-code-coverage: true workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - windows-2019: - name: Windows 2019 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - windows-2022: - name: Windows 2022 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - macos-12: - name: macOS 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-12 - runner: macos-12 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - macos-13: - name: macOS 13 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-13 - runner: macos-13 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - macos-13-arm64: - name: macOS 13 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-13-arm64 - runner: macos-13-xlarge - nox-session: ci-test-onedir - platform: macos - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-8: - name: Rocky Linux 8 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-8 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-8-arm64: - name: Rocky Linux 8 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-8-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-9: - name: Rocky Linux 9 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-9 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-9-arm64: - name: Rocky Linux 9 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-9-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2: - name: Amazon Linux 2 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2-arm64: - name: Amazon Linux 2 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2023: - name: Amazon Linux 2023 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2023 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2023-arm64: - name: Amazon Linux 2023 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2023-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-11: - name: Debian 11 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-11 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-11-arm64: - name: Debian 11 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-11-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-12: - name: Debian 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-12 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-12-arm64: - name: Debian 12 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-12-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - fedora-40: - name: Fedora 40 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: fedora-40 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - opensuse-15: - name: Opensuse 15 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: opensuse-15 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4: - name: Photon OS 4 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4-arm64: - name: Photon OS 4 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4-fips: - name: Photon OS 4 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-4-arm64-fips: - name: Photon OS 4 Arm64 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-5: - name: Photon OS 5 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-5-arm64: - name: Photon OS 5 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-5-fips: - name: Photon OS 5 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-5-arm64-fips: - name: Photon OS 5 Arm64 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - ubuntu-2004: - name: Ubuntu 20.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-20.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2004-arm64: - name: Ubuntu 20.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-20.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2204: - name: Ubuntu 22.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-22.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2204-arm64: - name: Ubuntu 22.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-22.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2404: - name: Ubuntu 24.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-24.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2404-arm64: - name: Ubuntu 24.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-24.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: scheduled - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} + default-timeout: 360 + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} set-pipeline-exit-status: # This step is just so we can make github require this step, to pass checks # on a pull request instead of requiring all name: Set the ${{ github.workflow }} Pipeline Exit Status if: always() - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: - workflow-requirements - trigger-branch-scheduled-builds @@ -2035,77 +591,9 @@ jobs: - build-docs - build-deps-onedir - build-salt-onedir - - build-pkgs-src - build-ci-deps - - windows-2016 - - windows-2019 - - windows-2022 - - macos-12 - - macos-13 - - macos-13-arm64 - - rockylinux-8 - - rockylinux-8-arm64 - - rockylinux-9 - - rockylinux-9-arm64 - - amazonlinux-2 - - amazonlinux-2-arm64 - - amazonlinux-2023 - - amazonlinux-2023-arm64 - - debian-11 - - debian-11-arm64 - - debian-12 - - debian-12-arm64 - - fedora-40 - - opensuse-15 - - photonos-4 - - photonos-4-arm64 - - photonos-4-fips - - photonos-4-arm64-fips - - photonos-5 - - photonos-5-arm64 - - photonos-5-fips - - photonos-5-arm64-fips - - ubuntu-2004 - - ubuntu-2004-arm64 - - ubuntu-2204 - - ubuntu-2204-arm64 - - ubuntu-2404 - - ubuntu-2404-arm64 - - rockylinux-8-pkg-tests - - rockylinux-8-arm64-pkg-tests - - rockylinux-9-pkg-tests - - rockylinux-9-arm64-pkg-tests - - amazonlinux-2-pkg-tests - - amazonlinux-2-arm64-pkg-tests - - amazonlinux-2023-pkg-tests - - amazonlinux-2023-arm64-pkg-tests - - debian-11-pkg-tests - - debian-11-arm64-pkg-tests - - debian-12-pkg-tests - - debian-12-arm64-pkg-tests - - photonos-4-pkg-tests - - photonos-4-arm64-pkg-tests - - photonos-4-pkg-tests-fips - - photonos-4-arm64-pkg-tests-fips - - photonos-5-pkg-tests - - photonos-5-arm64-pkg-tests - - photonos-5-pkg-tests-fips - - photonos-5-arm64-pkg-tests-fips - - ubuntu-2004-pkg-tests - - ubuntu-2004-arm64-pkg-tests - - ubuntu-2204-pkg-tests - - ubuntu-2204-arm64-pkg-tests - - ubuntu-2404-pkg-tests - - ubuntu-2404-arm64-pkg-tests - - macos-12-pkg-tests - - macos-13-pkg-tests - - macos-13-arm64-pkg-tests - - windows-2016-nsis-pkg-tests - - windows-2016-msi-pkg-tests - - windows-2019-nsis-pkg-tests - - windows-2019-msi-pkg-tests - - windows-2022-nsis-pkg-tests - - windows-2022-msi-pkg-tests + - test-packages + - test steps: - name: Get workflow information id: get-workflow-info diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index f99a4d5fab7..1a50da2d47c 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -37,7 +37,7 @@ on: env: COLUMNS: 190 - CACHE_SEED: SEED-2 # Bump the number to invalidate all caches + CACHE_SEED: SEED-1 # Bump the number to invalidate all caches RELENV_DATA: "${{ github.workspace }}/.relenv" PIP_DISABLE_PIP_VERSION_CHECK: "1" RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" @@ -47,15 +47,15 @@ permissions: pull-requests: read # for dorny/paths-filter to read pull requests actions: read # for technote-space/workflow-conclusion-action to get the job statuses -concurrency: - group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.repository }} - cancel-in-progress: false +#concurrency: +# group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.repository }} +# cancel-in-progress: false jobs: check-requirements: name: Check Requirements - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 environment: staging-check steps: - name: Check For Admin Permission @@ -66,15 +66,13 @@ jobs: prepare-workflow: name: Prepare Workflow Run - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 + environment: ci needs: - check-requirements outputs: jobs: ${{ steps.define-jobs.outputs.jobs }} - runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - os-labels: ${{ steps.get-pull-labels.outputs.os-labels }} - pull-labels: ${{ steps.get-pull-labels.outputs.test-labels }} testrun: ${{ steps.define-testrun.outputs.testrun }} salt-version: ${{ steps.setup-salt-version.outputs.salt-version }} cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }} @@ -83,6 +81,9 @@ jobs: release-changelog-target: ${{ steps.get-release-changelog-target.outputs.release-changelog-target }} testing-releases: ${{ steps.get-testing-releases.outputs.testing-releases }} nox-archive-hash: ${{ steps.nox-archive-hash.outputs.nox-archive-hash }} + config: ${{ steps.workflow-config.outputs.config }} + env: + LINUX_ARM_RUNNER: ${{ vars.LINUX_ARM_RUNNER }} steps: - uses: actions/checkout@v4 with: @@ -195,14 +196,6 @@ jobs: salt-version: "${{ inputs.salt-version }}" validate-version: true - - name: Get Pull Request Test Labels - id: get-pull-labels - if: ${{ github.event_name == 'pull_request'}} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - tools ci get-pr-test-labels --repository ${{ github.repository }} - - name: Get Hash For Nox Tarball Cache id: nox-archive-hash run: | @@ -236,11 +229,6 @@ jobs: run: | echo '${{ steps.process-changed-files.outputs.changed-files }}' | jq -C '.' - - name: Define Runner Types - id: runner-types - run: | - tools ci runner-types ${{ github.event_name }} - - name: Define Jobs To Run id: define-jobs run: | @@ -265,6 +253,11 @@ jobs: run: | tools ci define-testrun ${{ github.event_name }} changed-files.json + - name: Define workflow config + id: workflow-config + run: | + tools ci workflow-config${{ inputs.skip-salt-test-suite && ' --skip-tests' || '' }}${{ inputs.skip-salt-pkg-test-suite && ' --skip-pkg-tests' || '' }}${{ inputs.skip-salt-pkg-download-test-suite && ' --skip-pkg-download-tests' || '' }} ${{ steps.setup-salt-version.outputs.salt-version }} ${{ github.event_name }} changed-files.json + - name: Check Contents of generated testrun-changed-files.txt if: ${{ fromJSON(steps.define-testrun.outputs.testrun)['type'] != 'full' }} run: | @@ -285,7 +278,6 @@ jobs: pre-commit: name: Pre-Commit - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/pre-commit-action.yml needs: - prepare-workflow @@ -296,7 +288,7 @@ jobs: lint: name: Lint - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['lint'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['lint'] }} uses: ./.github/workflows/lint-action.yml needs: - prepare-workflow @@ -304,7 +296,6 @@ jobs: changed-files: ${{ needs.prepare-workflow.outputs.changed-files }} nsis-tests: name: NSIS Tests - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/nsis-tests.yml needs: - prepare-workflow @@ -313,17 +304,19 @@ jobs: prepare-release: name: "Prepare Release: ${{ needs.prepare-workflow.outputs.salt-version }}" - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['prepare-release'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} runs-on: - - self-hosted - - linux - - medium - - x86_64 + - ubuntu-22.04 + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['prepare-release'] }} needs: - prepare-workflow steps: - uses: actions/checkout@v4 + - name: Set up Python 3.10 + uses: actions/setup-python@v5 + with: + python-version: "3.10" + - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: @@ -436,7 +429,7 @@ jobs: build-docs: name: Documentation - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-docs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-docs'] }} needs: - prepare-workflow - build-source-tarball @@ -447,11 +440,11 @@ jobs: build-source-tarball: name: Build Source Tarball - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-source-tarball'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-source-tarball'] }} needs: - prepare-workflow - prepare-release - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -477,22 +470,22 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" build-deps-onedir: - name: Build Dependencies Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-onedir'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + name: Build Onedir Dependencies + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-deps-onedir'] }} needs: - prepare-workflow uses: ./.github/workflows/build-deps-onedir.yml with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-salt-onedir: name: Build Salt Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-salt-onedir'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['build-salt-onedir'] }} needs: - prepare-workflow - build-deps-onedir @@ -501,14 +494,14 @@ jobs: with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} build-pkgs-onedir: name: Build Packages - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] }} needs: - prepare-workflow - build-salt-onedir @@ -516,9 +509,11 @@ jobs: with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" source: "onedir" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} environment: staging sign-macos-packages: false sign-windows-packages: ${{ inputs.sign-windows-packages }} @@ -526,7 +521,7 @@ jobs: build-pkgs-src: name: Build Packages - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] }} needs: - prepare-workflow - build-salt-onedir @@ -534,16 +529,18 @@ jobs: with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - relenv-version: "0.17.3" + relenv-version: "0.18.0" python-version: "3.10.15" source: "src" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} environment: staging sign-macos-packages: false sign-windows-packages: ${{ inputs.sign-windows-packages }} secrets: inherit build-ci-deps: name: CI Deps - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] }} needs: - prepare-workflow - build-salt-onedir @@ -555,2286 +552,57 @@ jobs: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" - - rockylinux-8-pkg-tests: - name: Rocky Linux 8 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} + test-packages: + name: Test Package + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test-pkg'] }} needs: - prepare-workflow - build-pkgs-onedir - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml + uses: ./.github/workflows/test-packages-action.yml with: - distro-slug: rockylinux-8 nox-session: ci-test-onedir - platform: linux - arch: x86_64 salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm nox-version: 2022.8.7 python-version: "3.10" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 skip-code-coverage: true testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-8-arm64-pkg-tests: - name: Rocky Linux 8 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} + test: + name: Test Salt + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test'] }} needs: - prepare-workflow - - build-pkgs-onedir - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml + uses: ./.github/workflows/test-action.yml with: - distro-slug: rockylinux-8-arm64 nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm nox-version: 2022.8.7 python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-9-pkg-tests: - name: Rocky Linux 9 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: rockylinux-9 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - rockylinux-9-arm64-pkg-tests: - name: Rocky Linux 9 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: rockylinux-9-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2-pkg-tests: - name: Amazon Linux 2 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2-arm64-pkg-tests: - name: Amazon Linux 2 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2023-pkg-tests: - name: Amazon Linux 2023 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2023 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - amazonlinux-2023-arm64-pkg-tests: - name: Amazon Linux 2023 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: amazonlinux-2023-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-11-pkg-tests: - name: Debian 11 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-11 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-11-arm64-pkg-tests: - name: Debian 11 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-11-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-12-pkg-tests: - name: Debian 12 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-12 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-12-arm64-pkg-tests: - name: Debian 12 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: debian-12-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-pkg-tests: - name: Photon OS 4 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-arm64-pkg-tests: - name: Photon OS 4 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-4-pkg-tests-fips: - name: Photon OS 4 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-4-arm64-pkg-tests-fips: - name: Photon OS 4 Arm64 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-5-pkg-tests: - name: Photon OS 5 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-5-arm64-pkg-tests: - name: Photon OS 5 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - photonos-5-pkg-tests-fips: - name: Photon OS 5 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - photonos-5-arm64-pkg-tests-fips: - name: Photon OS 5 Arm64 Package Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: rpm - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - fips: true - - ubuntu-2004-pkg-tests: - name: Ubuntu 20.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-20.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2004-arm64-pkg-tests: - name: Ubuntu 20.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-20.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2204-pkg-tests: - name: Ubuntu 22.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-22.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2204-arm64-pkg-tests: - name: Ubuntu 22.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-22.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2404-pkg-tests: - name: Ubuntu 24.04 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-24.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - ubuntu-2404-arm64-pkg-tests: - name: Ubuntu 24.04 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml - with: - distro-slug: ubuntu-24.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: deb - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-12-pkg-tests: - name: macOS 12 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-12 - runner: macos-12 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-13-pkg-tests: - name: macOS 13 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-13 - runner: macos-13 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - macos-13-arm64-pkg-tests: - name: macOS 13 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: macos-13-arm64 - runner: macos-13-xlarge - nox-session: ci-test-onedir - platform: macos - arch: arm64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016-nsis-pkg-tests: - name: Windows 2016 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016-msi-pkg-tests: - name: Windows 2016 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2019-nsis-pkg-tests: - name: Windows 2019 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2019-msi-pkg-tests: - name: Windows 2019 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2022-nsis-pkg-tests: - name: Windows 2022 NSIS Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: NSIS - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2022-msi-pkg-tests: - name: Windows 2022 MSI Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: MSI - nox-version: 2022.8.7 - python-version: "3.10" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - windows-2016: - name: Windows 2016 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2016 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 skip-code-coverage: true workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - windows-2019: - name: Windows 2019 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2019 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - windows-2022: - name: Windows 2022 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml - with: - distro-slug: windows-2022 - nox-session: ci-test-onedir - platform: windows - arch: amd64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 210 || 360 }} - - macos-12: - name: macOS 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-12 - runner: macos-12 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - macos-13: - name: macOS 13 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-13 - runner: macos-13 - nox-session: ci-test-onedir - platform: macos - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - macos-13-arm64: - name: macOS 13 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: macos-13-arm64 - runner: macos-13-xlarge - nox-session: ci-test-onedir - platform: macos - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-8: - name: Rocky Linux 8 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-8 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-8-arm64: - name: Rocky Linux 8 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-8-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-9: - name: Rocky Linux 9 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-9 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - rockylinux-9-arm64: - name: Rocky Linux 9 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: rockylinux-9-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2: - name: Amazon Linux 2 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2-arm64: - name: Amazon Linux 2 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2023: - name: Amazon Linux 2023 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2023 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - amazonlinux-2023-arm64: - name: Amazon Linux 2023 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: amazonlinux-2023-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-11: - name: Debian 11 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-11 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-11-arm64: - name: Debian 11 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-11-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-12: - name: Debian 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-12 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - debian-12-arm64: - name: Debian 12 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: debian-12-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - fedora-40: - name: Fedora 40 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: fedora-40 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - opensuse-15: - name: Opensuse 15 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: opensuse-15 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4: - name: Photon OS 4 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4-arm64: - name: Photon OS 4 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-4-fips: - name: Photon OS 4 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-4-arm64-fips: - name: Photon OS 4 Arm64 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-4-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-5: - name: Photon OS 5 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-5-arm64: - name: Photon OS 5 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - photonos-5-fips: - name: Photon OS 5 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - photonos-5-arm64-fips: - name: Photon OS 5 Arm64 Test (fips) - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: photonos-5-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - fips: true - - ubuntu-2004: - name: Ubuntu 20.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-20.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2004-arm64: - name: Ubuntu 20.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-20.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2204: - name: Ubuntu 22.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-22.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2204-arm64: - name: Ubuntu 22.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-22.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2404: - name: Ubuntu 24.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-24.04 - nox-session: ci-test-onedir - platform: linux - arch: x86_64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - ubuntu-2404-arm64: - name: Ubuntu 24.04 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: ubuntu-24.04-arm64 - nox-session: ci-test-onedir - platform: linux - arch: arm64 - nox-version: 2022.8.7 - gh-actions-python-version: "3.10" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - skip-code-coverage: true - workflow-slug: staging - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && 180 || 360 }} - - build-src-repo: - name: Build Repository - environment: staging - runs-on: - - self-hosted - - linux - - repo-staging - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-source-tarball - - build-pkgs-src - strategy: - fail-fast: false - matrix: - pkg-type: - - src - - steps: - - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download Source Tarball - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create src --key-id=64CBBC8173D76B3F \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Copy Files For Source Only Artifact Uploads - run: | - mkdir artifacts/src - find artifacts/pkgs/repo -type f -print -exec cp {} artifacts/src \; - - - name: Upload Standalone Repository As An Artifact - uses: actions/upload-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-staging-src-repo - path: | - artifacts/src/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz - artifacts/src/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz.* - artifacts/src/*-GPG-* - retention-days: 7 - if-no-files-found: error - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-staging-repo-src - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: src-repo - - build-deb-repo: - name: Build Repository - environment: staging - runs-on: - - self-hosted - - linux - - repo-staging - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-pkgs-onedir - strategy: - fail-fast: false - matrix: - include: - - pkg-type: deb - distro: debian - version: "11" - arch: x86_64 - - pkg-type: deb - distro: debian - version: "11" - arch: arm64 - - pkg-type: deb - distro: debian - version: "12" - arch: x86_64 - - pkg-type: deb - distro: debian - version: "12" - arch: arm64 - - pkg-type: deb - distro: ubuntu - version: "20.04" - arch: x86_64 - - pkg-type: deb - distro: ubuntu - version: "20.04" - arch: arm64 - - pkg-type: deb - distro: ubuntu - version: "22.04" - arch: x86_64 - - pkg-type: deb - distro: ubuntu - version: "22.04" - arch: arm64 - - pkg-type: deb - distro: ubuntu - version: "24.04" - arch: x86_64 - - pkg-type: deb - distro: ubuntu - version: "24.04" - arch: arm64 - - steps: - - uses: actions/checkout@v4 - - - name: Download System Dependencies - run: | - sudo apt update - sudo apt install -y devscripts apt-utils - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download DEB Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-${{ matrix.arch }}-deb - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create deb --key-id=64CBBC8173D76B3F --distro-arch=${{ matrix.arch }} \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --distro=${{ matrix.distro }} --distro-version=${{ matrix.version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-staging-repo-${{ matrix.pkg-type }}-${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }} - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: ${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }}-repo - - build-rpm-repo: - name: Build Repository - environment: staging - runs-on: - - self-hosted - - linux - - repo-staging - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-pkgs-onedir - strategy: - fail-fast: false - matrix: - include: - - pkg-type: rpm - distro: amazon - version: "2" - arch: x86_64 - - pkg-type: rpm - distro: amazon - version: "2" - arch: arm64 - - pkg-type: rpm - distro: amazon - version: "2" - arch: aarch64 - - pkg-type: rpm - distro: amazon - version: "2023" - arch: x86_64 - - pkg-type: rpm - distro: amazon - version: "2023" - arch: arm64 - - pkg-type: rpm - distro: amazon - version: "2023" - arch: aarch64 - - pkg-type: rpm - distro: fedora - version: "40" - arch: x86_64 - - pkg-type: rpm - distro: fedora - version: "40" - arch: arm64 - - pkg-type: rpm - distro: fedora - version: "40" - arch: aarch64 - - pkg-type: rpm - distro: photon - version: "4" - arch: x86_64 - - pkg-type: rpm - distro: photon - version: "4" - arch: arm64 - - pkg-type: rpm - distro: photon - version: "4" - arch: aarch64 - - pkg-type: rpm - distro: photon - version: "5" - arch: x86_64 - - pkg-type: rpm - distro: photon - version: "5" - arch: arm64 - - pkg-type: rpm - distro: photon - version: "5" - arch: aarch64 - - pkg-type: rpm - distro: redhat - version: "8" - arch: x86_64 - - pkg-type: rpm - distro: redhat - version: "8" - arch: arm64 - - pkg-type: rpm - distro: redhat - version: "8" - arch: aarch64 - - pkg-type: rpm - distro: redhat - version: "9" - arch: x86_64 - - pkg-type: rpm - distro: redhat - version: "9" - arch: arm64 - - pkg-type: rpm - distro: redhat - version: "9" - arch: aarch64 - - steps: - - uses: actions/checkout@v4 - - - name: Download System Dependencies - run: | - sudo apt update - sudo apt install -y rpm - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download RPM Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-${{ matrix.arch == 'aarch64' && 'arm64' || matrix.arch }}-rpm - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - env: - SALT_REPO_USER: ${{ secrets.SALT_REPO_USER }} - SALT_REPO_PASS: ${{ secrets.SALT_REPO_PASS }} - SALT_REPO_DOMAIN_RELEASE: ${{ vars.SALT_REPO_DOMAIN_RELEASE || 'repo.saltproject.io' }} - SALT_REPO_DOMAIN_STAGING: ${{ vars.SALT_REPO_DOMAIN_STAGING || 'staging.repo.saltproject.io' }} - run: | - tools pkg repo create rpm --key-id=64CBBC8173D76B3F --distro-arch=${{ matrix.arch }} \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --distro=${{ matrix.distro }} --distro-version=${{ matrix.version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-staging-repo-${{ matrix.pkg-type }}-${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }} - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: ${{ matrix.distro }}-${{ matrix.version }}-${{ matrix.arch }}-repo - - build-windows-repo: - name: Build Repository - environment: staging - runs-on: - - self-hosted - - linux - - repo-staging - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-pkgs-onedir - strategy: - fail-fast: false - matrix: - pkg-type: - - windows - - steps: - - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download Windows NSIS x86 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-x86-NSIS - path: artifacts/pkgs/incoming - - - name: Download Windows MSI x86 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-x86-MSI - path: artifacts/pkgs/incoming - - - name: Download Windows NSIS amd64 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-amd64-NSIS - path: artifacts/pkgs/incoming - - - name: Download Windows MSI amd64 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-amd64-MSI - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create windows --key-id=64CBBC8173D76B3F \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-staging-repo-windows - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: windows-repo - - build-macos-repo: - name: Build Repository - environment: staging - runs-on: - - self-hosted - - linux - - repo-staging - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-pkgs-onedir - strategy: - fail-fast: false - matrix: - pkg-type: - - macos - - steps: - - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download macOS x86_64 Packages - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-x86_64-macos - path: artifacts/pkgs/incoming - - - name: Download macOS Arch64 Packages - if: ${{ ! github.event.repository.fork }} - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-arm64-macos - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create macos --key-id=64CBBC8173D76B3F \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-staging-repo-macos - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: macos-repo - - build-onedir-repo: - name: Build Repository - environment: staging - runs-on: - - self-hosted - - linux - - repo-staging - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - - build-salt-onedir - strategy: - fail-fast: false - matrix: - pkg-type: - - onedir - - steps: - - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Download Linux x86_64 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-linux-x86_64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download Linux arm64 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-linux-arm64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download macOS x86_64 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-macos-x86_64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download macOS arm64 Onedir Archive - if: ${{ ! github.event.repository.fork }} - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-macos-arm64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download Windows amd64 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-windows-amd64.tar.xz - path: artifacts/pkgs/incoming - - - name: Download Windows amd64 Onedir Archive(zip) - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-windows-amd64.zip - path: artifacts/pkgs/incoming - - - name: Download Windows x86 Onedir Archive - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-windows-x86.tar.xz - path: artifacts/pkgs/incoming - - - name: Download Windows amd64 Onedir Archive(zip) - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-onedir-windows-x86.zip - path: artifacts/pkgs/incoming - - - name: Setup GnuPG - run: | - sudo install -d -m 0700 -o "$(id -u)" -g "$(id -g)" /run/gpg - GNUPGHOME="$(mktemp -d -p /run/gpg)" - echo "GNUPGHOME=${GNUPGHOME}" >> "$GITHUB_ENV" - cat < "${GNUPGHOME}/gpg.conf" - batch - no-tty - pinentry-mode loopback - EOF - - - name: Get Secrets - env: - SECRETS_KEY: ${{ secrets.SECRETS_KEY }} - run: | - SECRETS_KEY_FILE=$(mktemp /tmp/output.XXXXXXXXXX) - echo "$SECRETS_KEY" > "$SECRETS_KEY_FILE" - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text | jq .default_key -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -d - \ - | gpg --import - - sync - aws --region us-west-2 secretsmanager get-secret-value --secret-id /cmbu-saltstack/signing/repo-signing-keys-sha256-2023 \ - --query SecretString --output text| jq .default_passphrase -r | base64 -d \ - | gpg --passphrase-file "${SECRETS_KEY_FILE}" -o "${GNUPGHOME}/passphrase" -d - - sync - rm "$SECRETS_KEY_FILE" - echo "passphrase-file ${GNUPGHOME}/passphrase" >> "${GNUPGHOME}/gpg.conf" - - - name: Create Repository Path - run: | - mkdir -p artifacts/pkgs/repo - - - name: Create Repository - run: | - tools pkg repo create onedir --key-id=64CBBC8173D76B3F \ - --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} \ - --incoming=artifacts/pkgs/incoming --repo-path=artifacts/pkgs/repo - - - name: Upload Repository As An Artifact - uses: ./.github/actions/upload-artifact - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-staging-repo-onedir - path: artifacts/pkgs/repo/* - retention-days: 7 - if-no-files-found: error - archive-name: onedir-repo - - publish-repositories: - name: Publish Repositories - if: ${{ always() && ! failure() && ! cancelled() }} - runs-on: - - self-hosted - - linux - - repo-staging - environment: staging - needs: - - prepare-workflow - - build-docs - - build-src-repo - - build-deb-repo - - build-rpm-repo - - build-windows-repo - - build-macos-repo - - build-onedir-repo - - steps: - - - uses: actions/checkout@v4 - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Download Repository Artifact - uses: actions/download-artifact@v4 - with: - pattern: salt-${{ needs.prepare-workflow.outputs.salt-version }}-staging-repo-* - merge-multiple: true - path: repo/ - - - name: Decompress Repository Artifacts - run: | - find repo/ -type f -name '*.tar.gz' -print -exec tar xvf {} \; - find repo/ -type f -name '*.tar.gz' -print -exec rm -f {} \; - - - name: Show Repository - run: | - tree -a artifacts/pkgs/repo/ - - - name: Upload Repository Contents (staging) - env: - SALT_REPO_DOMAIN_RELEASE: ${{ vars.SALT_REPO_DOMAIN_RELEASE || 'repo.saltproject.io' }} - SALT_REPO_DOMAIN_STAGING: ${{ vars.SALT_REPO_DOMAIN_STAGING || 'staging.repo.saltproject.io' }} - run: | - tools pkg repo publish staging --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} artifacts/pkgs/repo/ + default-timeout: 180 + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} upload-release-artifacts: name: Upload Release Artifacts needs: - prepare-workflow - build-docs - - build-src-repo environment: staging runs-on: - - self-hosted - - linux - - repo-staging + - ubuntu-22.04 steps: - uses: actions/checkout@v4 - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: @@ -2846,12 +614,6 @@ jobs: name: salt-${{ needs.prepare-workflow.outputs.salt-version }}.patch path: artifacts/release - - name: Download Source Repository - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-staging-src-repo - path: artifacts/release - - name: Download Release Documentation (HTML) uses: actions/download-artifact@v4 with: @@ -2862,40 +624,6 @@ jobs: run: | tree -a artifacts/release - - name: Upload Release Artifacts - run: | - tools release upload-artifacts ${{ needs.prepare-workflow.outputs.salt-version }} artifacts/release - - - name: Upload PyPi Artifacts - uses: actions/upload-artifact@v4 - with: - name: pypi-artifacts - path: | - artifacts/release/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz - artifacts/release/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz.asc - retention-days: 7 - if-no-files-found: error - - pkg-download-tests: - name: Package Downloads - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg-download'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - needs: - - prepare-workflow - - publish-repositories - - build-ci-deps - - build-salt-onedir - uses: ./.github/workflows/test-package-downloads-action.yml - with: - nox-session: ci-test-onedir - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15 - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - environment: staging - nox-version: 2022.8.7 - python-version: "3.10" - skip-code-coverage: true - latest-release: "${{ needs.prepare-workflow.outputs.latest-release }}" - secrets: inherit - publish-pypi: name: Publish to PyPi(test) if: ${{ inputs.skip-test-pypi-publish != true && github.event.repository.fork != true }} @@ -2903,81 +631,9 @@ jobs: - prepare-workflow - upload-release-artifacts - build-ci-deps - - windows-2016 - - windows-2019 - - windows-2022 - - macos-12 - - macos-13 - - macos-13-arm64 - - rockylinux-8 - - rockylinux-8-arm64 - - rockylinux-9 - - rockylinux-9-arm64 - - amazonlinux-2 - - amazonlinux-2-arm64 - - amazonlinux-2023 - - amazonlinux-2023-arm64 - - debian-11 - - debian-11-arm64 - - debian-12 - - debian-12-arm64 - - fedora-40 - - opensuse-15 - - photonos-4 - - photonos-4-arm64 - - photonos-4-fips - - photonos-4-arm64-fips - - photonos-5 - - photonos-5-arm64 - - photonos-5-fips - - photonos-5-arm64-fips - - ubuntu-2004 - - ubuntu-2004-arm64 - - ubuntu-2204 - - ubuntu-2204-arm64 - - ubuntu-2404 - - ubuntu-2404-arm64 - - rockylinux-8-pkg-tests - - rockylinux-8-arm64-pkg-tests - - rockylinux-9-pkg-tests - - rockylinux-9-arm64-pkg-tests - - amazonlinux-2-pkg-tests - - amazonlinux-2-arm64-pkg-tests - - amazonlinux-2023-pkg-tests - - amazonlinux-2023-arm64-pkg-tests - - debian-11-pkg-tests - - debian-11-arm64-pkg-tests - - debian-12-pkg-tests - - debian-12-arm64-pkg-tests - - photonos-4-pkg-tests - - photonos-4-arm64-pkg-tests - - photonos-4-pkg-tests-fips - - photonos-4-arm64-pkg-tests-fips - - photonos-5-pkg-tests - - photonos-5-arm64-pkg-tests - - photonos-5-pkg-tests-fips - - photonos-5-arm64-pkg-tests-fips - - ubuntu-2004-pkg-tests - - ubuntu-2004-arm64-pkg-tests - - ubuntu-2204-pkg-tests - - ubuntu-2204-arm64-pkg-tests - - ubuntu-2404-pkg-tests - - ubuntu-2404-arm64-pkg-tests - - macos-12-pkg-tests - - macos-13-pkg-tests - - macos-13-arm64-pkg-tests - - windows-2016-nsis-pkg-tests - - windows-2016-msi-pkg-tests - - windows-2019-nsis-pkg-tests - - windows-2019-msi-pkg-tests - - windows-2022-nsis-pkg-tests - - windows-2022-msi-pkg-tests - - pkg-download-tests environment: staging runs-on: - - self-hosted - - linux - - repo-staging + - ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -3022,12 +678,36 @@ jobs: run: | tools pkg pypi-upload --test artifacts/release/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz + draft-release: + name: Draft Github Release + if: | + always() && (needs.test.result == 'success' || needs.test.result == 'skipped') && + (needs.test-packages.result == 'success' || needs.test-packages.result == 'skipped') && + needs.prepare-workflow.result == 'success' && needs.build-salt-onedir.result == 'success' && + needs.build-pkgs-onedir.result == 'success' && needs.pre-commit.result == 'success' + needs: + - prepare-workflow + - pre-commit + - build-salt-onedir + - build-pkgs-onedir + - test-packages + - test + permissions: + contents: write + pull-requests: read + id-token: write + uses: ./.github/workflows/draft-release.yml + with: + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['artifact-matrix']) }} + build-matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + set-pipeline-exit-status: # This step is just so we can make github require this step, to pass checks # on a pull request instead of requiring all name: Set the ${{ github.workflow }} Pipeline Exit Status if: always() - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: - check-requirements - prepare-workflow @@ -3038,10 +718,10 @@ jobs: - build-deps-onedir - build-salt-onedir - build-pkgs-src - - publish-repositories - upload-release-artifacts - - pkg-download-tests - publish-pypi + - test-packages + - test steps: - name: Get workflow information id: get-workflow-info diff --git a/.github/workflows/templates/build-ci-deps.yml.jinja b/.github/workflows/templates/build-ci-deps.yml.jinja index 59f2bf0b9bc..63b658a1a31 100644 --- a/.github/workflows/templates/build-ci-deps.yml.jinja +++ b/.github/workflows/templates/build-ci-deps.yml.jinja @@ -1,9 +1,10 @@ build-ci-deps: <%- do test_salt_needs.append("build-ci-deps") %> + <%- do test_salt_linux_needs.append("build-ci-deps") %> name: CI Deps <%- if workflow_slug != 'release' %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] }} <%- endif %> needs: - prepare-workflow @@ -20,3 +21,5 @@ salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} diff --git a/.github/workflows/templates/build-deb-repo.yml.jinja b/.github/workflows/templates/build-deb-repo.yml.jinja index 91f8348385c..0772375c76e 100644 --- a/.github/workflows/templates/build-deb-repo.yml.jinja +++ b/.github/workflows/templates/build-deb-repo.yml.jinja @@ -23,12 +23,6 @@ with: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - name: Download DEB Packages uses: actions/download-artifact@v4 with: diff --git a/.github/workflows/templates/build-macos-repo.yml.jinja b/.github/workflows/templates/build-macos-repo.yml.jinja index 835e366bf52..6753d64133b 100644 --- a/.github/workflows/templates/build-macos-repo.yml.jinja +++ b/.github/workflows/templates/build-macos-repo.yml.jinja @@ -13,12 +13,6 @@ with: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - name: Download macOS x86_64 Packages uses: actions/download-artifact@v4 with: diff --git a/.github/workflows/templates/build-onedir-repo.yml.jinja b/.github/workflows/templates/build-onedir-repo.yml.jinja index c6b51f07166..bb7db53905e 100644 --- a/.github/workflows/templates/build-onedir-repo.yml.jinja +++ b/.github/workflows/templates/build-onedir-repo.yml.jinja @@ -13,12 +13,6 @@ with: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - name: Download Linux x86_64 Onedir Archive uses: actions/download-artifact@v4 with: diff --git a/.github/workflows/templates/build-packages.yml.jinja b/.github/workflows/templates/build-packages.yml.jinja index e2ae278a044..8f93dc94d1e 100644 --- a/.github/workflows/templates/build-packages.yml.jinja +++ b/.github/workflows/templates/build-packages.yml.jinja @@ -1,4 +1,9 @@ - <%- for backend in ("onedir", "src") %> +<%- if gh_environment != "ci" -%> +<%- set pkg_types = ("onedir", "src") %> +<%- else -%> +<%- set pkg_types = ("onedir",) %> +<%- endif -%> + <%- for backend in pkg_types %> <%- set job_name = "build-pkgs-{}".format(backend) %> <%- if backend == "src" %> <%- do conclusion_needs.append(job_name) %> @@ -6,7 +11,7 @@ <{ job_name }>: name: Build Packages - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-pkgs'] }} needs: - prepare-workflow - build-salt-onedir @@ -17,11 +22,14 @@ relenv-version: "<{ relenv_version }>" python-version: "<{ python_version }>" source: "<{ backend }>" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} <%- if gh_environment != "ci" %> environment: <{ gh_environment }> sign-macos-packages: false sign-windows-packages: <% if gh_environment == 'nightly' -%> false <%- else -%> ${{ inputs.sign-windows-packages }} <%- endif %> secrets: inherit + <%- endif %> <%- endfor %> diff --git a/.github/workflows/templates/build-repos.yml.jinja b/.github/workflows/templates/build-repos.yml.jinja deleted file mode 100644 index 92f621c857e..00000000000 --- a/.github/workflows/templates/build-repos.yml.jinja +++ /dev/null @@ -1,35 +0,0 @@ -<%- for type, display_name in ( - ("src", "Source"), - ("deb", "DEB"), - ("rpm", "RPM"), - ("windows", "Windows"), - ("macos", "macOS"), - ("onedir", "Onedir"), - ) %> - - <%- set job_name = "build-{}-repo".format(type) %> - <%- do build_repo_needs.append(job_name) %> - - <{ job_name }>: - name: Build Repository - environment: <{ gh_environment }> - runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> - env: - USE_S3_CACHE: 'true' - needs: - - prepare-workflow - <%- if type not in ("src", "onedir") %> - - build-pkgs-onedir - <%- elif type == 'onedir' %> - - build-salt-onedir - <%- elif type == 'src' %> - - build-source-tarball - - build-pkgs-src - <%- endif %> - - <%- include "build-{}-repo.yml.jinja".format(type) %> - -<%- endfor %> diff --git a/.github/workflows/templates/build-rpm-repo.yml.jinja b/.github/workflows/templates/build-rpm-repo.yml.jinja index 7039043d4bf..836382bac42 100644 --- a/.github/workflows/templates/build-rpm-repo.yml.jinja +++ b/.github/workflows/templates/build-rpm-repo.yml.jinja @@ -23,12 +23,6 @@ with: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - name: Download RPM Packages uses: actions/download-artifact@v4 with: diff --git a/.github/workflows/templates/build-src-repo.yml.jinja b/.github/workflows/templates/build-src-repo.yml.jinja index 8409f05879b..9127ba7aae6 100644 --- a/.github/workflows/templates/build-src-repo.yml.jinja +++ b/.github/workflows/templates/build-src-repo.yml.jinja @@ -13,12 +13,6 @@ with: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - name: Download Source Tarball uses: actions/download-artifact@v4 with: diff --git a/.github/workflows/templates/ci.yml.jinja b/.github/workflows/templates/ci.yml.jinja index 8e3b495be33..d68ae97256d 100644 --- a/.github/workflows/templates/ci.yml.jinja +++ b/.github/workflows/templates/ci.yml.jinja @@ -12,7 +12,6 @@ <{ job_name }>: <%- do conclusion_needs.append(job_name) %> name: Pre-Commit - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/pre-commit-action.yml needs: - prepare-workflow @@ -30,7 +29,7 @@ lint: <%- do conclusion_needs.append('lint') %> name: Lint - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['<{ job_name }>'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['<{ job_name }>'] }} uses: ./.github/workflows/lint-action.yml needs: - prepare-workflow @@ -44,7 +43,6 @@ <{ job_name }>: <%- do conclusion_needs.append(job_name) %> name: NSIS Tests - if: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} uses: ./.github/workflows/nsis-tests.yml needs: - prepare-workflow @@ -58,31 +56,19 @@ <{ job_name }>: name: "Prepare Release: ${{ needs.prepare-workflow.outputs.salt-version }}" - <%- if prepare_actual_release %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['<{ job_name }>'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} runs-on: - - self-hosted - - linux - - medium - - x86_64 - <%- else %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['<{ job_name }>'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - runs-on: ubuntu-latest - <%- endif %> + - ubuntu-22.04 + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['<{ job_name }>'] }} needs: - prepare-workflow steps: - uses: actions/checkout@v4 - <%- if not prepare_actual_release %> - - name: Set up Python 3.10 uses: actions/setup-python@v5 with: python-version: "3.10" - <%- endif %> - - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: @@ -204,7 +190,7 @@ <{ job_name }>: <%- do conclusion_needs.append(job_name) %> name: Documentation - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['<{ job_name }>'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['<{ job_name }>'] }} needs: - prepare-workflow - build-source-tarball @@ -221,11 +207,11 @@ <{ job_name }>: name: Build Source Tarball - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['<{ job_name }>'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['<{ job_name }>'] }} needs: - prepare-workflow - prepare-release - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -258,29 +244,28 @@ <{ job_name }>: <%- do conclusion_needs.append(job_name) %> - name: Build Dependencies Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['<{ job_name }>'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + name: Build Onedir Dependencies + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['<{ job_name }>'] }} needs: - prepare-workflow uses: ./.github/workflows/build-deps-onedir.yml with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} relenv-version: "<{ relenv_version }>" python-version: "<{ python_version }>" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} <%- endif %> - <%- set job_name = "build-salt-onedir" %> <%- if includes.get(job_name, True) %> <{ job_name }>: <%- do conclusion_needs.append(job_name) %> name: Build Salt Onedir - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['<{ job_name }>'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['<{ job_name }>'] }} needs: - prepare-workflow - build-deps-onedir @@ -289,14 +274,13 @@ with: cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} relenv-version: "<{ relenv_version }>" python-version: "<{ python_version }>" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} <%- endif %> - <%- set job_name = "build-pkgs" %> <%- if includes.get(job_name, True) %> <%- include "build-packages.yml.jinja" %> @@ -323,7 +307,7 @@ <%- do conclusion_needs.append("combine-all-code-coverage") %> name: Combine Code Coverage if: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] == false }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 env: PIP_INDEX_URL: https://pypi.org/simple needs: diff --git a/.github/workflows/templates/layout.yml.jinja b/.github/workflows/templates/layout.yml.jinja index 82663013e8e..9fcafa094ac 100644 --- a/.github/workflows/templates/layout.yml.jinja +++ b/.github/workflows/templates/layout.yml.jinja @@ -34,7 +34,7 @@ on: env: COLUMNS: 190 - CACHE_SEED: SEED-2 # Bump the number to invalidate all caches + CACHE_SEED: SEED-1 # Bump the number to invalidate all caches RELENV_DATA: "${{ github.workspace }}/.relenv" PIP_DISABLE_PIP_VERSION_CHECK: "1" RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" @@ -77,7 +77,8 @@ jobs: prepare-workflow: name: Prepare Workflow Run - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 + environment: ci <%- if prepare_workflow_if_check %> if: <{ prepare_workflow_if_check }> <%- endif %> @@ -89,10 +90,7 @@ jobs: <%- endif %> outputs: jobs: ${{ steps.define-jobs.outputs.jobs }} - runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - os-labels: ${{ steps.get-pull-labels.outputs.os-labels }} - pull-labels: ${{ steps.get-pull-labels.outputs.test-labels }} testrun: ${{ steps.define-testrun.outputs.testrun }} salt-version: ${{ steps.setup-salt-version.outputs.salt-version }} cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }} @@ -101,6 +99,9 @@ jobs: release-changelog-target: ${{ steps.get-release-changelog-target.outputs.release-changelog-target }} testing-releases: ${{ steps.get-testing-releases.outputs.testing-releases }} nox-archive-hash: ${{ steps.nox-archive-hash.outputs.nox-archive-hash }} + config: ${{ steps.workflow-config.outputs.config }} + env: + LINUX_ARM_RUNNER: ${{ vars.LINUX_ARM_RUNNER }} steps: - uses: actions/checkout@v4 with: @@ -213,14 +214,6 @@ jobs: salt-version: "<{ prepare_workflow_salt_version_input }>" validate-version: true - - name: Get Pull Request Test Labels - id: get-pull-labels - if: ${{ github.event_name == 'pull_request'}} - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - run: | - tools ci get-pr-test-labels --repository ${{ github.repository }} - - name: Get Hash For Nox Tarball Cache id: nox-archive-hash run: | @@ -259,11 +252,6 @@ jobs: run: | echo '${{ steps.process-changed-files.outputs.changed-files }}' | jq -C '.' - - name: Define Runner Types - id: runner-types - run: | - tools ci runner-types ${{ github.event_name }} - - name: Define Jobs To Run id: define-jobs run: | @@ -290,6 +278,13 @@ jobs: run: | tools ci define-testrun ${{ github.event_name }} changed-files.json + - name: Define workflow config + id: workflow-config + run: | + tools ci workflow-config<{ prepare_workflow_skip_test_suite }><{ + prepare_workflow_skip_pkg_test_suite }><{ prepare_workflow_skip_pkg_download_test_suite + }> ${{ steps.setup-salt-version.outputs.salt-version }} ${{ github.event_name }} changed-files.json + - name: Check Contents of generated testrun-changed-files.txt if: ${{ fromJSON(steps.define-testrun.outputs.testrun)['type'] != 'full' }} run: | @@ -338,7 +333,7 @@ jobs: # on a pull request instead of requiring all name: Set the ${{ github.workflow }} Pipeline Exit Status if: always() - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 <%- if workflow_slug == "nightly" %> environment: <{ workflow_slug }> <%- endif %> @@ -358,6 +353,10 @@ jobs: <%- for need in test_repo_needs.iter(consume=True) %> - <{ need }> <%- endfor %> + <%- if workflow_slug != "release" %> + - test-packages + - test + <%- endif %> steps: - name: Get workflow information id: get-workflow-info diff --git a/.github/workflows/templates/nightly.yml.jinja b/.github/workflows/templates/nightly.yml.jinja index 1dcc2212efe..3bf88c07a95 100644 --- a/.github/workflows/templates/nightly.yml.jinja +++ b/.github/workflows/templates/nightly.yml.jinja @@ -56,67 +56,5 @@ concurrency: <%- block jobs %> <{- super() }> - <%- if includes.get("build-repos", True) %> - <%- include "build-repos.yml.jinja" %> - <%- endif %> - - publish-repositories: - <%- do conclusion_needs.append('publish-repositories') %> - name: Publish Repositories - if: ${{ always() && ! failure() && ! cancelled() }} - runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> - environment: <{ gh_environment }> - needs: - - prepare-workflow - - build-docs - <%- for need in build_repo_needs.iter(consume=True) %> - - <{ need }> - <%- endfor %> - <%- if workflow_slug == "nightly" %> - <%- for need in test_salt_needs.iter(consume=True) %> - - <{ need }> - <%- endfor %> - <%- endif %> - - steps: - - - uses: actions/checkout@v4 - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }} - - - name: Download Repository Artifact - uses: actions/download-artifact@v4 - with: - pattern: salt-${{ needs.prepare-workflow.outputs.salt-version }}-<{ gh_environment }>-repo-* - merge-multiple: true - path: repo/ - - - name: Decompress Repository Artifacts - run: | - find repo/ -type f -name '*.tar.gz' -print -exec tar xvf {} \; - find repo/ -type f -name '*.tar.gz' -print -exec rm -f {} \; - - - name: Show Repository - run: | - tree -a artifacts/pkgs/repo/ - - - name: Upload Repository Contents (<{ gh_environment }>) - env: - SALT_REPO_DOMAIN_RELEASE: ${{ vars.SALT_REPO_DOMAIN_RELEASE || 'repo.saltproject.io' }} - SALT_REPO_DOMAIN_STAGING: ${{ vars.SALT_REPO_DOMAIN_STAGING || 'staging.repo.saltproject.io' }} - run: | - tools pkg repo publish <{ gh_environment }> --salt-version=${{ needs.prepare-workflow.outputs.salt-version }} artifacts/pkgs/repo/ <%- endblock jobs %> diff --git a/.github/workflows/templates/release.yml.jinja b/.github/workflows/templates/release.yml.jinja index cb6d251b966..b1b5e574afe 100644 --- a/.github/workflows/templates/release.yml.jinja +++ b/.github/workflows/templates/release.yml.jinja @@ -52,7 +52,7 @@ permissions: <{ job_name }>: <%- do prepare_workflow_needs.append(job_name) %> name: Check Requirements - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 environment: <{ gh_environment }>-check steps: - name: Check For Admin Permission @@ -71,11 +71,9 @@ permissions: prepare-workflow: name: Prepare Workflow Run runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> + - linux-x86_64 env: - USE_S3_CACHE: 'true' + USE_S3_CACHE: 'false' environment: <{ gh_environment }> <%- if prepare_workflow_needs %> needs: @@ -89,6 +87,7 @@ permissions: latest-release: ${{ steps.get-salt-releases.outputs.latest-release }} releases: ${{ steps.get-salt-releases.outputs.releases }} nox-archive-hash: ${{ steps.nox-archive-hash.outputs.nox-archive-hash }} + config: ${{ steps.workflow-config.outputs.config }} steps: - uses: actions/checkout@v4 with: @@ -147,6 +146,14 @@ permissions: run: | echo "nox-archive-hash=<{ nox_archive_hashfiles }>" | tee -a "$GITHUB_OUTPUT" + - name: Define workflow config + id: workflow-config + run: | + tools ci workflow-config<{ prepare_workflow_skip_test_suite }><{ + prepare_workflow_skip_pkg_test_suite }><{ prepare_workflow_skip_pkg_download_test_suite + }> ${{ steps.setup-salt-version.outputs.salt-version }} ${{ github.event_name }} changed-files.json + + <%- endblock prepare_workflow_job %> <%- endif %> @@ -156,9 +163,7 @@ permissions: download-onedir-artifact: name: Download Staging Onedir Artifact runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> + - linux-x86_64 env: USE_S3_CACHE: 'true' environment: <{ gh_environment }> @@ -211,9 +216,7 @@ permissions: backup: name: Backup runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> + - linux-x86_64 needs: - prepare-workflow env: @@ -245,9 +248,7 @@ permissions: <%- do conclusion_needs.append('publish-repositories') %> name: Publish Repositories runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> + - linux-x86_64 env: USE_S3_CACHE: 'true' needs: @@ -277,18 +278,12 @@ permissions: run: | tools pkg repo publish <{ gh_environment }> ${{ needs.prepare-workflow.outputs.salt-version }} - <%- if includes.get("test-pkg-downloads", True) %> - <%- include "test-salt-pkg-repo-downloads.yml.jinja" %> - <%- endif %> - release: <%- do conclusion_needs.append('release') %> name: Release v${{ needs.prepare-workflow.outputs.salt-version }} if: ${{ always() && ! failure() && ! cancelled() }} runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> + - linux-x86_64 env: USE_S3_CACHE: 'true' needs: @@ -402,9 +397,7 @@ permissions: name: Restore Release Bucket From Backup if: ${{ always() && needs.backup.outputs.backup-complete == 'true' && (failure() || cancelled()) }} runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> + - linux-x86_64 env: USE_S3_CACHE: 'true' needs: @@ -445,9 +438,7 @@ permissions: - restore #} environment: <{ gh_environment }> runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> + - linux-x86_64 env: USE_S3_CACHE: 'true' steps: diff --git a/.github/workflows/templates/staging.yml.jinja b/.github/workflows/templates/staging.yml.jinja index a15302bc00a..c823da809da 100644 --- a/.github/workflows/templates/staging.yml.jinja +++ b/.github/workflows/templates/staging.yml.jinja @@ -51,9 +51,9 @@ on: <%- block concurrency %> -concurrency: - group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.repository }} - cancel-in-progress: false +#concurrency: +# group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.repository }} +# cancel-in-progress: false <%- endblock concurrency %> @@ -65,7 +65,7 @@ concurrency: <{ job_name }>: <%- do prepare_workflow_needs.append(job_name) %> name: Check Requirements - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 environment: <{ gh_environment }>-check steps: - name: Check For Admin Permission @@ -86,21 +86,12 @@ concurrency: needs: - prepare-workflow - build-docs - - build-src-repo environment: <{ gh_environment }> runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> + - ubuntu-22.04 steps: - uses: actions/checkout@v4 - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: @@ -112,12 +103,6 @@ concurrency: name: salt-${{ needs.prepare-workflow.outputs.salt-version }}.patch path: artifacts/release - - name: Download Source Repository - uses: actions/download-artifact@v4 - with: - name: salt-${{ needs.prepare-workflow.outputs.salt-version }}-<{ gh_environment }>-src-repo - path: artifacts/release - - name: Download Release Documentation (HTML) uses: actions/download-artifact@v4 with: @@ -128,34 +113,6 @@ concurrency: run: | tree -a artifacts/release - {#- - - - name: Download Release Documentation (PDF) - uses: actions/download-artifact@v4 - with: - name: Salt-${{ needs.prepare-workflow.outputs.salt-version }}.pdf - path: artifacts/release - - #} - - - name: Upload Release Artifacts - run: | - tools release upload-artifacts ${{ needs.prepare-workflow.outputs.salt-version }} artifacts/release - - - name: Upload PyPi Artifacts - uses: actions/upload-artifact@v4 - with: - name: pypi-artifacts - path: | - artifacts/release/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz - artifacts/release/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz.asc - retention-days: 7 - if-no-files-found: error - - <%- if includes.get("test-pkg-downloads", True) %> - <%- include "test-salt-pkg-repo-downloads.yml.jinja" %> - <%- endif %> - publish-pypi: <%- do conclusion_needs.append('publish-pypi') %> name: Publish to PyPi(test) @@ -174,9 +131,7 @@ concurrency: <%- endfor %> environment: <{ gh_environment }> runs-on: - - self-hosted - - linux - - repo-<{ gh_environment }> + - ubuntu-22.04 steps: - uses: actions/checkout@v4 @@ -221,4 +176,29 @@ concurrency: run: | tools pkg pypi-upload --test artifacts/release/salt-${{ needs.prepare-workflow.outputs.salt-version }}.tar.gz + draft-release: + name: Draft Github Release + if: | + always() && (needs.test.result == 'success' || needs.test.result == 'skipped') && + (needs.test-packages.result == 'success' || needs.test-packages.result == 'skipped') && + needs.prepare-workflow.result == 'success' && needs.build-salt-onedir.result == 'success' && + needs.build-pkgs-onedir.result == 'success' && needs.pre-commit.result == 'success' + needs: + - prepare-workflow + - pre-commit + - build-salt-onedir + - build-pkgs-onedir + - test-packages + - test + permissions: + contents: write + pull-requests: read + id-token: write + uses: ./.github/workflows/draft-release.yml + with: + salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['artifact-matrix']) }} + build-matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }} + + <%- endblock jobs %> diff --git a/.github/workflows/templates/test-salt-pkg-repo-downloads.yml.jinja b/.github/workflows/templates/test-salt-pkg-repo-downloads.yml.jinja index d547bd504db..82c8593c59c 100644 --- a/.github/workflows/templates/test-salt-pkg-repo-downloads.yml.jinja +++ b/.github/workflows/templates/test-salt-pkg-repo-downloads.yml.jinja @@ -6,13 +6,12 @@ <%- do conclusion_needs.append(job_name) %> name: Package Downloads <%- if gh_environment == "staging" %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg-download'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg-download'] }} <%- else %> if: ${{ inputs.skip-salt-pkg-download-test-suite == false }} <%- endif %> needs: - prepare-workflow - - publish-repositories - build-ci-deps <%- if gh_environment == "release" %> - download-onedir-artifact diff --git a/.github/workflows/templates/test-salt-pkg.yml.jinja b/.github/workflows/templates/test-salt-pkg.yml.jinja index 5feb9bf3dbe..a8c327e92f0 100644 --- a/.github/workflows/templates/test-salt-pkg.yml.jinja +++ b/.github/workflows/templates/test-salt-pkg.yml.jinja @@ -1,99 +1,19 @@ - <%- for os in test_salt_pkg_listing["linux"] %> - <%- set job_name = "{}-pkg-tests{}".format(os.slug.replace(".", ""), os.fips and '-fips' or '') %> - + <%- set job_name = "test-packages" %> <{ job_name }>: - <%- do test_salt_pkg_needs.append(job_name) %> - name: <{ os.display_name }> Package Test<%- if os.fips %> (fips)<%- endif %> - <%- if workflow_slug != "ci" or os.slug in mandatory_os_slugs %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - <%- else %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), '<{ os.slug }>') }} - <%- endif %> + name: Test Package + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test-pkg'] }} needs: - prepare-workflow - build-pkgs-onedir - build-ci-deps - uses: ./.github/workflows/test-packages-action-linux.yml + uses: ./.github/workflows/test-packages-action.yml with: - distro-slug: <{ os.slug }> nox-session: ci-test-onedir - platform: linux - arch: <{ os.arch }> salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: <{ os.pkg_type }> nox-version: <{ nox_version }> python-version: "<{ gh_actions_workflows_python_version }>" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> skip-code-coverage: <{ skip_test_coverage_check }> testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - <%- if os.fips %> - fips: true - <%- endif %> - - <%- endfor %> - - - - <%- for os in test_salt_pkg_listing["macos"] %> - <%- set job_name = "{}-pkg-tests".format(os.slug.replace(".", "")) %> - - <{ job_name }>: - <%- do test_salt_pkg_needs.append(job_name) %> - name: <{ os.display_name }> Package Test - <%- if workflow_slug != "ci" or os.slug in mandatory_os_slugs %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - <%- else %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), '<{ os.slug }>') }} - <%- endif %> - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-macos.yml - with: - distro-slug: <{ os.slug }> - runner: <{ os.runner }> - nox-session: ci-test-onedir - platform: macos - arch: <{ os.arch }> - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: macos - nox-version: <{ nox_version }> - python-version: "<{ gh_actions_workflows_python_version }>" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> - skip-code-coverage: <{ skip_test_coverage_check }> - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - <%- endfor %> - - - <%- for os in test_salt_pkg_listing["windows"] %> - <%- set job_name = "{}-{}-pkg-tests".format(os.slug.replace(".", ""), os.pkg_type.lower()) %> - - <{ job_name }>: - <%- do test_salt_pkg_needs.append(job_name) %> - name: <{ os.display_name }> <{ os.pkg_type }> Package Test - <%- if workflow_slug != "ci" or os.slug in mandatory_os_slugs %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - <%- else %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), '<{ os.slug }>') }} - <%- endif %> - needs: - - prepare-workflow - - build-pkgs-onedir - - build-ci-deps - uses: ./.github/workflows/test-packages-action-windows.yml - with: - distro-slug: <{ os.slug }> - nox-session: ci-test-onedir - platform: windows - arch: <{ os.arch }> - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: <{ os.pkg_type }> - nox-version: <{ nox_version }> - python-version: "<{ gh_actions_workflows_python_version }>" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> - skip-code-coverage: <{ skip_test_coverage_check }> - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - <%- endfor %> + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['pkg-test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index 86dfd8c1b50..d5e63be8370 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -1,103 +1,24 @@ -{#- - Full test runs. Each chunk should never take more than 2 hours. We allow 3, and on windows we add 30 more minutes. - Partial test runs(no chunk parallelization), 6 Hours -#} -<%- set full_testrun_timeout_value = 180 %> -<%- set partial_testrun_timeout_value = 360 %> -<%- set windows_full_testrun_timeout_value = full_testrun_timeout_value + 30 %> - - <%- for os in test_salt_listing["windows"] %> - - <{ os.slug.replace(".", "") }>: - <%- do test_salt_needs.append(os.slug.replace(".", "")) %> - name: <{ os.display_name }> Test - <%- if workflow_slug != "ci" or os.slug in mandatory_os_slugs %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - <%- else %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), '<{ os.slug }>') }} - <%- endif %> +<%- if workflow_slug in ("nightly", "scheduled") %> + <%- set timeout_value = 360 %> +<%- else %> + <%- set timeout_value = 180 %> +<%- endif %> + test: + name: Test Salt + if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test'] }} needs: - prepare-workflow - build-ci-deps - uses: ./.github/workflows/test-action-windows.yml + uses: ./.github/workflows/test-action.yml with: - distro-slug: <{ os.slug }> nox-session: ci-test-onedir - platform: windows - arch: amd64 nox-version: <{ nox_version }> - gh-actions-python-version: "<{ gh_actions_workflows_python_version }>" + python-version: "<{ gh_actions_workflows_python_version }>" testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> skip-code-coverage: <{ skip_test_coverage_check }> workflow-slug: <{ workflow_slug }> - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && <{ windows_full_testrun_timeout_value }> || <{ partial_testrun_timeout_value }> }} - - <%- endfor %> - - - <%- for os in test_salt_listing["macos"] %> - - <{ os.slug.replace(".", "") }>: - <%- do test_salt_needs.append(os.slug.replace(".", "")) %> - name: <{ os.display_name }> Test - <%- if workflow_slug != "ci" or os.slug in mandatory_os_slugs %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} - <%- else %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), '<{ os.slug }>') }} - <%- endif %> - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-macos.yml - with: - distro-slug: <{ os.slug }> - runner: <{ os.runner }> - nox-session: ci-test-onedir - platform: macos - arch: <{ os.arch }> - nox-version: <{ nox_version }> - gh-actions-python-version: "<{ gh_actions_workflows_python_version }>" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> - skip-code-coverage: <{ skip_test_coverage_check }> - workflow-slug: <{ workflow_slug }> - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && <{ full_testrun_timeout_value }> || <{ partial_testrun_timeout_value }> }} - - <%- endfor %> - - <%- for os in test_salt_listing["linux"] %> - <%- set job_name = "{}{}".format(os.slug.replace(".", ""), os.fips and '-fips' or '') %> - - <{ job_name }>: - <%- do test_salt_needs.append(job_name) %> - name: <{ os.display_name }> Test<%- if os.fips %> (fips)<%- endif %> - <%- if workflow_slug != "ci" or os.slug in mandatory_os_slugs %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} - <%- else %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), '<{ os.slug }>') }} - <%- endif %> - needs: - - prepare-workflow - - build-ci-deps - uses: ./.github/workflows/test-action-linux.yml - with: - distro-slug: <{ os.slug }> - nox-session: ci-test-onedir - platform: linux - arch: <{ os.arch }> - nox-version: <{ nox_version }> - gh-actions-python-version: "<{ gh_actions_workflows_python_version }>" - testrun: ${{ needs.prepare-workflow.outputs.testrun }} - salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }> - skip-code-coverage: <{ skip_test_coverage_check }> - workflow-slug: <{ workflow_slug }> - timeout-minutes: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['type'] == 'full' && <{ full_testrun_timeout_value }> || <{ partial_testrun_timeout_value }> }} - <%- if os.fips %> - fips: true - <%- endif %> - - <%- endfor %> + default-timeout: <{ timeout_value }> + matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }} + linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }} diff --git a/.github/workflows/templates/trigger-branch-workflows.yml.jinja b/.github/workflows/templates/trigger-branch-workflows.yml.jinja index de23643bd23..11cb57f6828 100644 --- a/.github/workflows/templates/trigger-branch-workflows.yml.jinja +++ b/.github/workflows/templates/trigger-branch-workflows.yml.jinja @@ -6,7 +6,7 @@ <%- do conclusion_needs.append(job_name) %> name: Trigger Branch Workflows if: ${{ github.event_name == 'schedule' && fromJSON(needs.workflow-requirements.outputs.requirements-met) }} - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 needs: - workflow-requirements diff --git a/.github/workflows/templates/workflow-requirements-check.yml.jinja b/.github/workflows/templates/workflow-requirements-check.yml.jinja index 67e04eef3e7..9458fe0423a 100644 --- a/.github/workflows/templates/workflow-requirements-check.yml.jinja +++ b/.github/workflows/templates/workflow-requirements-check.yml.jinja @@ -4,7 +4,7 @@ <{ job_name }>: <%- do prepare_workflow_needs.append(job_name) %> name: Check Workflow Requirements - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 outputs: requirements-met: ${{ steps.check-requirements.outputs.requirements-met }} steps: diff --git a/.github/workflows/test-action-linux.yml b/.github/workflows/test-action-linux.yml deleted file mode 100644 index 8ad08680c2e..00000000000 --- a/.github/workflows/test-action-linux.yml +++ /dev/null @@ -1,414 +0,0 @@ ---- -name: Test Artifact - -on: - workflow_call: - inputs: - distro-slug: - required: true - type: string - description: The OS slug to run tests against - nox-session: - required: true - type: string - description: The nox session to run - testrun: - required: true - type: string - description: JSON string containing information about what and how to run the test suite - salt-version: - type: string - required: true - description: The Salt version to set prior to running tests. - cache-prefix: - required: true - type: string - description: Seed used to invalidate caches - platform: - required: true - type: string - description: The platform being tested - arch: - required: true - type: string - description: The platform arch being tested - nox-version: - required: true - type: string - description: The nox version to install - timeout-minutes: - required: true - type: number - description: Timeout, in minutes, for the test job - gh-actions-python-version: - required: false - type: string - description: The python version to run tests with - default: "3.10" - fips: - required: false - type: boolean - default: false - description: Test run with FIPS enabled - package-name: - required: false - type: string - description: The onedir package name to use - default: salt - skip-code-coverage: - required: false - type: boolean - description: Skip code coverage - default: false - workflow-slug: - required: false - type: string - description: Which workflow is running. - default: ci - -env: - COLUMNS: 190 - AWS_MAX_ATTEMPTS: "10" - AWS_RETRY_MODE: "adaptive" - PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} - PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} - PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} - PIP_DISABLE_PIP_VERSION_CHECK: "1" - RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" - -jobs: - - generate-matrix: - name: Test Matrix - runs-on: ubuntu-latest - outputs: - matrix-include: ${{ steps.generate-matrix.outputs.matrix }} - build-reports: ${{ steps.generate-matrix.outputs.build-reports }} - steps: - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Checkout Source Code - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - env: - PIP_INDEX_URL: https://pypi.org/simple - - - name: Generate Test Matrix - id: generate-matrix - run: | - tools ci matrix --workflow=${{ inputs.workflow-slug }} ${{ fromJSON(inputs.testrun)['type'] == 'full' && '--full ' || '' }}${{ inputs.distro-slug }} - - test: - name: Test - runs-on: - - self-hosted - - linux - - bastion - timeout-minutes: ${{ inputs.timeout-minutes }} - needs: - - generate-matrix - strategy: - fail-fast: false - matrix: - include: ${{ fromJSON(needs.generate-matrix.outputs.matrix-include) }} - env: - SALT_TRANSPORT: ${{ matrix.transport }} - TEST_GROUP: ${{ matrix.test-group || 1 }} - - 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: Setup Salt Version - run: | - echo "${{ inputs.salt-version }}" > salt/_version.txt - - - name: Download Onedir Tarball as an Artifact - uses: actions/download-artifact@v4 - with: - name: ${{ inputs.package-name }}-${{ inputs.salt-version }}-onedir-${{ inputs.platform }}-${{ inputs.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-${{ inputs.platform }}-${{ inputs.arch }}.tar.xz - - - name: Download nox.linux.${{ inputs.arch }}.tar.* artifact for session ${{ inputs.nox-session }} - uses: actions/download-artifact@v4 - with: - name: nox-linux-${{ inputs.arch }}-${{ inputs.nox-session }} - - - name: PyPi Proxy - run: | - sed -i '7s;^;--index-url=${{ vars.PIP_INDEX_URL }} --trusted-host ${{ vars.PIP_TRUSTED_HOST }} --extra-index-url=${{ vars.PIP_EXTRA_INDEX_URL }}\n;' requirements/static/ci/*/*.txt - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - - - name: Download testrun-changed-files.txt - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} - uses: actions/download-artifact@v4 - with: - name: testrun-changed-files.txt - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Start VM - id: spin-up-vm - env: - TESTS_CHUNK: ${{ matrix.tests-chunk }} - run: | - tools --timestamps vm create --environment "${SPB_ENVIRONMENT}" --retries=2 ${{ inputs.distro-slug }} - - - name: List Free Space - run: | - tools --timestamps vm ssh ${{ inputs.distro-slug }} -- df -h || true - - - name: Upload Checkout To VM - run: | - tools --timestamps vm rsync ${{ inputs.distro-slug }} - - - name: Decompress .nox Directory - run: | - tools --timestamps vm decompress-dependencies ${{ inputs.distro-slug }} - - - name: Show System Info - run: | - tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \ - --nox-session=${{ inputs.nox-session }} ${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} - - - name: Run Changed Tests - id: run-fast-changed-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ inputs.fips && '--fips ' || '' }}${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} -- --core-tests --slow-tests --suppress-no-test-exit-code \ - --from-filenames=testrun-changed-files.txt - - - name: Run Fast Tests - id: run-fast-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['fast'] }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ (inputs.skip-code-coverage && matrix.tests-chunk != 'unit') && '--skip-code-coverage' || '' }} \ - ${{ inputs.fips && '--fips ' || '' }}${{ inputs.distro-slug }} ${{ matrix.tests-chunk }} - - - name: Run Slow Tests - id: run-slow-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['slow'] }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ inputs.fips && '--fips ' || '' }}${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} -- --no-fast-tests --slow-tests - - - name: Run Core Tests - id: run-core-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['core'] }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ inputs.fips && '--fips ' || '' }}${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} -- --no-fast-tests --core-tests - - - name: Run Flaky Tests - id: run-flaky-tests - if: ${{ fromJSON(inputs.testrun)['selected_tests']['flaky'] }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ inputs.fips && '--fips ' || '' }}${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} -- --no-fast-tests --flaky-jail - - - name: Run Full Tests - id: run-full-tests - if: ${{ fromJSON(inputs.testrun)['type'] == 'full' }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ (inputs.skip-code-coverage && matrix.tests-chunk != 'unit') && '--skip-code-coverage' || '' }} \ - -E TEST_GROUP ${{ inputs.fips && '--fips ' || '' }}${{ inputs.distro-slug }} ${{ matrix.tests-chunk }} -- --slow-tests --core-tests \ - --test-group-count=${{ matrix.test-group-count || 1 }} --test-group=${{ matrix.test-group || 1 }} - - - name: Combine Coverage Reports - if: always() && inputs.skip-code-coverage == false && steps.spin-up-vm.outcome == 'success' - run: | - tools --timestamps vm combine-coverage ${{ inputs.distro-slug }} - - - name: Download Test Run Artifacts - id: download-artifacts-from-vm - if: always() && steps.spin-up-vm.outcome == 'success' - run: | - tools --timestamps vm download-artifacts ${{ inputs.distro-slug }} - # 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 - if [ "${{ inputs.skip-code-coverage }}" != "true" ]; then - mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ inputs.distro-slug }}${{ inputs.fips && '.fips' || '' }}.${{ inputs.nox-session }}.${{ matrix.transport }}.${{ matrix.tests-chunk }}.grp${{ matrix.test-group || '1' }} - fi - - - name: Destroy VM - if: always() - run: | - tools --timestamps vm destroy --no-wait ${{ inputs.distro-slug }} || true - - - name: Upload Code Coverage Test Run Artifacts - if: always() && inputs.skip-code-coverage == false && steps.download-artifacts-from-vm.outcome == 'success' && job.status != 'cancelled' - uses: actions/upload-artifact@v4 - with: - name: testrun-coverage-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-grp${{ matrix.test-group || '1' }}-${{ env.TIMESTAMP }} - path: | - artifacts/coverage/ - include-hidden-files: true - - - name: Upload JUnit XML Test Run Artifacts - if: always() && steps.download-artifacts-from-vm.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: testrun-junit-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-grp${{ matrix.test-group || '1' }}-${{ env.TIMESTAMP }} - path: | - artifacts/xml-unittests-output/ - include-hidden-files: true - - - name: Upload Test Run Log Artifacts - if: always() && steps.download-artifacts-from-vm.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: testrun-log-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-grp${{ matrix.test-group || '1' }}-${{ env.TIMESTAMP }} - path: | - artifacts/logs - include-hidden-files: true - - report: - name: Test Reports - if: always() && fromJSON(needs.generate-matrix.outputs.build-reports) && needs.test.result != 'cancelled' && needs.test.result != 'skipped' - runs-on: ubuntu-latest - needs: - - test - - generate-matrix - env: - PIP_INDEX_URL: https://pypi.org/simple - - steps: - - name: Checkout Source Code - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Merge JUnit XML Test Run Artifacts - if: always() && needs.test.result != 'cancelled' && needs.test.result != 'skipped' - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: testrun-junit-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }} - pattern: testrun-junit-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }}-* - separate-directories: false - delete-merged: true - - - name: Merge Log Test Run Artifacts - if: always() && needs.test.result != 'cancelled' && needs.test.result != 'skipped' - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: testrun-log-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }} - pattern: testrun-log-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }}-* - separate-directories: false - delete-merged: true - - - name: Merge Code Coverage Test Run Artifacts - if: ${{ inputs.skip-code-coverage == false }} - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: testrun-coverage-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }} - pattern: testrun-coverage-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }}-* - separate-directories: false - delete-merged: true - - - name: Download Code Coverage Test Run Artifacts - uses: actions/download-artifact@v4 - if: ${{ inputs.skip-code-coverage == false }} - id: download-coverage-artifacts - with: - path: artifacts/coverage/ - pattern: testrun-coverage-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }}* - merge-multiple: true - - - name: Show Downloaded Test Run Artifacts - if: ${{ inputs.skip-code-coverage == false }} - run: | - tree -a artifacts - - - name: Install Nox - run: | - python3 -m pip install 'nox==${{ inputs.nox-version }}' - - - name: Create XML Coverage Reports - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' && job.status != 'cancelled' - run: | - nox --force-color -e create-xml-coverage-reports - mv artifacts/coverage/salt.xml artifacts/coverage/salt..${{ inputs.distro-slug }}${{ inputs.fips && '..fips' || '' }}..${{ inputs.nox-session }}.xml - mv artifacts/coverage/tests.xml artifacts/coverage/tests..${{ inputs.distro-slug }}${{ inputs.fips && '..fips' || '' }}..${{ inputs.nox-session }}.xml - - - name: Report Salt Code Coverage - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - continue-on-error: true - run: | - nox --force-color -e report-coverage -- salt - - - name: Report Combined Code Coverage - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - continue-on-error: true - run: | - nox --force-color -e report-coverage - - - name: Rename Code Coverage DB - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - continue-on-error: true - run: | - mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ inputs.distro-slug }}${{ inputs.fips && '.fips' || '' }}.${{ inputs.nox-session }} - - - name: Upload Code Coverage DB - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: all-testrun-coverage-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.nox-session }} - path: artifacts/coverage - include-hidden-files: true diff --git a/.github/workflows/test-action-macos.yml b/.github/workflows/test-action-macos.yml deleted file mode 100644 index e57bcf856c5..00000000000 --- a/.github/workflows/test-action-macos.yml +++ /dev/null @@ -1,449 +0,0 @@ ---- -name: Test Artifact(macOS) - -on: - workflow_call: - inputs: - distro-slug: - required: true - type: string - description: The OS slug to run tests against - runner: - required: true - type: string - description: The GitHub runner name - nox-session: - required: true - type: string - description: The nox session to run - testrun: - required: true - type: string - description: JSON string containing information about what and how to run the test suite - gh-actions-python-version: - required: false - type: string - description: The python version to run tests with - default: "3.11" - salt-version: - type: string - required: true - description: The Salt version to set prior to running tests. - cache-prefix: - required: true - type: string - description: Seed used to invalidate caches - platform: - required: true - type: string - description: The platform being tested - arch: - required: true - type: string - description: The platform arch being tested - nox-version: - required: true - type: string - description: The nox version to install - timeout-minutes: - required: true - type: number - description: Timeout, in minutes, for the test job - package-name: - required: false - type: string - description: The onedir package name to use - default: salt - skip-code-coverage: - required: false - type: boolean - description: Skip code coverage - default: false - workflow-slug: - required: false - type: string - description: Which workflow is running. - default: ci - -env: - COLUMNS: 190 - PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} - PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} - PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} - PIP_DISABLE_PIP_VERSION_CHECK: "1" - RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" - -jobs: - - generate-matrix: - name: Test Matrix - runs-on: ubuntu-latest - outputs: - matrix-include: ${{ steps.generate-matrix.outputs.matrix }} - build-reports: ${{ steps.generate-matrix.outputs.build-reports }} - steps: - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Checkout Source Code - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - env: - PIP_INDEX_URL: https://pypi.org/simple - - - name: Generate Test Matrix - id: generate-matrix - run: | - tools ci matrix --workflow=${{ inputs.workflow-slug }} ${{ inputs.distro-slug }} - - test: - name: Test - runs-on: ${{ inputs.runner }} - timeout-minutes: ${{ inputs.timeout-minutes }} - needs: - - generate-matrix - strategy: - fail-fast: false - matrix: - include: ${{ fromJSON(needs.generate-matrix.outputs.matrix-include) }} - env: - SALT_TRANSPORT: ${{ matrix.transport }} - - 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: Setup Salt Version - run: | - echo "${{ inputs.salt-version }}" > salt/_version.txt - - - name: Download Onedir Tarball as an Artifact - uses: actions/download-artifact@v4 - with: - name: ${{ inputs.package-name }}-${{ inputs.salt-version }}-onedir-${{ inputs.platform }}-${{ inputs.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-${{ inputs.platform }}-${{ inputs.arch }}.tar.xz - - - name: Install System Dependencies - run: | - brew install tree - - - name: Download nox.macos.${{ inputs.arch }}.tar.* artifact for session ${{ inputs.nox-session }} - uses: actions/download-artifact@v4 - with: - name: nox-macos-${{ inputs.arch }}-${{ inputs.nox-session }} - - - name: Set up Python ${{ inputs.gh-actions-python-version }} - uses: actions/setup-python@v5 - with: - python-version: "${{ inputs.gh-actions-python-version }}" - - - name: Install Nox - run: | - python3 -m pip install 'nox==${{ inputs.nox-version }}' - env: - PIP_INDEX_URL: https://pypi.org/simple - - - name: Decompress .nox Directory - run: | - nox --force-color -e decompress-dependencies -- macos ${{ inputs.arch }} - - - name: Download testrun-changed-files.txt - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} - uses: actions/download-artifact@v4 - with: - name: testrun-changed-files.txt - - - name: Show System Info - env: - SKIP_REQUIREMENTS_INSTALL: "1" - PRINT_SYSTEM_INFO_ONLY: "1" - run: | - sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} - - - name: Run Changed Tests - id: run-fast-changed-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} - 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" - SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" - COVERAGE_CONTEXT: ${{ inputs.distro-slug }} - run: | - sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ - -k "mac or darwin" --core-tests --slow-tests --suppress-no-test-exit-code \ - --from-filenames=testrun-changed-files.txt - - - name: Run Fast Tests - id: run-fast-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['fast'] }} - 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" - SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" - COVERAGE_CONTEXT: ${{ inputs.distro-slug }} - run: | - sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ - -k "mac or darwin" --suppress-no-test-exit-code - - - name: Run Slow Tests - id: run-slow-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['slow'] }} - 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" - SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" - COVERAGE_CONTEXT: ${{ inputs.distro-slug }} - run: | - sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ - -k "mac or darwin" --suppress-no-test-exit-code --no-fast-tests --slow-tests - - - name: Run Core Tests - id: run-core-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['core'] }} - 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" - SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" - COVERAGE_CONTEXT: ${{ inputs.distro-slug }} - run: | - sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ - -k "mac or darwin" --suppress-no-test-exit-code --no-fast-tests --core-tests - - - name: Run Flaky Tests - id: run-flaky-tests - if: ${{ fromJSON(inputs.testrun)['selected_tests']['flaky'] }} - 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" - SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" - COVERAGE_CONTEXT: ${{ inputs.distro-slug }} - run: | - sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ - -k "mac or darwin" --suppress-no-test-exit-code --no-fast-tests --flaky-jail - - - name: Run Full Tests - id: run-full-tests - if: ${{ fromJSON(inputs.testrun)['type'] == 'full' }} - 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" - SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" - COVERAGE_CONTEXT: ${{ inputs.distro-slug }} - run: | - sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ - --slow-tests --core-tests -k "mac or darwin" - - - name: Fix file ownership - run: | - sudo chown -R "$(id -un)" . - - - name: Combine Coverage Reports - if: always() && inputs.skip-code-coverage == false - run: | - nox --force-color -e combine-coverage - - - 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 - if [ "${{ inputs.skip-code-coverage }}" != "true" ]; then - mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ inputs.distro-slug }}.${{ inputs.nox-session }}.${{ matrix.transport }}.${{ matrix.tests-chunk }} - fi - - - name: Upload Code Coverage Test Run Artifacts - if: always() && inputs.skip-code-coverage == false && steps.download-artifacts-from-vm.outcome == 'success' && job.status != 'cancelled' - uses: actions/upload-artifact@v4 - with: - name: testrun-coverage-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ env.TIMESTAMP }} - path: | - artifacts/coverage/ - include-hidden-files: true - - - name: Upload JUnit XML Test Run Artifacts - if: always() && steps.download-artifacts-from-vm.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: testrun-junit-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ env.TIMESTAMP }} - path: | - artifacts/xml-unittests-output/ - include-hidden-files: true - - - name: Upload Test Run Log Artifacts - if: always() && steps.download-artifacts-from-vm.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: testrun-log-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ env.TIMESTAMP }} - path: | - artifacts/logs - include-hidden-files: true - - report: - name: Test Reports - if: always() && fromJSON(needs.generate-matrix.outputs.build-reports) && needs.test.result != 'cancelled' && needs.test.result != 'skipped' - runs-on: ubuntu-latest - needs: - - test - - generate-matrix - env: - PIP_INDEX_URL: https://pypi.org/simple - - steps: - - name: Checkout Source Code - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Merge JUnit XML Test Run Artifacts - if: always() && needs.test.result != 'cancelled' && needs.test.result != 'skipped' - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: testrun-junit-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }} - pattern: testrun-junit-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-* - separate-directories: false - delete-merged: true - - - name: Merge Log Test Run Artifacts - if: always() && needs.test.result != 'cancelled' && needs.test.result != 'skipped' - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: testrun-log-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }} - pattern: testrun-log-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-* - separate-directories: false - delete-merged: true - - - name: Merge Code Coverage Test Run Artifacts - if: ${{ inputs.skip-code-coverage == false }} - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: testrun-coverage-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }} - pattern: testrun-coverage-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-* - separate-directories: false - delete-merged: true - - - name: Download Code Coverage Test Run Artifacts - uses: actions/download-artifact@v4 - if: ${{ inputs.skip-code-coverage == false }} - id: download-coverage-artifacts - with: - path: artifacts/coverage/ - pattern: testrun-coverage-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}* - merge-multiple: true - - - name: Show Downloaded Test Run Artifacts - if: ${{ inputs.skip-code-coverage == false }} - run: | - tree -a artifacts - - - name: Set up Python ${{ inputs.gh-actions-python-version }} - uses: actions/setup-python@v5 - with: - python-version: "${{ inputs.gh-actions-python-version }}" - - - name: Install Nox - run: | - python3 -m pip install 'nox==${{ inputs.nox-version }}' - - - name: Create XML Coverage Reports - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' && job.status != 'cancelled' - run: | - nox --force-color -e create-xml-coverage-reports - mv artifacts/coverage/salt.xml artifacts/coverage/salt..${{ inputs.distro-slug }}..${{ inputs.nox-session }}.xml - mv artifacts/coverage/tests.xml artifacts/coverage/tests..${{ inputs.distro-slug }}..${{ inputs.nox-session }}.xml - - - name: Report Salt Code Coverage - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - continue-on-error: true - run: | - nox --force-color -e report-coverage -- salt - - - name: Report Combined Code Coverage - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - continue-on-error: true - run: | - nox --force-color -e report-coverage - - - name: Rename Code Coverage DB - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - continue-on-error: true - run: | - mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ inputs.distro-slug }}.${{ inputs.nox-session }} - - - name: Upload Code Coverage DB - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: all-testrun-coverage-artifacts-${{ inputs.distro-slug }}.${{ inputs.nox-session }} - path: artifacts/coverage - include-hidden-files: true diff --git a/.github/workflows/test-action-windows.yml b/.github/workflows/test-action-windows.yml deleted file mode 100644 index 08d76714575..00000000000 --- a/.github/workflows/test-action-windows.yml +++ /dev/null @@ -1,415 +0,0 @@ ---- -name: Test Artifact - -on: - workflow_call: - inputs: - distro-slug: - required: true - type: string - description: The OS slug to run tests against - nox-session: - required: true - type: string - description: The nox session to run - testrun: - required: true - type: string - description: JSON string containing information about what and how to run the test suite - salt-version: - type: string - required: true - description: The Salt version to set prior to running tests. - cache-prefix: - required: true - type: string - description: Seed used to invalidate caches - platform: - required: true - type: string - description: The platform being tested - arch: - required: true - type: string - description: The platform arch being tested - nox-version: - required: true - type: string - description: The nox version to install - timeout-minutes: - required: true - type: number - description: Timeout, in minutes, for the test job - gh-actions-python-version: - required: false - type: string - description: The python version to run tests with - default: "3.10" - fips: - required: false - type: boolean - default: false - description: Test run with FIPS enabled - package-name: - required: false - type: string - description: The onedir package name to use - default: salt - skip-code-coverage: - required: false - type: boolean - description: Skip code coverage - default: false - workflow-slug: - required: false - type: string - description: Which workflow is running. - default: ci - -env: - COLUMNS: 190 - AWS_MAX_ATTEMPTS: "10" - AWS_RETRY_MODE: "adaptive" - PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} - PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} - PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} - PIP_DISABLE_PIP_VERSION_CHECK: "1" - RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" - -jobs: - - generate-matrix: - name: Test Matrix - runs-on: ubuntu-latest - outputs: - matrix-include: ${{ steps.generate-matrix.outputs.matrix }} - build-reports: ${{ steps.generate-matrix.outputs.build-reports }} - steps: - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Checkout Source Code - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - env: - PIP_INDEX_URL: https://pypi.org/simple - - - name: Generate Test Matrix - id: generate-matrix - run: | - tools ci matrix --workflow=${{ inputs.workflow-slug }} ${{ fromJSON(inputs.testrun)['type'] == 'full' && '--full ' || '' }}${{ inputs.fips && '--fips ' || '' }}${{ inputs.distro-slug }} - - test: - name: Test - runs-on: - - self-hosted - - linux - - bastion - timeout-minutes: ${{ inputs.timeout-minutes }} - needs: - - generate-matrix - strategy: - fail-fast: false - matrix: - include: ${{ fromJSON(needs.generate-matrix.outputs.matrix-include) }} - env: - SALT_TRANSPORT: ${{ matrix.transport }} - TEST_GROUP: ${{ matrix.test-group || 1 }} - - 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: Setup Salt Version - run: | - echo "${{ inputs.salt-version }}" > salt/_version.txt - - - name: Download Onedir Tarball as an Artifact - uses: actions/download-artifact@v4 - with: - name: ${{ inputs.package-name }}-${{ inputs.salt-version }}-onedir-${{ inputs.platform }}-${{ inputs.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-${{ inputs.platform }}-${{ inputs.arch }}.tar.xz - - - name: Download nox.windows.${{ inputs.arch }}.tar.* artifact for session ${{ inputs.nox-session }} - uses: actions/download-artifact@v4 - with: - name: nox-windows-${{ inputs.arch }}-${{ inputs.nox-session }} - - - name: PyPi Proxy - run: | - sed -i '7s;^;--index-url=${{ vars.PIP_INDEX_URL }} --trusted-host ${{ vars.PIP_TRUSTED_HOST }} --extra-index-url=${{ vars.PIP_EXTRA_INDEX_URL }}\n;' requirements/static/ci/*/*.txt - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - - - name: Download testrun-changed-files.txt - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} - uses: actions/download-artifact@v4 - with: - name: testrun-changed-files.txt - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Start VM - id: spin-up-vm - env: - TESTS_CHUNK: ${{ matrix.tests-chunk }} - run: | - tools --timestamps vm create --environment "${SPB_ENVIRONMENT}" --retries=2 ${{ inputs.distro-slug }} - - - name: List Free Space - run: | - tools --timestamps vm ssh ${{ inputs.distro-slug }} -- df -h || true - - - name: Upload Checkout To VM - run: | - tools --timestamps vm rsync ${{ inputs.distro-slug }} - - - name: Decompress .nox Directory - run: | - tools --timestamps vm decompress-dependencies ${{ inputs.distro-slug }} - - - name: Show System Info - run: | - tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \ - --nox-session=${{ inputs.nox-session }} ${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} - - - name: Run Changed Tests - id: run-fast-changed-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ matrix.fips && '--fips ' || '' }}${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} -- --core-tests --slow-tests --suppress-no-test-exit-code \ - --from-filenames=testrun-changed-files.txt - - - name: Run Fast Tests - id: run-fast-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['fast'] }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ (inputs.skip-code-coverage && matrix.tests-chunk != 'unit') && '--skip-code-coverage' || '' }} \ - ${{ matrix.fips && '--fips ' || '' }}${{ inputs.distro-slug }} ${{ matrix.tests-chunk }} - - - name: Run Slow Tests - id: run-slow-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['slow'] }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ matrix.fips && '--fips ' || '' }}${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} -- --no-fast-tests --slow-tests - - - name: Run Core Tests - id: run-core-tests - if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['core'] }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ matrix.fips && '--fips ' || '' }}${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} -- --no-fast-tests --core-tests - - - name: Run Flaky Tests - id: run-flaky-tests - if: ${{ fromJSON(inputs.testrun)['selected_tests']['flaky'] }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ matrix.fips && '--fips ' || '' }}${{ inputs.distro-slug }} \ - ${{ matrix.tests-chunk }} -- --no-fast-tests --flaky-jail - - - name: Run Full Tests - id: run-full-tests - if: ${{ fromJSON(inputs.testrun)['type'] == 'full' }} - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install \ - --nox-session=${{ inputs.nox-session }} --rerun-failures -E SALT_TRANSPORT ${{ (inputs.skip-code-coverage && matrix.tests-chunk != 'unit') && '--skip-code-coverage' || '' }} \ - -E TEST_GROUP ${{ matrix.fips && '--fips ' || '' }}${{ inputs.distro-slug }} ${{ matrix.tests-chunk }} -- --slow-tests --core-tests \ - --test-group-count=${{ matrix.test-group-count || 1 }} --test-group=${{ matrix.test-group || 1 }} - - - name: Combine Coverage Reports - if: always() && inputs.skip-code-coverage == false && steps.spin-up-vm.outcome == 'success' - run: | - tools --timestamps vm combine-coverage ${{ inputs.distro-slug }} - - - name: Download Test Run Artifacts - id: download-artifacts-from-vm - if: always() && steps.spin-up-vm.outcome == 'success' - run: | - tools --timestamps vm download-artifacts ${{ inputs.distro-slug }} - # 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 - if [ "${{ inputs.skip-code-coverage }}" != "true" ]; then - mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ inputs.distro-slug }}.${{ inputs.nox-session }}.${{ matrix.transport }}.${{ matrix.tests-chunk }}.grp${{ matrix.test-group || '1' }} - fi - - - name: Destroy VM - if: always() - run: | - tools --timestamps vm destroy --no-wait ${{ inputs.distro-slug }} || true - - - name: Upload Code Coverage Test Run Artifacts - if: always() && inputs.skip-code-coverage == false && steps.download-artifacts-from-vm.outcome == 'success' && job.status != 'cancelled' - uses: actions/upload-artifact@v4 - with: - name: testrun-coverage-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-grp${{ matrix.test-group || '1' }}-${{ env.TIMESTAMP }} - path: | - artifacts/coverage/ - include-hidden-files: true - - - name: Upload JUnit XML Test Run Artifacts - if: always() && steps.download-artifacts-from-vm.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: testrun-junit-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-grp${{ matrix.test-group || '1' }}-${{ env.TIMESTAMP }} - path: | - artifacts/xml-unittests-output/ - include-hidden-files: true - - - name: Upload Test Run Log Artifacts - if: always() && steps.download-artifacts-from-vm.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: testrun-log-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-grp${{ matrix.test-group || '1' }}-${{ env.TIMESTAMP }} - path: | - artifacts/logs - include-hidden-files: true - - - report: - name: Test Reports - if: always() && fromJSON(needs.generate-matrix.outputs.build-reports) && needs.test.result != 'cancelled' && needs.test.result != 'skipped' - runs-on: ubuntu-latest - needs: - - test - - generate-matrix - env: - PIP_INDEX_URL: https://pypi.org/simple - - steps: - - name: Checkout Source Code - uses: actions/checkout@v4 - - - uses: actions/setup-python@v5 - with: - python-version: '3.10' - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Merge JUnit XML Test Run Artifacts - if: always() && needs.test.result != 'cancelled' && needs.test.result != 'skipped' - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: testrun-junit-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }} - pattern: testrun-junit-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-* - separate-directories: false - delete-merged: true - - - name: Merge Log Test Run Artifacts - if: always() && needs.test.result != 'cancelled' && needs.test.result != 'skipped' - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: testrun-log-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }} - pattern: testrun-log-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-* - separate-directories: false - delete-merged: true - - - name: Merge Code Coverage Test Run Artifacts - if: ${{ inputs.skip-code-coverage == false }} - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: testrun-coverage-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }} - pattern: testrun-coverage-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}-* - separate-directories: false - delete-merged: true - - - name: Download Code Coverage Test Run Artifacts - uses: actions/download-artifact@v4 - if: ${{ inputs.skip-code-coverage == false }} - id: download-coverage-artifacts - with: - path: artifacts/coverage/ - pattern: testrun-coverage-artifacts-${{ inputs.distro-slug }}-${{ inputs.nox-session }}* - merge-multiple: true - - - name: Show Downloaded Test Run Artifacts - if: ${{ inputs.skip-code-coverage == false }} - run: | - tree -a artifacts - - - name: Install Nox - run: | - python3 -m pip install 'nox==${{ inputs.nox-version }}' - - - name: Create XML Coverage Reports - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' && job.status != 'cancelled' - run: | - nox --force-color -e create-xml-coverage-reports - mv artifacts/coverage/salt.xml artifacts/coverage/salt..${{ inputs.distro-slug }}..${{ inputs.nox-session }}.xml || true - mv artifacts/coverage/tests.xml artifacts/coverage/tests..${{ inputs.distro-slug }}..${{ inputs.nox-session }}.xml || true - - - name: Report Salt Code Coverage - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - continue-on-error: true - run: | - nox --force-color -e report-coverage -- salt - - - name: Report Combined Code Coverage - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - continue-on-error: true - run: | - nox --force-color -e report-coverage - - - name: Rename Code Coverage DB - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - continue-on-error: true - run: | - mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ inputs.distro-slug }}.${{ inputs.nox-session }} - - - name: Upload Code Coverage DB - if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: all-testrun-coverage-artifacts-${{ inputs.distro-slug }}.${{ inputs.nox-session }} - path: artifacts/coverage - include-hidden-files: true diff --git a/.github/workflows/test-action.yml b/.github/workflows/test-action.yml new file mode 100644 index 00000000000..14da1bc6dc1 --- /dev/null +++ b/.github/workflows/test-action.yml @@ -0,0 +1,1392 @@ +--- +name: Test Artifact + +on: + workflow_call: + inputs: + nox-session: + required: true + type: string + description: The nox session to run + testrun: + required: true + type: string + description: JSON string containing information about what and how to run the test suite + python-version: + required: false + type: string + description: The python version to run tests with + default: "3.10" + salt-version: + type: string + required: true + description: The Salt version to set prior to running tests. + cache-prefix: + required: true + type: string + description: Seed used to invalidate caches + nox-version: + required: true + type: string + description: The nox version to install + package-name: + required: false + type: string + description: The onedir package name to use + default: salt + skip-code-coverage: + required: false + type: boolean + description: Skip code coverage + default: false + workflow-slug: + required: false + type: string + description: Which workflow is running. + default: ci + default-timeout: + required: false + type: number + description: Timeout, in minutes, for the test job(Default 360, 6 hours). + default: 360 + matrix: + required: true + type: string + description: Json job matrix config + linux_arm_runner: + required: true + type: string + description: Json job matrix config + +env: + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + +jobs: + + test-linux: + name: ${{ matrix.display_name }} ${{ matrix.tests-chunk }} ${{ matrix.transport }}${{ matrix.fips && '(fips)' || '' }}${{ matrix.test-group && ' ' || '' }}${{ matrix.test-group && matrix.test-group || '' }} + runs-on: ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || inputs.linux_arm_runner }} + if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }} + # Full test runs. Each chunk should never take more than 2 hours. + # Partial test runs(no chunk parallelization), 6 Hours + timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 360 }} + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['linux-x86_64'] }} + 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: Free Disk Space Before Build + run: | + echo "Disk space before cleanup:" + df -h + sudo rm -rf /usr/local/.ghcup + sudo rm -rf /opt/hostedtoolcache/CodeQL + sudo rm -rf /usr/local/lib/android/sdk/ndk + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf /usr/local/share/boost + sudo apt-get clean + echo "Disk space after cleanup:" + df -h + + - name: Setup Salt Version + run: | + echo "${{ inputs.salt-version }}" > salt/_version.txt + + - 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: "Configure docker" + run: | + sudo sed -i '/LimitNOFILE=infinity/c\LimitNOFILE=1048576' /lib/systemd/system/containerd.service + sudo systemctl daemon-reload + sudo systemctl restart containerd + cat /lib/systemd/system/containerd.service + + - name: "Pull container ${{ matrix.container }}" + run: | + docker pull ${{ matrix.container }} + + - name: "Create docker network" + run: | + docker network create -o "com.docker.network.driver.mtu=1500" --ipv6 --subnet 2001:db8::/64 ip6net + + - name: "Host network config" + run: | + ip a + + - name: Free Memory Before Container + shell: bash + run: | + free -h + + - name: "Create container ${{ matrix.container }}" + run: | + /usr/bin/docker \ + create --name ${{ github.run_id }}_salt-test \ + --workdir /__w/salt/salt \ + --privileged \ + --ulimit="nofile=262144:262144" \ + -e "HOME=/github/home" \ + -e GITHUB_ACTIONS=true \ + -e CI=true \ + -e SKIP_REQUIREMENTS_INSTALL=1 \ + -e PRINT_TEST_SELECTION=0 \ + -e PRINT_TEST_PLAN_ONLY=0 \ + -e PRINT_SYSTEM_INFO=0 \ + -e RERUN_FAILURES=1 \ + -e GITHUB_ACTIONS_PIPELINE=1 \ + -e SKIP_INITIAL_ONEDIR_FAILURES=1 \ + -e SKIP_INITIAL_GH_ACTIONS_FAILURES=1 \ + -e SKIP_CODE_COVERAGE=${{ inputs.skip-code-coverage && '1' || '0' }} \ + -e CONVERAGE_CONTEXT=${{ matrix.slug }} \ + -e COLUMNS=190 \ + -e PIP_INDEX_URL=${{ vars.PIP_INDEX_URL }} \ + -e PIP_TRUSTED_HOST=${{ vars.PIP_TRUSTED_HOST }} \ + -e PIP_EXTRA_INDEX_URL=${{ vars.PIP_EXTRA_INDEX_URL }} \ + -e PIP_DISABLE_PIP_VERSION_CHECK="1" \ + -e RAISE_DEPRECATIONS_RUNTIME_ERRORS="1" \ + -e SALT_TRANSPORT=${{ matrix.transport }} \ + -e LANG="en_US.UTF-8" \ + -e SHELL=/bin/bash \ + -v "/home/runner/work":"/__w" \ + -v "/tmp/":"/var/lib/docker" \ + --entrypoint "/usr/lib/systemd/systemd" \ + ${{ matrix.container }} \ + --systemd --unit rescue.target + + - name: "Start container ${{ matrix.container }}" + run: | + /usr/bin/docker start ${{ github.run_id }}_salt-test + + - name: "Show container inspect ${{ matrix.container }}" + run: | + /usr/bin/docker inspect ${{ github.run_id }}_salt-test + + - name: Download nox.linux.${{ matrix.arch }}.tar.* artifact for session ${{ inputs.nox-session }} + uses: actions/download-artifact@v4 + with: + name: nox-linux-${{ matrix.arch }}-${{ inputs.nox-session }} + + - name: Install Nox + run: | + python3 -m pip install 'nox==${{ inputs.nox-version }}' + env: + PIP_INDEX_URL: https://pypi.org/simple + + - name: Decompress .nox Directory + run: | + docker exec ${{ github.run_id}}_salt-test python3 -m nox --force-color -e decompress-dependencies -- linux ${{ matrix.arch }} + + - name: Download testrun-changed-files.txt + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} + uses: actions/download-artifact@v4 + with: + name: testrun-changed-files.txt + + - name: Current Directory + run: | + pwd + + - name: Show System Info + run: | + docker exec -e SKIP_REQUIREMENTS_INSTALL=1 -e PRINT_SYSTEM_INFO_ONLY=1 ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} + + - name: Free Space on Host + shell: bash + run: | + df -h + + - name: Show container network info + shell: bash + run: | + docker exec ${{ github.run_id}}_salt-test ip addr + + - name: Show container processes + shell: bash + run: | + docker exec ${{ github.run_id}}_salt-test ps auxf + + - name: Free Space on Container + shell: bash + run: | + docker exec ${{ github.run_id}}_salt-test df -h + + - name: Free Memory + shell: bash + run: | + free -h + + - name: Configure apparmor + run: | + # Apparmor's unix-chkpwd profile gets in the way of tests needing to + # authenticate from inside a container. + cat <<'EOF' | sudo tee /etc/apparmor.d/unix-chkpwd + abi , + include + profile unix-chkpwd /{,usr/}{,s}bin/unix_chkpwd flags=(unconfined) { + include + include + # To write records to the kernel auditing log. + capability audit_write, + network netlink raw, + /{,usr/}{,s}bin/unix_chkpwd mr, + /etc/shadow r, + # systemd userdb, used in nspawn + /run/host/userdb/*.user r, + /run/host/userdb/*.user-privileged r, + # file_inherit + owner /dev/tty[0-9]* rw, + include if exists + } + EOF + sudo systemctl restart apparmor + sudo aa-status + + - name: Run Changed Tests + id: run-fast-changed-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} + run: | + docker exec ${{ github.run_id}}_salt-test python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --core-tests --slow-tests --suppress-no-test-exit-code --from-filenames=testrun-changed-files.txt + + - name: Run Fast Tests + id: run-fast-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['fast'] }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --suppress-no-test-exit-code + + - name: Run Slow Tests + id: run-slow-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['slow'] }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --suppress-no-test-exit-code --no-fast-tests --slow-tests + + - name: Run Core Tests + id: run-core-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['core'] }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --suppress-no-test-exit-code --no-fast-tests --core-tests + + - name: Run Flaky Tests + id: run-flaky-tests + if: ${{ fromJSON(inputs.testrun)['selected_tests']['flaky'] }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --suppress-no-test-exit-code --no-fast-tests --flaky-jail + + - name: Run Full Tests + id: run-full-tests + if: ${{ fromJSON(inputs.testrun)['type'] == 'full' }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --slow-tests --core-tests --test-group-count=${{ matrix.test-group-count || 1 }} --test-group=${{ matrix.test-group || 1 }} + + - name: Stop Container + run: | + docker container stop ${{ github.run_id}}_salt-test + + - name: Remove Container + run: | + docker container rm ${{ github.run_id}}_salt-test + + - name: Remove Container Image + run: | + docker image rm ${{ matrix.container }} + + - name: Fix file ownership + run: | + sudo chown -R "$(id -un)" . + + - name: Combine Coverage Reports + if: always() && inputs.skip-code-coverage == false + run: | + nox --force-color -e combine-coverage + + - 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 + sudo rm -rf artifacts/salt* + tree -a artifacts + if [ "${{ inputs.skip-code-coverage }}" != "true" ]; then + mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ matrix.slug }}.${{ inputs.nox-session }}.${{ matrix.transport }}.${{ matrix.tests-chunk }} + fi + + - name: Upload Code Coverage Test Run Artifacts + if: always() && inputs.skip-code-coverage == false && steps.download-artifacts-from-vm.outcome == 'success' && job.status != 'cancelled' + uses: actions/upload-artifact@v4 + with: + name: testrun-coverage-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ env.TIMESTAMP }} + path: | + artifacts/coverage/ + include-hidden-files: true + + - name: Upload JUnit XML Test Run Artifacts + if: always() && steps.download-artifacts-from-vm.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: testrun-junit-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}${{ matrix.fips && '(fips)' || '' }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/xml-unittests-output/ + include-hidden-files: true + + - name: Upload Test Run Log Artifacts + if: always() && steps.download-artifacts-from-vm.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: testrun-log-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}${{ matrix.fips && '(fips)' || '' }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/logs + include-hidden-files: true + + test-linux-arm64: + name: ${{ matrix.display_name }} ${{ matrix.tests-chunk }} ${{ matrix.transport }}${{ matrix.fips && '(fips)' || '' }}${{ matrix.test-group && ' ' || '' }}${{ matrix.test-group && matrix.test-group || '' }} + runs-on: ${{ matrix.arch == 'x86_64' && 'ubuntu-22.04' || inputs.linux_arm_runner }} + if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }} + # Full test runs. Each chunk should never take more than 2 hours. + # Partial test runs(no chunk parallelization), 6 Hours + timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 360 }} + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['linux-arm64'] }} + 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: Free Disk Space Before Build + run: | + echo "Disk space before cleanup:" + df -h + sudo rm -rf /usr/local/.ghcup + sudo rm -rf /opt/hostedtoolcache/CodeQL + sudo rm -rf /usr/local/lib/android/sdk/ndk + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf /usr/local/share/boost + sudo apt-get clean + echo "Disk space after cleanup:" + df -h + + - name: Setup Salt Version + run: | + echo "${{ inputs.salt-version }}" > salt/_version.txt + + - 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: "Configure docker" + run: | + sudo sed -i '/LimitNOFILE=infinity/c\LimitNOFILE=1048576' /lib/systemd/system/containerd.service + sudo systemctl daemon-reload + sudo systemctl restart containerd + cat /lib/systemd/system/containerd.service + + - name: "Pull container ${{ matrix.container }}" + run: | + docker pull ${{ matrix.container }} + + - name: "Create docker network" + run: | + docker network create -o "com.docker.network.driver.mtu=1500" --ipv6 --subnet 2001:db8::/64 ip6net + + - name: "Host network config" + run: | + ip a + + - name: Free Memory Before Container + shell: bash + run: | + free -h + + - name: "Create container ${{ matrix.container }}" + run: | + /usr/bin/docker \ + create --name ${{ github.run_id }}_salt-test \ + --workdir /__w/salt/salt \ + --privileged \ + --ulimit="nofile=262144:262144" \ + -e "HOME=/github/home" \ + -e GITHUB_ACTIONS=true \ + -e CI=true \ + -e SKIP_REQUIREMENTS_INSTALL=1 \ + -e PRINT_TEST_SELECTION=0 \ + -e PRINT_TEST_PLAN_ONLY=0 \ + -e PRINT_SYSTEM_INFO=0 \ + -e RERUN_FAILURES=1 \ + -e GITHUB_ACTIONS_PIPELINE=1 \ + -e SKIP_INITIAL_ONEDIR_FAILURES=1 \ + -e SKIP_INITIAL_GH_ACTIONS_FAILURES=1 \ + -e SKIP_CODE_COVERAGE=${{ inputs.skip-code-coverage && '1' || '0' }} \ + -e CONVERAGE_CONTEXT=${{ matrix.slug }} \ + -e COLUMNS=190 \ + -e PIP_INDEX_URL=${{ vars.PIP_INDEX_URL }} \ + -e PIP_TRUSTED_HOST=${{ vars.PIP_TRUSTED_HOST }} \ + -e PIP_EXTRA_INDEX_URL=${{ vars.PIP_EXTRA_INDEX_URL }} \ + -e PIP_DISABLE_PIP_VERSION_CHECK="1" \ + -e RAISE_DEPRECATIONS_RUNTIME_ERRORS="1" \ + -e SALT_TRANSPORT=${{ matrix.transport }} \ + -e LANG="en_US.UTF-8" \ + -e SHELL=/bin/bash \ + -v "/home/runner/work":"/__w" \ + -v "/tmp/":"/var/lib/docker" \ + --entrypoint "/usr/lib/systemd/systemd" \ + ${{ matrix.container }} \ + --systemd --unit rescue.target + + - name: "Start container ${{ matrix.container }}" + run: | + /usr/bin/docker start ${{ github.run_id }}_salt-test + + - name: "Show container inspect ${{ matrix.container }}" + run: | + /usr/bin/docker inspect ${{ github.run_id }}_salt-test + + - name: Download nox.linux.${{ matrix.arch }}.tar.* artifact for session ${{ inputs.nox-session }} + uses: actions/download-artifact@v4 + with: + name: nox-linux-${{ matrix.arch }}-${{ inputs.nox-session }} + + - name: Install Nox + run: | + python3 -m pip install 'nox==${{ inputs.nox-version }}' + env: + PIP_INDEX_URL: https://pypi.org/simple + + - name: Decompress .nox Directory + run: | + docker exec ${{ github.run_id}}_salt-test python3 -m nox --force-color -e decompress-dependencies -- linux ${{ matrix.arch }} + + - name: Download testrun-changed-files.txt + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} + uses: actions/download-artifact@v4 + with: + name: testrun-changed-files.txt + + - name: Current Directory + run: | + pwd + + - name: Show System Info + run: | + docker exec -e SKIP_REQUIREMENTS_INSTALL=1 -e PRINT_SYSTEM_INFO_ONLY=1 ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} + + - name: Free Space on Host + shell: bash + run: | + df -h + + - name: Show container network info + shell: bash + run: | + docker exec ${{ github.run_id}}_salt-test ip addr + + - name: Show container processes + shell: bash + run: | + docker exec ${{ github.run_id}}_salt-test ps auxf + + - name: Free Space on Container + shell: bash + run: | + docker exec ${{ github.run_id}}_salt-test df -h + + - name: Free Memory + shell: bash + run: | + free -h + + - name: Configure apparmor + run: | + # Apparmor's unix-chkpwd profile gets in the way of tests needing to + # authenticate from inside a container. + cat <<'EOF' | sudo tee /etc/apparmor.d/unix-chkpwd + abi , + include + profile unix-chkpwd /{,usr/}{,s}bin/unix_chkpwd flags=(unconfined) { + include + include + # To write records to the kernel auditing log. + capability audit_write, + network netlink raw, + /{,usr/}{,s}bin/unix_chkpwd mr, + /etc/shadow r, + # systemd userdb, used in nspawn + /run/host/userdb/*.user r, + /run/host/userdb/*.user-privileged r, + # file_inherit + owner /dev/tty[0-9]* rw, + include if exists + } + EOF + sudo systemctl restart apparmor + sudo aa-status + + - name: Run Changed Tests + id: run-fast-changed-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} + run: | + docker exec ${{ github.run_id}}_salt-test python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --core-tests --slow-tests --suppress-no-test-exit-code --from-filenames=testrun-changed-files.txt + + - name: Run Fast Tests + id: run-fast-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['fast'] }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --suppress-no-test-exit-code + + - name: Run Slow Tests + id: run-slow-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['slow'] }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --suppress-no-test-exit-code --no-fast-tests --slow-tests + + - name: Run Core Tests + id: run-core-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['core'] }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --suppress-no-test-exit-code --no-fast-tests --core-tests + + - name: Run Flaky Tests + id: run-flaky-tests + if: ${{ fromJSON(inputs.testrun)['selected_tests']['flaky'] }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --suppress-no-test-exit-code --no-fast-tests --flaky-jail + + - name: Run Full Tests + id: run-full-tests + if: ${{ fromJSON(inputs.testrun)['type'] == 'full' }} + run: | + docker exec ${{ github.run_id}}_salt-test \ + python3 -m nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --slow-tests --core-tests --test-group-count=${{ matrix.test-group-count || 1 }} --test-group=${{ matrix.test-group || 1 }} + + - name: Stop Container + run: | + docker container stop ${{ github.run_id}}_salt-test + + - name: Remove Container + run: | + docker container rm ${{ github.run_id}}_salt-test + + - name: Remove Container Image + run: | + docker image rm ${{ matrix.container }} + + - name: Fix file ownership + run: | + sudo chown -R "$(id -un)" . + + - name: Combine Coverage Reports + if: always() && inputs.skip-code-coverage == false + run: | + nox --force-color -e combine-coverage + + - 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 + sudo rm -rf artifacts/salt* + tree -a artifacts + if [ "${{ inputs.skip-code-coverage }}" != "true" ]; then + mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ matrix.slug }}.${{ inputs.nox-session }}.${{ matrix.transport }}.${{ matrix.tests-chunk }} + fi + + - name: Upload Code Coverage Test Run Artifacts + if: always() && inputs.skip-code-coverage == false && steps.download-artifacts-from-vm.outcome == 'success' && job.status != 'cancelled' + uses: actions/upload-artifact@v4 + with: + name: testrun-coverage-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ env.TIMESTAMP }} + path: | + artifacts/coverage/ + include-hidden-files: true + + - name: Upload JUnit XML Test Run Artifacts + if: always() && steps.download-artifacts-from-vm.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: testrun-junit-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}${{ matrix.fips && '(fips)' || '' }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/xml-unittests-output/ + include-hidden-files: true + + - name: Upload Test Run Log Artifacts + if: always() && steps.download-artifacts-from-vm.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: testrun-log-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}${{ matrix.fips && '(fips)' || '' }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/logs + include-hidden-files: true + + test-macos: + name: ${{ matrix.display_name }} ${{ matrix.tests-chunk }} ${{ matrix.transport }}${{ matrix.test-group && ' ' || '' }}${{ matrix.test-group && matrix.test-group || '' }} + runs-on: ${{ matrix.runner }} + # Full test runs. Each chunk should never take more than 2 hours. + # Partial test runs(no chunk parallelization), 6 Hours + if: ${{ toJSON(fromJSON(inputs.matrix)['macos']) != '[]' }} + timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 360 }} + 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: Setup Salt Version + run: | + echo "${{ inputs.salt-version }}" > salt/_version.txt + + - 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 System Dependencies + run: | + brew install tree + + - 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: 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: Decompress .nox Directory + run: | + nox --force-color -e decompress-dependencies -- macos ${{ matrix.arch }} + + - name: Download testrun-changed-files.txt + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} + uses: actions/download-artifact@v4 + with: + name: testrun-changed-files.txt + + - name: Show System Info + env: + SKIP_REQUIREMENTS_INSTALL: "1" + PRINT_SYSTEM_INFO_ONLY: "1" + run: | + sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} + + - name: Run Changed Tests + id: run-fast-changed-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + run: | + sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + -k "mac or darwin" --core-tests --slow-tests --suppress-no-test-exit-code \ + --from-filenames=testrun-changed-files.txt + + - name: Run Fast Tests + id: run-fast-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['fast'] }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + run: | + sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + -k "mac or darwin" --suppress-no-test-exit-code + + - name: Run Slow Tests + id: run-slow-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['slow'] }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + run: | + sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + -k "mac or darwin" --suppress-no-test-exit-code --no-fast-tests --slow-tests + + - name: Run Core Tests + id: run-core-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['core'] }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + run: | + sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + -k "mac or darwin" --suppress-no-test-exit-code --no-fast-tests --core-tests + + - name: Run Flaky Tests + id: run-flaky-tests + if: ${{ fromJSON(inputs.testrun)['selected_tests']['flaky'] }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + run: | + sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + -k "mac or darwin" --suppress-no-test-exit-code --no-fast-tests --flaky-jail + + - name: Run Full Tests + id: run-full-tests + if: ${{ fromJSON(inputs.testrun)['type'] == 'full' }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + run: | + sudo -E nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- \ + --slow-tests --core-tests -k "mac or darwin" --test-group-count=${{ matrix.test-group-count || 1 }} --test-group=${{ matrix.test-group || 1 }} + + + - name: Fix file ownership + run: | + sudo chown -R "$(id -un)" . + + - name: Combine Coverage Reports + if: always() && inputs.skip-code-coverage == false + run: | + nox --force-color -e combine-coverage + + - 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 + if [ "${{ inputs.skip-code-coverage }}" != "true" ]; then + mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ matrix.slug }}.${{ inputs.nox-session }}.${{ matrix.transport }}.${{ matrix.tests-chunk }} + fi + + - name: Upload Code Coverage Test Run Artifacts + if: always() && inputs.skip-code-coverage == false && steps.download-artifacts-from-vm.outcome == 'success' && job.status != 'cancelled' + uses: actions/upload-artifact@v4 + with: + name: testrun-coverage-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/coverage/ + include-hidden-files: true + + - name: Upload JUnit XML Test Run Artifacts + if: always() && steps.download-artifacts-from-vm.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: testrun-junit-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/xml-unittests-output/ + include-hidden-files: true + + - name: Upload Test Run Log Artifacts + if: always() && steps.download-artifacts-from-vm.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: testrun-log-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/logs + include-hidden-files: true + + test-windows: + name: ${{ matrix.display_name }} ${{ matrix.tests-chunk }} ${{ matrix.transport }}${{ matrix.test-group && ' ' || '' }}${{ matrix.test-group && matrix.test-group || '' }} + + if: ${{ toJSON(fromJSON(inputs.matrix)['windows']) != '[]' }} + runs-on: ${{ matrix.slug }} + # Full test runs. Each chunk should never take more than 2 hours. + # Partial test runs(no chunk parallelization), 6 Hours + timeout-minutes: ${{ fromJSON(inputs.testrun)['type'] == 'full' && inputs.default-timeout || 360 }} + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['windows'] }} + steps: + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - 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: Setup Salt Version + run: | + echo "${{ inputs.salt-version }}" > salt/_version.txt + + - 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 System Dependencies + run: | + echo true + + - 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.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: Download testrun-changed-files.txt + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} + uses: actions/download-artifact@v4 + with: + name: testrun-changed-files.txt + + - 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" + PRINT_SYSTEM_INFO_ONLY: "1" + run: | + nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} + + - name: Run Changed Tests + id: run-fast-changed-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + TMPDIR: ${{ runner.temp }} + shell: powershell + run: > + nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- + -k "win" --core-tests --slow-tests --suppress-no-test-exit-code + "--from-filenames=testrun-changed-files.txt" + + - name: Run Fast Tests + id: run-fast-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['fast'] }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + TMPDIR: ${{ runner.temp }} + shell: powershell + run: > + nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- + -k "win" --suppress-no-test-exit-code + + - name: Run Slow Tests + id: run-slow-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['slow'] }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + TMPDIR: ${{ runner.temp }} + shell: powershell + run: > + nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- + -k "win" --suppress-no-test-exit-code --no-fast-tests --slow-tests + + - name: Run Core Tests + id: run-core-tests + if: ${{ fromJSON(inputs.testrun)['type'] != 'full' && fromJSON(inputs.testrun)['selected_tests']['core'] }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + TMPDIR: ${{ runner.temp }} + shell: powershell + run: > + nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- + -k "win" --suppress-no-test-exit-code --no-fast-tests --core-tests + + - name: Run Flaky Tests + id: run-flaky-tests + if: ${{ fromJSON(inputs.testrun)['selected_tests']['flaky'] }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + TMPDIR: ${{ runner.temp }} + shell: powershell + run: > + nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- + -k "win" --suppress-no-test-exit-code --no-fast-tests --flaky-jail + + - name: Run Full Tests + id: run-full-tests + if: ${{ fromJSON(inputs.testrun)['type'] == 'full' }} + 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" + SKIP_CODE_COVERAGE: "${{ inputs.skip-code-coverage && '1' || '0' }}" + COVERAGE_CONTEXT: ${{ matrix.slug }} + COLUMNS: 190 + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + SALT_TRANSPORT: ${{ matrix.transport }} + TMPDIR: ${{ runner.temp }} + shell: powershell + run: > + nox --force-color -e ${{ inputs.nox-session }} -- ${{ matrix.tests-chunk }} -- + --slow-tests --core-tests -k "win" --test-group-count=${{ matrix.test-group-count || 1 }} --test-group=${{ matrix.test-group || 1 }} + + + - name: Combine Coverage Reports + if: always() && inputs.skip-code-coverage == false + run: | + nox --force-color -e combine-coverage + + - 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.slug }}.${{ inputs.nox-session }}.${{ matrix.transport }}.${{ matrix.tests-chunk }} + fi + + - name: Upload Code Coverage Test Run Artifacts + if: always() && inputs.skip-code-coverage == false && steps.download-artifacts-from-vm.outcome == 'success' && job.status != 'cancelled' + uses: actions/upload-artifact@v4 + with: + name: testrun-coverage-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/coverage/ + include-hidden-files: true + + - name: Upload JUnit XML Test Run Artifacts + if: always() && steps.download-artifacts-from-vm.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: testrun-junit-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/xml-unittests-output/ + include-hidden-files: true + + - name: Upload Test Run Log Artifacts + if: always() && steps.download-artifacts-from-vm.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: testrun-log-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-${{ matrix.transport }}-${{ matrix.tests-chunk }}-${{ matrix.test-group || 1 }}-${{ env.TIMESTAMP }} + path: | + artifacts/logs + include-hidden-files: true + + + report: + name: Test Reports + runs-on: ubuntu-22.04 + if: ${{ false }} + needs: + - test-linux + - test-linux-arm64 + - test-macos + - test-windows + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['linux'] }} + env: + PIP_INDEX_URL: https://pypi.org/simple + + steps: + - name: Checkout Source Code + uses: actions/checkout@v4 + + - uses: actions/setup-python@v5 + with: + python-version: '3.10' + + - name: "Throttle Builds" + shell: bash + run: | + t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" + + - name: Merge JUnit XML Test Run Artifacts + continue-on-error: true + uses: actions/upload-artifact/merge@v4 + with: + name: testrun-junit-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }} + pattern: testrun-junit-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-* + separate-directories: false + delete-merged: true + + - name: Merge Log Test Run Artifacts + continue-on-error: true + uses: actions/upload-artifact/merge@v4 + with: + name: testrun-log-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }} + pattern: testrun-log-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-* + separate-directories: false + delete-merged: true + + - name: Merge Code Coverage Test Run Artifacts + if: ${{ inputs.skip-code-coverage == false }} + continue-on-error: true + uses: actions/upload-artifact/merge@v4 + with: + name: testrun-coverage-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }} + pattern: testrun-coverage-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}-* + separate-directories: false + delete-merged: true + + - name: Download Code Coverage Test Run Artifacts + uses: actions/download-artifact@v4 + if: ${{ inputs.skip-code-coverage == false }} + id: download-coverage-artifacts + with: + path: artifacts/coverage/ + pattern: testrun-coverage-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}* + merge-multiple: true + + - name: Show Downloaded Test Run Artifacts + if: ${{ inputs.skip-code-coverage == false }} + run: | + tree -a artifacts + + - 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 }}' + + - name: Create XML Coverage Reports + if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' && job.status != 'cancelled' + run: | + nox --force-color -e create-xml-coverage-reports + mv artifacts/coverage/salt.xml artifacts/coverage/salt..${{ matrix.slug }}..${{ inputs.nox-session }}.xml + mv artifacts/coverage/tests.xml artifacts/coverage/tests..${{ matrix.slug }}..${{ inputs.nox-session }}.xml + + - name: Report Salt Code Coverage + if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' + continue-on-error: true + run: | + nox --force-color -e report-coverage -- salt + + - name: Report Combined Code Coverage + if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' + continue-on-error: true + run: | + nox --force-color -e report-coverage + + - name: Rename Code Coverage DB + if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' + continue-on-error: true + run: | + mv artifacts/coverage/.coverage artifacts/coverage/.coverage.${{ matrix.slug }}.${{ inputs.nox-session }} + + - name: Upload Code Coverage DB + if: always() && inputs.skip-code-coverage == false && steps.download-coverage-artifacts.outcome == 'success' + uses: actions/upload-artifact@v4 + with: + name: all-testrun-coverage-artifacts-${{ matrix.slug }}.${{ inputs.nox-session }} + path: artifacts/coverage + include-hidden-files: true diff --git a/.github/workflows/test-package-downloads-action.yml b/.github/workflows/test-package-downloads-action.yml index 44dacc62914..bd2453acff5 100644 --- a/.github/workflows/test-package-downloads-action.yml +++ b/.github/workflows/test-package-downloads-action.yml @@ -88,9 +88,7 @@ jobs: needs: - generate-matrix runs-on: - - self-hosted - - linux - - bastion + - ubuntu-latest env: USE_S3_CACHE: 'true' environment: ${{ inputs.environment }} @@ -497,9 +495,7 @@ jobs: env: USE_S3_CACHE: 'true' runs-on: - - self-hosted - - linux - - bastion + - ubuntu-latest environment: ${{ inputs.environment }} timeout-minutes: 120 # 2 Hours - More than this and something is wrong strategy: diff --git a/.github/workflows/test-packages-action-linux.yml b/.github/workflows/test-packages-action-linux.yml deleted file mode 100644 index 47a5e2cdc50..00000000000 --- a/.github/workflows/test-packages-action-linux.yml +++ /dev/null @@ -1,279 +0,0 @@ -name: Test Artifact - -on: - workflow_call: - inputs: - distro-slug: - required: true - type: string - description: The OS slug to run tests against - platform: - required: true - type: string - description: The platform being tested - arch: - required: true - type: string - description: The platform arch being tested - pkg-type: - required: true - type: string - description: The platform arch being tested - salt-version: - type: string - required: true - description: The Salt version of the packages to install and test - cache-prefix: - required: true - type: string - description: Seed used to invalidate caches - testing-releases: - required: true - type: string - description: A JSON list of releases to test upgrades against - nox-version: - required: true - type: string - description: The nox version to install - python-version: - required: false - type: string - description: The python version to run tests with - default: "3.10" - fips: - required: false - type: boolean - default: false - description: Test run with FIPS enabled - package-name: - required: false - type: string - description: The onedir package name to use - default: salt - nox-session: - required: false - type: string - description: The nox session to run - default: ci-test-onedir - skip-code-coverage: - required: false - type: boolean - description: Skip code coverage - default: false - -env: - COLUMNS: 190 - AWS_MAX_ATTEMPTS: "10" - AWS_RETRY_MODE: "adaptive" - PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} - PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} - PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} - PIP_DISABLE_PIP_VERSION_CHECK: "1" - RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" - USE_S3_CACHE: 'true' - -jobs: - - generate-matrix: - name: Generate Matrix - runs-on: - # We need to run on our self-hosted runners because we need proper credentials - # for boto3 to scan through our repositories. - - self-hosted - - linux - - x86_64 - outputs: - pkg-matrix-include: ${{ steps.generate-pkg-matrix.outputs.matrix }} - build-reports: ${{ steps.generate-pkg-matrix.outputs.build-reports }} - steps: - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Checkout Source Code - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - - - name: Generate Package Test Matrix - id: generate-pkg-matrix - run: | - tools ci pkg-matrix ${{ inputs.distro-slug }} \ - ${{ inputs.pkg-type }} --testing-releases ${{ join(fromJSON(inputs.testing-releases), ' ') }} - - - test: - name: Test - runs-on: - - self-hosted - - linux - - bastion - timeout-minutes: 120 # 2 Hours - More than this and something is wrong - needs: - - generate-matrix - strategy: - fail-fast: false - matrix: - include: ${{ fromJSON(needs.generate-matrix.outputs.pkg-matrix-include) }} - - 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: ${{ inputs.package-name }}-${{ inputs.salt-version }}-${{ inputs.arch }}-${{ inputs.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-${{ inputs.platform }}-${{ inputs.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-${{ inputs.platform }}-${{ inputs.arch }}.tar.xz - - - name: List Packages - run: | - tree artifacts/pkg/ - - - name: Download nox.linux.${{ inputs.arch }}.tar.* artifact for session ${{ inputs.nox-session }} - uses: actions/download-artifact@v4 - with: - name: nox-linux-${{ inputs.arch }}-${{ inputs.nox-session }} - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Start VM - id: spin-up-vm - run: | - tools --timestamps vm create --environment "${SPB_ENVIRONMENT}" --retries=2 ${{ inputs.distro-slug }} - - - name: List Free Space - run: | - tools --timestamps vm ssh ${{ inputs.distro-slug }} -- df -h || true - - - name: Upload Checkout To VM - run: | - tools --timestamps vm rsync ${{ inputs.distro-slug }} - - - name: Decompress .nox Directory - run: | - tools --timestamps vm decompress-dependencies ${{ inputs.distro-slug }} - - - name: Show System Info - run: | - tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \ - --nox-session=${{ inputs.nox-session }}-pkgs ${{ inputs.distro-slug }} -- ${{ matrix.tests-chunk }} - - - name: Run Package Tests - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install ${{ inputs.fips && '--fips ' || '' }}\ - --nox-session=${{ inputs.nox-session }}-pkgs --rerun-failures ${{ inputs.distro-slug }} -- ${{ matrix.tests-chunk }} \ - ${{ matrix.version && format('--prev-version={0}', matrix.version) || ''}} - - - name: Download Test Run Artifacts - id: download-artifacts-from-vm - if: always() && steps.spin-up-vm.outcome == 'success' - run: | - tools --timestamps vm download-artifacts ${{ inputs.distro-slug }} - # 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: Destroy VM - if: always() - run: | - tools --timestamps vm destroy --no-wait ${{ inputs.distro-slug }} || true - - - name: Upload Test Run Artifacts - if: always() && steps.download-artifacts-from-vm.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: pkg-testrun-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.pkg-type }}-${{ inputs.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: - - generate-matrix - - test - - steps: - - name: Checkout Source Code - uses: actions/checkout@v4 - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Wait For Artifacts - run: | - sleep 60 - - - name: Merge Test Run Artifacts - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: pkg-testrun-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.pkg-type }} - pattern: pkg-testrun-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.pkg-type }}-* - separate-directories: true - delete-merged: true - - - name: Wait For Artifacts 2 - run: | - sleep 60 - - - name: Download Test Run Artifacts - id: download-test-run-artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts/ - pattern: pkg-testrun-artifacts-${{ inputs.distro-slug }}${{ inputs.fips && '-fips' || '' }}-${{ inputs.pkg-type }}* - merge-multiple: true - - - - name: Show Test Run Artifacts - if: always() && steps.download-test-run-artifacts.outcome == 'success' - run: | - tree -a artifacts diff --git a/.github/workflows/test-packages-action-macos.yml b/.github/workflows/test-packages-action-macos.yml deleted file mode 100644 index 2e9b739a65d..00000000000 --- a/.github/workflows/test-packages-action-macos.yml +++ /dev/null @@ -1,280 +0,0 @@ -name: Test Artifact - -on: - workflow_call: - inputs: - distro-slug: - required: true - type: string - description: The OS slug to run tests against - runner: - required: true - type: string - description: The GitHub runner name - platform: - required: true - type: string - description: The platform being tested - arch: - required: true - type: string - description: The platform arch being tested - pkg-type: - required: true - type: string - description: The platform arch being tested - salt-version: - type: string - required: true - description: The Salt version of the packages to install and test - cache-prefix: - required: true - type: string - description: Seed used to invalidate caches - testing-releases: - required: true - type: string - description: A JSON list of releases to test upgrades against - nox-version: - required: true - type: string - description: The nox version to install - python-version: - required: false - type: string - description: The python version to run tests with - default: "3.10" - package-name: - required: false - type: string - description: The onedir package name to use - default: salt - nox-session: - required: false - type: string - description: The nox session to run - default: ci-test-onedir - skip-code-coverage: - required: false - type: boolean - description: Skip code coverage - default: false - -env: - COLUMNS: 190 - PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} - PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} - PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} - PIP_DISABLE_PIP_VERSION_CHECK: "1" - RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" - -jobs: - - generate-matrix: - name: Generate Matrix - runs-on: - # We need to run on our self-hosted runners because we need proper credentials - # for boto3 to scan through our repositories. - - self-hosted - - linux - - x86_64 - outputs: - pkg-matrix-include: ${{ steps.generate-pkg-matrix.outputs.matrix }} - build-reports: ${{ steps.generate-pkg-matrix.outputs.build-reports }} - 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: Checkout Source Code - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - - - name: Generate Package Test Matrix - id: generate-pkg-matrix - run: | - tools ci pkg-matrix ${{ inputs.distro-slug }} ${{ inputs.pkg-type }} --testing-releases ${{ join(fromJSON(inputs.testing-releases), ' ') }} - - - test: - name: Test - runs-on: ${{ inputs.runner }} - timeout-minutes: 150 # 2 & 1/2 Hours - More than this and something is wrong (MacOS needs a little more time) - needs: - - generate-matrix - strategy: - fail-fast: false - matrix: - include: ${{ fromJSON(needs.generate-matrix.outputs.pkg-matrix-include) }} - - 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 }}-${{ inputs.arch }}-${{ inputs.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-${{ inputs.platform }}-${{ inputs.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-${{ inputs.platform }}-${{ inputs.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.${{ inputs.arch }}.tar.* artifact for session ${{ inputs.nox-session }} - uses: actions/download-artifact@v4 - with: - name: nox-macos-${{ inputs.arch }}-${{ inputs.nox-session }} - - - name: Decompress .nox Directory - run: | - nox --force-color -e decompress-dependencies -- macos ${{ inputs.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: ${{ inputs.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-${{ inputs.distro-slug }}-${{ inputs.pkg-type }}-${{ inputs.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: - - generate-matrix - - test - - steps: - - name: Checkout Source Code - uses: actions/checkout@v4 - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Wait For Artifacts - run: | - sleep 60 - - - name: Merge Test Run Artifacts - continue-on-error: true - uses: actions/upload-artifact/merge@v4 - with: - name: pkg-testrun-artifacts-${{ inputs.distro-slug }}-${{ inputs.pkg-type }} - pattern: pkg-testrun-artifacts-${{ inputs.distro-slug }}-${{ inputs.pkg-type }}-* - separate-directories: true - delete-merged: true - - - name: Wait For Artifacts 2 - run: | - sleep 60 - - - name: Download Test Run Artifacts - id: download-test-run-artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts/ - pattern: pkg-testrun-artifacts-${{ inputs.distro-slug }}-${{ inputs.pkg-type }}* - merge-multiple: true - - - name: Show Test Run Artifacts - if: always() && steps.download-test-run-artifacts.outcome == 'success' - run: | - tree -a artifacts - - - 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 diff --git a/.github/workflows/test-packages-action-windows.yml b/.github/workflows/test-packages-action-windows.yml deleted file mode 100644 index 310b08eefb5..00000000000 --- a/.github/workflows/test-packages-action-windows.yml +++ /dev/null @@ -1,277 +0,0 @@ -name: Test Artifact - -on: - workflow_call: - inputs: - distro-slug: - required: true - type: string - description: The OS slug to run tests against - platform: - required: true - type: string - description: The platform being tested - arch: - required: true - type: string - description: The platform arch being tested - pkg-type: - required: true - type: string - description: The platform arch being tested - salt-version: - type: string - required: true - description: The Salt version of the packages to install and test - cache-prefix: - required: true - type: string - description: Seed used to invalidate caches - testing-releases: - required: true - type: string - description: A JSON list of releases to test upgrades against - nox-version: - required: true - type: string - description: The nox version to install - python-version: - required: false - type: string - description: The python version to run tests with - default: "3.10" - fips: - required: false - type: boolean - default: false - description: Test run with FIPS enabled - package-name: - required: false - type: string - description: The onedir package name to use - default: salt - nox-session: - required: false - type: string - description: The nox session to run - default: ci-test-onedir - skip-code-coverage: - required: false - type: boolean - description: Skip code coverage - default: false - -env: - COLUMNS: 190 - AWS_MAX_ATTEMPTS: "10" - AWS_RETRY_MODE: "adaptive" - PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} - PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} - PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} - PIP_DISABLE_PIP_VERSION_CHECK: "1" - RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" - -jobs: - - generate-matrix: - name: Generate Matrix - runs-on: - # We need to run on our self-hosted runners because we need proper credentials - # for boto3 to scan through our repositories. - - self-hosted - - linux - - x86_64 - outputs: - pkg-matrix-include: ${{ steps.generate-pkg-matrix.outputs.matrix }} - build-reports: ${{ steps.generate-pkg-matrix.outputs.build-reports }} - steps: - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Checkout Source Code - uses: actions/checkout@v4 - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - - - name: Generate Package Test Matrix - id: generate-pkg-matrix - run: | - tools ci pkg-matrix ${{ inputs.fips && '--fips ' || '' }}${{ inputs.distro-slug }} \ - ${{ inputs.pkg-type }} --testing-releases ${{ join(fromJSON(inputs.testing-releases), ' ') }} - - - test: - name: Test - runs-on: - - self-hosted - - linux - - bastion - timeout-minutes: 120 # 2 Hours - More than this and something is wrong - needs: - - generate-matrix - strategy: - fail-fast: false - matrix: - include: ${{ fromJSON(needs.generate-matrix.outputs.pkg-matrix-include) }} - - 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: ${{ inputs.package-name }}-${{ inputs.salt-version }}-${{ inputs.arch }}-${{ inputs.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-${{ inputs.platform }}-${{ inputs.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-${{ inputs.platform }}-${{ inputs.arch }}.tar.xz - - - name: List Packages - run: | - tree artifacts/pkg/ - - - name: Download nox.windows.${{ inputs.arch }}.tar.* artifact for session ${{ inputs.nox-session }} - uses: actions/download-artifact@v4 - with: - name: nox-windows-${{ inputs.arch }}-${{ inputs.nox-session }} - - - name: Setup Python Tools Scripts - uses: ./.github/actions/setup-python-tools-scripts - with: - cache-prefix: ${{ inputs.cache-prefix }} - - - name: Get Salt Project GitHub Actions Bot Environment - run: | - TOKEN=$(curl -sS -f -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 30") - SPB_ENVIRONMENT=$(curl -sS -f -H "X-aws-ec2-metadata-token: $TOKEN" http://169.254.169.254/latest/meta-data/tags/instance/spb:environment) - echo "SPB_ENVIRONMENT=$SPB_ENVIRONMENT" >> "$GITHUB_ENV" - - - name: Start VM - id: spin-up-vm - run: | - tools --timestamps vm create --environment "${SPB_ENVIRONMENT}" --retries=2 ${{ inputs.distro-slug }} - - - name: List Free Space - run: | - tools --timestamps vm ssh ${{ inputs.distro-slug }} -- df -h || true - - - name: Upload Checkout To VM - run: | - tools --timestamps vm rsync ${{ inputs.distro-slug }} - - - name: Decompress .nox Directory - run: | - tools --timestamps vm decompress-dependencies ${{ inputs.distro-slug }} - - - name: Show System Info - run: | - tools --timestamps --timeout-secs=1800 vm test --skip-requirements-install --print-system-information-only \ - --nox-session=${{ inputs.nox-session }}-pkgs ${{ inputs.distro-slug }} -- ${{ matrix.tests-chunk }} - - - name: Run Package Tests - run: | - tools --timestamps --no-output-timeout-secs=1800 --timeout-secs=14400 vm test --skip-requirements-install ${{ matrix.fips && '--fips ' || '' }}\ - --nox-session=${{ inputs.nox-session }}-pkgs --rerun-failures ${{ inputs.distro-slug }} -- ${{ matrix.tests-chunk }} \ - ${{ matrix.version && format('--prev-version={0}', matrix.version) || ''}} - - - name: Download Test Run Artifacts - id: download-artifacts-from-vm - if: always() && steps.spin-up-vm.outcome == 'success' - run: | - tools --timestamps vm download-artifacts ${{ inputs.distro-slug }} - # 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: Destroy VM - if: always() - run: | - tools --timestamps vm destroy --no-wait ${{ inputs.distro-slug }} || true - - - name: Upload Test Run Artifacts - if: always() && steps.download-artifacts-from-vm.outcome == 'success' - uses: actions/upload-artifact@v4 - with: - name: pkg-testrun-artifacts-${{ inputs.distro-slug }}-${{ inputs.pkg-type }}-${{ inputs.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: - - generate-matrix - - test - - steps: - - name: Checkout Source Code - uses: actions/checkout@v4 - - - name: "Throttle Builds" - shell: bash - run: | - t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" - - - name: Wait For Artifacts - run: | - sleep 60 - - - name: Merge Test Run Artifacts - uses: actions/upload-artifact/merge@v4 - continue-on-error: true - with: - name: pkg-testrun-artifacts-${{ inputs.distro-slug }}-${{ inputs.pkg-type }} - pattern: pkg-testrun-artifacts-${{ inputs.distro-slug }}-${{ inputs.pkg-type }}-* - separate-directories: true - delete-merged: true - - - name: Wait For Artifacts 2 - run: | - sleep 60 - - - name: Download Test Run Artifacts - id: download-test-run-artifacts - uses: actions/download-artifact@v4 - with: - path: artifacts/ - pattern: pkg-testrun-artifacts-${{ inputs.distro-slug }}-${{ inputs.pkg-type }}* - merge-multiple: true - - - name: Show Test Run Artifacts - if: always() && steps.download-test-run-artifacts.outcome == 'success' - run: | - tree -a artifacts diff --git a/.github/workflows/test-packages-action.yml b/.github/workflows/test-packages-action.yml new file mode 100644 index 00000000000..9cc47b684c1 --- /dev/null +++ b/.github/workflows/test-packages-action.yml @@ -0,0 +1,503 @@ +--- +name: Test Packages + +on: + workflow_call: + inputs: + salt-version: + type: string + required: true + description: The Salt version of the packages to install and test + cache-prefix: + required: true + type: string + description: Seed used to invalidate caches + testing-releases: + required: true + type: string + description: A JSON list of releases to test upgrades against + nox-version: + required: true + type: string + description: The nox version to install + python-version: + required: false + type: string + description: The python version to run tests with + default: "3.10" + nox-session: + required: false + type: string + description: The nox session to run + default: ci-test-onedir + skip-code-coverage: + required: false + type: boolean + description: Skip code coverage + default: false + package-name: + required: false + type: string + description: The onedir package name to use + default: salt + matrix: + required: true + type: string + description: Json job matrix config + linux_arm_runner: + required: true + type: string + description: Json job matrix config + +env: + COLUMNS: 190 + AWS_MAX_ATTEMPTS: "10" + AWS_RETRY_MODE: "adaptive" + PIP_INDEX_URL: ${{ vars.PIP_INDEX_URL }} + PIP_TRUSTED_HOST: ${{ vars.PIP_TRUSTED_HOST }} + PIP_EXTRA_INDEX_URL: ${{ vars.PIP_EXTRA_INDEX_URL }} + PIP_DISABLE_PIP_VERSION_CHECK: "1" + RAISE_DEPRECATIONS_RUNTIME_ERRORS: "1" + USE_S3_CACHE: 'false' + +jobs: + + test-linux: + name: ${{ matrix.display_name }} ${{ matrix.tests-chunk }} + runs-on: ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || inputs.linux_arm_runner }} + if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }} + timeout-minutes: 120 # 2 Hours - More than this and something is wrong + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['linux'] }} + 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: ${{ 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: 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: List Packages + run: | + tree artifacts/pkg/ + + - name: Download nox.linux.${{ matrix.arch }}.tar.* artifact for session ${{ inputs.nox-session }} + uses: actions/download-artifact@v4 + with: + name: nox-linux-${{ matrix.arch }}-${{ inputs.nox-session }} + + - name: "Pull container ${{ matrix.container }}" + run: | + docker pull ${{ matrix.container }} + + - name: "Create container ${{ matrix.container }}" + run: | + /usr/bin/docker create --name ${{ github.run_id }}_salt-test-pkg --workdir /__w/salt/salt --privileged -e "HOME=/github/home" -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work":"/__w" -v "/home/runner/work/_temp":"/__w/_temp" -v "/home/runner/work/_actions":"/__w/_actions" -v "/opt/hostedtoolcache":"/__t" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" --entrypoint "/usr/lib/systemd/systemd" ${{ matrix.container }} --systemd --unit rescue.target + + - name: "Start container ${{ matrix.container }}" + run: | + /usr/bin/docker start ${{ github.run_id }}_salt-test-pkg + + - name: Decompress .nox Directory + run: | + docker exec ${{ github.run_id}}_salt-test-pkg python3 -m nox --force-color -e decompress-dependencies -- linux ${{ matrix.arch }} + + - name: Setup Python Tools Scripts + uses: ./.github/actions/setup-python-tools-scripts + with: + cache-prefix: ${{ inputs.cache-prefix }} + + - name: List Free Space + run: | + df -h || true + + - name: Show System Info + env: + SKIP_REQUIREMENTS_INSTALL: "1" + PRINT_SYSTEM_INFO_ONLY: "1" + run: | + docker exec ${{ github.run_id }}_salt-test-pkg python3 -m nox --force-color -e ${{ inputs.nox-session }}-pkgs -- ${{ matrix.tests-chunk }} + + - name: Run Package Tests + env: + SKIP_REQUIREMENTS_INSTALL: "1" + RERUN_FAILURES: "1" + GITHUB_ACTIONS_PIPELINE: "1" + SKIP_INITIAL_GH_ACTIONS_FAILURES: "1" + COVERAGE_CONTEXT: ${{ matrix.slug }} + run: | + /usr/bin/docker exec ${{ github.run_id }}_salt-test-pkg \ + python3 -m nox --force-color -e ${{ inputs.nox-session }}-pkgs -- ${{ matrix.tests-chunk }} \ + ${{ matrix.version && format('--prev-version={0}', matrix.version) || ''}} + + - name: Upload Test Run Log Artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: pkg-testrun-log-artifacts-${{ matrix.slug }}-${{ inputs.nox-session }}${{ matrix.fips && '-fips' || '' }}-${{ matrix.pkg_type }}-${{ matrix.arch }}-${{ 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.slug }}${{ matrix.fips && '-fips' || '' }}-${{ 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-macos: + name: ${{ matrix.display_name }} ${{ matrix.tests-chunk }} + runs-on: ${{ matrix.runner }} + if: ${{ toJSON(fromJSON(inputs.matrix)['macos']) != '[]' }} + 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 }}-macos + 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.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.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.display_name }} ${{ matrix.tests-chunk }} + runs-on: ${{ matrix.slug }} + timeout-minutes: 120 # 2 Hours - More than this and something is wrong + if: ${{ toJSON(fromJSON(inputs.matrix)['windows']) != '[]' }} + strategy: + fail-fast: false + matrix: + include: ${{ fromJSON(inputs.matrix)['windows'] }} + 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.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.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.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.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-22.04 + if: ${{ false }} + needs: + - test-linux + - test-macos + - test-windows + strategy: + matrix: + include: ${{ fromJSON(inputs.matrix)['linux'] }} + + steps: + - name: Checkout Source Code + uses: actions/checkout@v4 + + - name: "Throttle Builds" + shell: bash + run: | + t=$(shuf -i 1-30 -n 1); echo "Sleeping $t seconds"; sleep "$t" + + - name: Wait For Artifacts + run: | + sleep 60 + + - name: Merge Test Run Artifacts + continue-on-error: true + uses: actions/upload-artifact/merge@v4 + with: + name: pkg-testrun-artifacts-${{ matrix.slug }}${{ matrix.fips && '-fips' || '' }}-${{ matrix.pkg_type }} + pattern: pkg-testrun-artifacts-${{ matrix.slug }}${{ matrix.fips && '-fips' || '' }}-${{ matrix.pkg_type }}-* + separate-directories: true + delete-merged: true + + - name: Wait For Artifacts 2 + run: | + sleep 60 + + - name: Download Test Run Artifacts + id: download-test-run-artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts/ + pattern: pkg-testrun-artifacts-${{ matrix.slug }}${{ matrix.fips && '-fips' || '' }}-${{ matrix.pkg_type }}* + merge-multiple: true + + - name: Show Test Run Artifacts + if: always() + run: | + tree -a artifacts diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 4e38a366de2..0d7814706b9 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -59,7 +59,7 @@ repos: - id: tools alias: generate-workflows name: Generate GitHub Workflow Templates - files: ^(cicd/shared-gh-workflows-context\.yml|tools/precommit/workflows\.py|.github/workflows/.*)$ + files: ^(cicd/shared-gh-workflows-context\.yml|tools/utils/__init__.py|tools/precommit/workflows\.py|.github/workflows/.*)$ pass_filenames: false args: - pre-commit diff --git a/AUTHORS b/AUTHORS index e6d611cf2a9..7d645d49670 100644 --- a/AUTHORS +++ b/AUTHORS @@ -8,114 +8,28 @@ Whos Who in Salt The Man With the Plan ---------------------------- -Thomas S. Hatch is the main developer of Salt. He is the founder, owner, -maintainer and lead of the Salt project, as well as author of the majority -of the Salt code and documentation. +Thomas S. Hatch is the creator of Salt. He was the founder, owner, +maintainer that lead Salt project, as well as author of the majority +of initial Salt code and documentation. + +SaltStack, Inc. was acquired by VMware in 2020. In 2023, VMware was +acquired by Broadcom. + +The Salt Project core team of developers are employed by Broadcom. Documentation System ---------------------------- -The documentation system was put together by Seth House, much of the -documentation is being maintained by Seth. - -Developers ----------------------------- - -Aaron Bull Schaefer -Aaron Toponce -Andrew Hammond -Aditya Kulkarni -Alexander Pyatkin -Andre Sachs -Andrew Colin Kissa -Andrew Kuhnhausen -Antti Kaihola -archme -Brad Barden -Bret Palsson -Brian Wagner -C. R. Oldham -Carl Loa Odin -Carlo Pires -Chris Rebert -Chris Scheller -Christer Edwards -Clint Savage -Colton Myers -Corey Quinn -Corin Kochenower -Dan Garthwaite -Daniel Wallace -David Boucha -David Pravec -deutsche -Dmitry Kuzmenko -Doug Renn -Eivind Uggedal -epoelke@gmail.com -Eric Poelke -Erik Nolte -Evan Borgstrom -Forrest Alvarez -Fred Reimer -Henrik Holmboe -Gareth J. Greenaway -Jacob Albretsen -Jed Glazner -Jeff Bauer -Jeff Hutchins -Jeffrey C. Ollie -Jeff Schroeder -Johnny Bergström -Jonas Buckner -Jonathan Harker -Joseph Hall -Josmar Dias -Kent Tenney -lexual -Marat Shakirov -Marc Abramowitz -Martin Schnabel -Mathieu Le Marec - Pasquet -Matt Black -Matthew Printz -Matthias Teege -Maxim Burgerhout -Mickey Malone -Michael Steed -Mike Place -Mircea Ulinic -Mitch Anderson -Mostafa Hussein -Nathaniel Whiteinge -Nicolas Delaby -Nicole Thomas -Nigel Owen -Nitin Madhok -Oleg Anashkin -Pedro Algarvio -Peter Baumgartner -Pierre Carrier -Rhys Elsmore -Rafael Caricio -Robert Fielding -Sean Channel -Seth House -Seth Vidal -Stas Alekseev -Thibault Cohen -Thomas Schreiber -Thomas S Hatch -Tor Hveem -Travis Cline -Wieland Hoffmann +The initial documentation system was put together by Seth House. +Documentation is now primarily maintained by the Salt Project core team and +community members. Growing Community -------------------------------- -Salt is a rapidly growing project with a large community, to view all -contributors please check Github, this file can sometimes be out of date: +Salt is a rapidly growing project with a large community, and has had more than +2,400 contributors over the years. To view all contributors, please check Github: https://github.com/saltstack/salt/graphs/contributors diff --git a/CODE_OF_CONDUCT.md b/CODE_OF_CONDUCT.md index e7f1c331127..313038982c3 100644 --- a/CODE_OF_CONDUCT.md +++ b/CODE_OF_CONDUCT.md @@ -60,7 +60,7 @@ representative at an online or offline event. Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at -conduct@saltstack.com. +saltproject.pdl@broadcom.com. All complaints will be reviewed and investigated promptly and fairly. All community leaders are obligated to respect the privacy and security of the diff --git a/CONTRIBUTING.rst b/CONTRIBUTING.rst index c9c459ef558..8fac02740b6 100644 --- a/CONTRIBUTING.rst +++ b/CONTRIBUTING.rst @@ -8,7 +8,7 @@ ways you can help improve Salt: - Use Salt and report bugs with clear, detailed descriptions. - Join a `working group `__ to collaborate with other contributors. -- Answer questions on platforms like `IRC `__, +- Answer questions on platforms like the `community Discord `__, the `salt-users mailing list `__, `Server Fault `__, @@ -135,7 +135,7 @@ Then activate it: Sweet! Now you're ready to clone Salt so you can start hacking away! If you get stuck at any point, check out the resources at the beginning of -this guide. IRC and Discord are particularly helpful places to go. +this guide. Discord and GitHub Discussions are particularly helpful places to go. Get the source! @@ -631,7 +631,7 @@ your PR is submitted during the week you should be able to expect some kind of communication within that business day. If your tests are passing and we're not in a code freeze, ideally your code will be merged that week or month. If you haven't heard from your assigned reviewer, ping them -on GitHub, `irc `__, or Community Discord. +on GitHub or `Community Discord `__. It's likely that your reviewer will leave some comments that need addressing - it may be a style change, or you forgot a changelog entry, diff --git a/README.rst b/README.rst index f3129299b11..63d4bf77568 100644 --- a/README.rst +++ b/README.rst @@ -6,18 +6,10 @@ :alt: PyPi Package Downloads :target: https://pypi.org/project/salt -.. image:: https://img.shields.io/lgtm/grade/python/github/saltstack/salt - :alt: PyPi Package Downloads - :target: https://lgtm.com/projects/g/saltstack/salt/context:python - .. image:: https://img.shields.io/badge/discord-SaltProject-blue.svg?logo=discord :alt: Salt Project Discord Community :target: https://discord.com/invite/J7b7EscrAs -.. image:: https://img.shields.io/twitch/status/saltprojectoss - :alt: Salt Project Twitch Channel - :target: https://www.twitch.tv/saltprojectoss - .. image:: https://img.shields.io/reddit/subreddit-subscribers/saltstack?style=social :alt: Salt Project subreddit :target: https://www.reddit.com/r/saltstack/ @@ -71,20 +63,21 @@ In addition to configuration management Salt can also: About our sponsors ================== -Salt powers VMware's `VMware Aria Automation Config`_ -(previously vRealize Automation SaltStack Config / SaltStack Enterprise), and can be found + +Salt powers VMware by Broadcom's `Tanzu Salt`_ +(previously Aria Automation Config / vRealize Automation SaltStack Config / SaltStack Enterprise), and can be found under the hood of products from Juniper, Cisco, Cloudflare, Nutanix, SUSE, and Tieto, to name a few. -The original sponsor of our community, SaltStack, was `acquired by VMware in 2020 `_. -The Salt Project remains an open source ecosystem that VMware supports and -contributes to. VMware ensures the code integrity and quality of the Salt +The original sponsor of our community, SaltStack, was acquired by VMware in 2020. +`VMware was later acquired by Broadcom in 2023 `__. +The Salt Project remains an open source ecosystem that Broadcom supports and +contributes to. Broadcom ensures the code integrity and quality of the Salt modules by acting as the official sponsor and manager of the Salt project. Many -of the core Salt Project contributors are also VMware employees. This team +of the core Salt Project contributors are also Broadcom employees. This team carefully reviews and enhances the Salt modules to ensure speed, quality, and security. - Download and install Salt ========================= Salt is tested and packaged to run on CentOS, Debian, RHEL, Ubuntu, MacOS, @@ -93,9 +86,11 @@ Windows, and more. Download Salt and get started now. See for more information. To download and install Salt, see: -* `The Salt install guide `_ -* `Salt Project repository `_ +* `The Salt install guide `_ + * `Salt Project Repository: Linux (RPM) `__ - Where Salt ``rpm`` packages are officially stored and distributed. + * `Salt Project Repository: Linux (DEB) `__ - Where Salt ``deb`` packages are officially stored and distributed. + * `Salt Project Repository: GENERIC `__ - Where Salt Windows, macOS, etc. (non-rpm, non-deb) packages are officially stored and distributed. Technical support ================= @@ -153,11 +148,9 @@ Please be sure to review our `Code of Conduct `_. Also, check out some of our community resources including: -* `Salt Project Community Wiki `_ * `Salt Project Community Discord`_ -* `Salt Project: IRC on LiberaChat `_ * `Salt Project YouTube channel `_ -* `Salt Project Twitch channel `_ +* `Salt Project Community Notes and Wiki `_ There are lots of ways to get involved in our community. Every month, there are around a dozen opportunities to meet with other contributors and the Salt Core @@ -165,10 +158,9 @@ team and collaborate in real time. The best way to keep track is by subscribing to the **Salt Project Community Events Calendar** on the main ``_ website. -If you have additional questions, email us at saltproject@vmware.com or reach out +If you have additional questions, email us at saltproject.pdl@broadcom.com or reach out directly to the Community Discord. We'd be glad to have you join our community! - License ======= Salt is licensed under the Apache 2.0 license. Please @@ -181,9 +173,7 @@ A complete list of attributions and dependencies can be found here: `salt/DEPENDENCIES.md `_ .. _Salt Project Community Discord: https://discord.com/invite/J7b7EscrAs -.. _VMware Aria Automation Config: https://www.vmware.com/products/vrealize-automation/saltstack-config.html +.. _Tanzu Salt: https://www.vmware.com/products/app-platform/tanzu-salt .. _Latest Salt Documentation: https://docs.saltproject.io/en/latest/ .. _Open an issue: https://github.com/saltstack/salt/issues/new/choose .. _SECURITY.md: https://github.com/saltstack/salt/blob/master/SECURITY.md -.. _Calendar html: https://outlook.office365.com/owa/calendar/105f69bacd4541baa849529aed37eb2d@vmware.com/434ec2155b2b4cce90144c87f0dd03d56626754050155294962/calendar.html -.. _Calendar ics: https://outlook.office365.com/owa/calendar/105f69bacd4541baa849529aed37eb2d@vmware.com/434ec2155b2b4cce90144c87f0dd03d56626754050155294962/calendar.ics diff --git a/SUPPORT.rst b/SUPPORT.rst index 537039bf127..54b81d8881b 100644 --- a/SUPPORT.rst +++ b/SUPPORT.rst @@ -1,15 +1,8 @@ -Get SaltStack Support and Help -============================== +Get Salt Project Support and Help +================================= -**IRC Chat** - Join the vibrant, helpful and positive SaltStack chat room in -LiberaChat at #salt. There is no need to introduce yourself, or ask permission -to join in, just help and be helped! Make sure to wait for an answer, sometimes -it may take a few moments for someone to reply. - -``_ - -**SaltStack Slack** - Alongside IRC is our SaltStack Community Discord for the -SaltStack Working groups. Use the following link to request an invitation. +**Salt Project Discord** - Join the Salt Project Community Discord! +Use the following link to join the Discord server: ``_ @@ -20,13 +13,13 @@ anyone can help answer. Join the conversation! ``_ You may subscribe to the list without a Google account by emailing -salt-users+subscribe@googlegroups.com and you may post to the list by emailing -salt-users@googlegroups.com +``salt-users+subscribe@googlegroups.com`` and you may post to the list by emailing +``salt-users@googlegroups.com`` **Reporting Issues** - To report an issue with Salt, please follow the guidelines for filing bug reports: ``_ -**SaltStack Support** - If you need dedicated, prioritized support, please -consider a SaltStack Support package that fits your needs: -``_ +**Salt Project Support** - If you need dedicated, prioritized support, please +consider taking a look at the Enterprise product: +`Tanzu Salt `__ diff --git a/cicd/shared-gh-workflows-context.yml b/cicd/shared-gh-workflows-context.yml index 869e074f573..7771482b0d1 100644 --- a/cicd/shared-gh-workflows-context.yml +++ b/cicd/shared-gh-workflows-context.yml @@ -1,13 +1,9 @@ nox_version: "2022.8.7" python_version: "3.10.15" -relenv_version: "0.17.3" +relenv_version: "0.18.0" release_branches: - "3006.x" - "3007.x" mandatory_os_slugs: - - rockylinux-9 - - amazonlinux-2023-arm64 - - photonos-5-arm64 - - macos-12 - - ubuntu-24.04-arm64 - - windows-2022 + - ubuntu-22.04 + - ubuntu-22.04-arm64 diff --git a/doc/_themes/saltstack/layout.html b/doc/_themes/saltstack/layout.html index 8b2426c4d66..59393aef8d0 100644 --- a/doc/_themes/saltstack/layout.html +++ b/doc/_themes/saltstack/layout.html @@ -248,8 +248,8 @@ diff --git a/doc/_themes/saltstack2/layout.html b/doc/_themes/saltstack2/layout.html index f98ae192d7c..ef99aa2ebbd 100644 --- a/doc/_themes/saltstack2/layout.html +++ b/doc/_themes/saltstack2/layout.html @@ -163,16 +163,11 @@ @@ -295,7 +290,7 @@ {% if on_saltstack %} {# {% if [True, False]|random %} - + {% else %} {% endif %} #}--> diff --git a/doc/conf.py b/doc/conf.py index 30edb8b2511..8baac3fcc41 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -182,20 +182,6 @@ rst_prolog = """\ .. _`salt-announce`: https://groups.google.com/forum/#!forum/salt-announce .. _`salt-packagers`: https://groups.google.com/forum/#!forum/salt-packagers .. _`salt-discord`: https://discord.com/invite/J7b7EscrAs -.. |windownload| raw:: html - -

Python3 x86: Salt-Minion-{release}-x86-Setup.exe - | md5

- -

Python3 AMD64: Salt-Minion-{release}-AMD64-Setup.exe - | md5

- -.. |osxdownloadpy3| raw:: html - -

x86_64: salt-{release}-py3-x86_64.pkg - | md5

""".format( release=stripped_release diff --git a/doc/faq.rst b/doc/faq.rst index 25fef77f9ab..5ae6e55287d 100644 --- a/doc/faq.rst +++ b/doc/faq.rst @@ -30,7 +30,7 @@ SaltStack the company does make proprietary products which use Salt and its libr I think I found a bug! What should I do? ---------------------------------------- -The salt-users mailing list as well as the salt IRC channel can both be helpful +The salt-users mailing list as well as the Community Discord can both be helpful resources to confirm if others are seeing the issue and to assist with immediate debugging. diff --git a/doc/ref/configuration/delta_proxy.rst b/doc/ref/configuration/delta_proxy.rst index be1831da399..7e6a6813283 100644 --- a/doc/ref/configuration/delta_proxy.rst +++ b/doc/ref/configuration/delta_proxy.rst @@ -146,10 +146,8 @@ Before installing the delta proxy minion, ensure that: Install or upgrade Salt ----------------------- Ensure your Salt masters are running at least Salt version 3004. For instructions -on installing or upgrading Salt, see `repo.saltproject.io -`_. For RedHat systems, see `Install or Upgrade Salt -`_. - +on installing or upgrading Salt, see the +`Salt Install Guide `__. .. _delta-proxy-install: diff --git a/doc/ref/modules/index.rst b/doc/ref/modules/index.rst index 3231368c036..8e84861461c 100644 --- a/doc/ref/modules/index.rst +++ b/doc/ref/modules/index.rst @@ -539,8 +539,6 @@ the module using the following field lists: .. code-block:: text - :maintainer: Thomas Hatch - :maturity: new :depends: python-mysqldb :platform: all diff --git a/doc/topics/cloud/windows.rst b/doc/topics/cloud/windows.rst index a80014faf7f..30d7341b356 100644 --- a/doc/topics/cloud/windows.rst +++ b/doc/topics/cloud/windows.rst @@ -31,6 +31,21 @@ which Salt Cloud is running. See and using the Salt Minion Windows installer. +Optionally WinRM can be used instead of `winexe` if the python module `pywinrm` +is available and WinRM is supported on the target Windows version. Information +on pywinrm can be found at the project home: + +* `pywinrm project home`__ + +.. __: https://github.com/diyan/pywinrm + +Additionally, a copy of the Salt Minion Windows installer must be present on +the system on which Salt Cloud is running. This installer may be downloaded +from saltstack.com: + +* `SaltStack Download Area`__ + +.. __: https://packages.broadcom.com/artifactory/saltproject-generic/windows/ .. _new-pywinrm: diff --git a/doc/topics/development/conventions/formulas.rst b/doc/topics/development/conventions/formulas.rst index e3b8f02adb8..f5a8c8f1115 100644 --- a/doc/topics/development/conventions/formulas.rst +++ b/doc/topics/development/conventions/formulas.rst @@ -221,14 +221,10 @@ The best way to create new Formula repositories for now is to create a repository in your own account on GitHub and notify a SaltStack employee when it is ready. We will add you to the Contributors team on the `saltstack-formulas`_ organization and help you transfer the repository over. -Ping a SaltStack employee on IRC (`#salt`_ on LiberaChat), join the -``#formulas`` channel on the `salt-discord`_ (bridged to ``#saltstack-formulas`` -on LiberaChat) or send an email to the `salt-users`_ mailing list. Note that -IRC logs are available at http://ngxbot.nginx.org/logs/%23salt/ and archives -for FreeNode (up to mid-June 2021) https://logbot-archive.s3.amazonaws.com/freenode/salt.gz -and https://logbot-archive.s3.amazonaws.com/freenode/saltstack-formulas.gz. +Join the ``#formulas`` channel on the `salt-discord`_ +or send an email to the `salt-users`_ mailing list. -There are a lot of repositories in that organization! Team members can manage +Team members can manage which repositories they are subscribed to on GitHub's watching page: https://github.com/watching. @@ -246,7 +242,7 @@ your pull request has stayed open for more than a couple days feel free to "selfie-merge" your own pull request. .. _`at-mention`: https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax#mentioning-people-and-teams -.. _`#salt`: https://web.libera.chat/#salt +.. _`#salt`: https://discord.com/invite/J7b7EscrAs Style ----- diff --git a/doc/topics/development/conventions/style.rst b/doc/topics/development/conventions/style.rst index 1772d6209ca..30d814d47b2 100644 --- a/doc/topics/development/conventions/style.rst +++ b/doc/topics/development/conventions/style.rst @@ -97,7 +97,7 @@ When adding a new function or state, where possible try to use a print(msg) If you are uncertain what version should be used, either consult a core -developer in IRC or bring this up when opening your :ref:`pull request +developer in the Community Discord or bring this up when opening your :ref:`pull request ` and a core developer will let you know what version to add. Typically this will be the next element in the `periodic table `_. diff --git a/noxfile.py b/noxfile.py index 6b253a68891..70e2ff5a63c 100644 --- a/noxfile.py +++ b/noxfile.py @@ -1284,7 +1284,10 @@ def decompress_dependencies(session): if not os.path.isabs(resolved_link): # Relative symlinks, resolve them resolved_link = os.path.join(scan_path, resolved_link) - if not os.path.exists(resolved_link): + prefix_check = False + if platform == "windows": + prefix_check = resolved_link.startswith("\\\\?") + if not os.path.exists(resolved_link) or prefix_check: session.log("The symlink %r looks to be broken", resolved_link) # This is a broken link, fix it resolved_link_suffix = resolved_link.split( @@ -1839,13 +1842,24 @@ def ci_test_onedir_pkgs(session): session_warn(session, "Replacing VirtualEnv instance...") ci_test_onedir_path = REPO_ROOT / ".nox" / "ci-test-onedir" - session._runner.venv = VirtualEnv( - str(ci_test_onedir_path.relative_to(REPO_ROOT)), - interpreter=session._runner.func.python, - reuse_existing=True, - venv=session._runner.venv.venv_or_virtualenv == "venv", - venv_params=session._runner.venv.venv_params, - ) + if hasattr(session._runner.venv, "venv_or_virtualenv"): + venv = session._runner.venv.venv_or_virtualenv == "venv" + session._runner.venv = VirtualEnv( + str(ci_test_onedir_path.relative_to(REPO_ROOT)), + interpreter=session._runner.func.python, + reuse_existing=True, + venv=venv, + venv_params=session._runner.venv.venv_params, + ) + else: + venv = session._runner.venv.venv_backend in ("venv", "virtualenv") + session._runner.venv = VirtualEnv( # pylint: disable=unexpected-keyword-arg + str(ci_test_onedir_path.relative_to(REPO_ROOT)), + interpreter=session._runner.func.python, + reuse_existing=True, + venv_backend=session._runner.venv.venv_backend, + venv_params=session._runner.venv.venv_params, + ) os.environ["VIRTUAL_ENV"] = session._runner.venv.location session._runner.venv.create() diff --git a/pkg/macos/pkg-scripts/postinstall b/pkg/macos/pkg-scripts/postinstall index 3cc98edd1f6..85f44b5f0cd 100755 --- a/pkg/macos/pkg-scripts/postinstall +++ b/pkg/macos/pkg-scripts/postinstall @@ -86,55 +86,107 @@ fi log "Symlink: Creating symlinks for salt..." ln -sf "$INSTALL_DIR/salt" "$SBIN_DIR/salt" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-api..." ln -sf "$INSTALL_DIR/salt-api" "$SBIN_DIR/salt-api" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-api" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-call..." ln -sf "$INSTALL_DIR/salt-call" "$SBIN_DIR/salt-call" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-call" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-cloud..." ln -sf "$INSTALL_DIR/salt-cloud" "$SBIN_DIR/salt-cloud" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-cloud" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-cp..." ln -sf "$INSTALL_DIR/salt-cp" "$SBIN_DIR/salt-cp" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-cp" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-key..." ln -sf "$INSTALL_DIR/salt-key" "$SBIN_DIR/salt-key" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-key" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-master..." ln -sf "$INSTALL_DIR/salt-master" "$SBIN_DIR/salt-master" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-master" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-minion..." ln -sf "$INSTALL_DIR/salt-minion" "$SBIN_DIR/salt-minion" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-minion" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-proxy..." ln -sf "$INSTALL_DIR/salt-proxy" "$SBIN_DIR/salt-proxy" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-proxy" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-run..." ln -sf "$INSTALL_DIR/salt-run" "$SBIN_DIR/salt-run" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-run" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for spm..." ln -sf "$INSTALL_DIR/spm" "$SBIN_DIR/spm" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-spm" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-ssh..." ln -sf "$INSTALL_DIR/salt-ssh" "$SBIN_DIR/salt-ssh" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-ssh" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi log "Symlink: Creating symlinks for salt-syndic..." ln -sf "$INSTALL_DIR/salt-syndic" "$SBIN_DIR/salt-syndic" -log "Symlink: Created Successfully" +if [ -f "$SBIN_DIR/salt-syndic" ]; then + log "Symlink: Created Successfully" +else + log "Symlink: Failed to create symlink" +fi #------------------------------------------------------------------------------- # Add salt to paths.d diff --git a/pkg/old/suse/salt-api.spec b/pkg/old/suse/salt-api.spec index f4675fc2310..361448e9536 100644 --- a/pkg/old/suse/salt-api.spec +++ b/pkg/old/suse/salt-api.spec @@ -20,7 +20,7 @@ Version: 0.8.3 Release: 0 License: Apache-2.0 Summary: The api for Salt a parallel remote execution system -Url: http://saltstack.org/ +Url: http://saltproject.io/ Group: System/Monitoring Source0: http://pypi.python.org/packages/source/s/%{name}/%{name}-%{version}.tar.gz Source1: salt-api diff --git a/pkg/old/suse/salt.spec b/pkg/old/suse/salt.spec index ecc3442b907..bc7f85a8993 100644 --- a/pkg/old/suse/salt.spec +++ b/pkg/old/suse/salt.spec @@ -41,7 +41,7 @@ Release: 0 Summary: A parallel remote execution system License: Apache-2.0 Group: System/Monitoring -Url: http://saltstack.org/ +Url: http://saltproject.io/ Source0: http://pypi.python.org/packages/source/s/%{name}/%{name}-%{version}.tar.gz Source1: README.SUSE Source2: salt-tmpfiles.d diff --git a/pkg/rpm/salt.bash b/pkg/rpm/salt.bash index 35fe0695dbe..6363fe14271 100644 --- a/pkg/rpm/salt.bash +++ b/pkg/rpm/salt.bash @@ -1,6 +1,3 @@ -# written by David Pravec -# - feel free to /msg alekibango on IRC if you want to talk about this file - # TODO: check if --config|-c was used and use configured config file for queries # TODO: solve somehow completion for salt -G pythonversion:[tab] # (not sure what to do with lists) diff --git a/pkg/windows/install_nsis.ps1 b/pkg/windows/install_nsis.ps1 index f30abdfbb9a..9fe963e6f8d 100644 --- a/pkg/windows/install_nsis.ps1 +++ b/pkg/windows/install_nsis.ps1 @@ -46,7 +46,7 @@ $NSIS_DIR = "${env:ProgramFiles(x86)}\NSIS" $NSIS_PLUG_A = "$NSIS_DIR\Plugins\x86-ansi" $NSIS_PLUG_U = "$NSIS_DIR\Plugins\x86-unicode" $NSIS_LIB_DIR = "$NSIS_DIR\Include" -$DEPS_URL = "https://repo.saltproject.io/windows/dependencies" +$DEPS_URL = "https://github.com/saltstack/salt-windows-deps/raw/refs/heads/main/nsis" #------------------------------------------------------------------------------- # Start the Script diff --git a/pkg/windows/nsis/tests/quick_setup.ps1 b/pkg/windows/nsis/tests/quick_setup.ps1 index 454acc937c3..5dd752b9661 100644 --- a/pkg/windows/nsis/tests/quick_setup.ps1 +++ b/pkg/windows/nsis/tests/quick_setup.ps1 @@ -46,7 +46,7 @@ $WINDOWS_DIR = "$PROJECT_DIR\pkg\windows" $NSIS_DIR = "$WINDOWS_DIR\nsis" $BUILDENV_DIR = "$WINDOWS_DIR\buildenv" $NSIS_BIN = "$( ${env:ProgramFiles(x86)} )\NSIS\makensis.exe" -$SALT_DEP_URL = "https://repo.saltproject.io/windows/dependencies/64" +$SALT_DEP_URL = "https://github.com/saltstack/salt-windows-deps/raw/refs/heads/main/ssm/64/" #------------------------------------------------------------------------------- # Script Start diff --git a/pkg/windows/nsis/tests/setup.ps1 b/pkg/windows/nsis/tests/setup.ps1 index c20fa716bb1..2b136f66600 100644 --- a/pkg/windows/nsis/tests/setup.ps1 +++ b/pkg/windows/nsis/tests/setup.ps1 @@ -47,7 +47,7 @@ $NSIS_DIR = "$WINDOWS_DIR\nsis" $BUILDENV_DIR = "$WINDOWS_DIR\buildenv" $PREREQS_DIR = "$WINDOWS_DIR\prereqs" $NSIS_BIN = "$( ${env:ProgramFiles(x86)} )\NSIS\makensis.exe" -$SALT_DEP_URL = "https://repo.saltproject.io/windows/dependencies/64" +$SALT_DEP_URL = "https://github.com/saltstack/salt-windows-deps/raw/refs/heads/main/ssm/64/" #------------------------------------------------------------------------------- # Script Start diff --git a/pkg/windows/prep_salt.ps1 b/pkg/windows/prep_salt.ps1 index a583b17c985..1ad2dfd186b 100644 --- a/pkg/windows/prep_salt.ps1 +++ b/pkg/windows/prep_salt.ps1 @@ -75,11 +75,11 @@ $ARCH = $(. $PYTHON_BIN -c "import platform; print(platform.architectu if ( $ARCH -eq "64bit" ) { $ARCH = "AMD64" $ARCH_X = "x64" - $SALT_DEP_URL = "https://repo.saltproject.io/windows/dependencies/64" + $SALT_DEP_URL = "https://github.com/saltstack/salt-windows-deps/raw/refs/heads/main/ssm/64/" } else { $ARCH = "x86" $ARCH_X = "x86" - $SALT_DEP_URL = "https://repo.saltproject.io/windows/dependencies/32" + $SALT_DEP_URL = "https://github.com/saltstack/salt-windows-deps/raw/refs/heads/main/ssm/32/" } #------------------------------------------------------------------------------- diff --git a/requirements/constraints.txt b/requirements/constraints.txt index d38a53d3101..cb905d01fe5 100644 --- a/requirements/constraints.txt +++ b/requirements/constraints.txt @@ -1,3 +1,4 @@ setuptools >= 65.6.3,< 69.0 setuptools-scm < 8.0.0 -pip >= 23.3,< 24.0 +pip >= 23.3,< 24.0 ; python_version < '3.12' +pip >24 ; python_version >= '3.12' diff --git a/salt/modules/archive.py b/salt/modules/archive.py index 9651cc406d8..066ed8d3c71 100644 --- a/salt/modules/archive.py +++ b/salt/modules/archive.py @@ -834,18 +834,19 @@ def zip_(zip_file, sources, template=None, cwd=None, runas=None, zip64=False): if runas: os.seteuid(euid) os.setegid(egid) - if exc is not None: - # Wait to raise the exception until euid/egid are restored to avoid - # permission errors in writing to minion log. - if exc == zipfile.LargeZipFile: - raise CommandExecutionError( - "Resulting zip file too large, would require ZIP64 support" - "which has not been enabled. Rerun command with zip64=True" - ) - else: - raise CommandExecutionError( - f"Exception encountered creating zipfile: {exc}" - ) + if "exc" in vars() or "exc" in globals(): + if exc is not None: + # Wait to raise the exception until euid/egid are restored to avoid + # permission errors in writing to minion log. + if exc == zipfile.LargeZipFile: + raise CommandExecutionError( + "Resulting zip file too large, would require ZIP64 support" + "which has not been enabled. Rerun command with zip64=True" + ) + else: + raise CommandExecutionError( + f"Exception encountered creating zipfile: {exc}" + ) return archived_files diff --git a/salt/modules/cmdmod.py b/salt/modules/cmdmod.py index e708c10c0b0..fe1d4412d00 100644 --- a/salt/modules/cmdmod.py +++ b/salt/modules/cmdmod.py @@ -2937,8 +2937,11 @@ def script( os.chmod(path, 320) os.chown(path, __salt__["file.user_to_uid"](runas), -1) - if salt.utils.platform.is_windows() and shell.lower() != "powershell": - cmd_path = _cmd_quote(path, escape=False) + if salt.utils.platform.is_windows(): + if shell.lower() not in ["powershell", "pwsh"]: + cmd_path = _cmd_quote(path, escape=False) + else: + cmd_path = path else: cmd_path = _cmd_quote(path) diff --git a/salt/modules/localemod.py b/salt/modules/localemod.py index e8cd9063ca3..636f6d0db97 100644 --- a/salt/modules/localemod.py +++ b/salt/modules/localemod.py @@ -5,6 +5,7 @@ Module for managing locales on POSIX-like systems. import logging import os import re +import subprocess import salt.utils.locales import salt.utils.path @@ -67,6 +68,10 @@ def _localectl_status(): """ if salt.utils.path.which("localectl") is None: raise CommandExecutionError('Unable to find "localectl"') + else: + proc = subprocess.run(["localectl"], check=False, capture_output=True) + if b"Failed to connect to bus: No such file or directory" in proc.stderr: + raise CommandExecutionError('Command "localectl" is in a degraded state.') ret = {} locale_ctl_out = (__salt__["cmd.run"]("localectl status") or "").strip() diff --git a/salt/modules/mac_assistive.py b/salt/modules/mac_assistive.py index 7a81fe87a5b..c729fb5bd56 100644 --- a/salt/modules/mac_assistive.py +++ b/salt/modules/mac_assistive.py @@ -186,6 +186,7 @@ class TccDB: self.connection = None self.ge_mojave_and_catalina = False self.ge_bigsur_and_later = False + self.ge_sonoma_and_later = False def _check_table_digest(self): # This logic comes from https://github.com/jacobsalmela/tccutil which is @@ -201,6 +202,8 @@ class TccDB: elif digest in ("3d1c2a0e97", "cef70648de"): # BigSur and later self.ge_bigsur_and_later = True + elif digest in ("34abf99d20",): + self.ge_sonoma_and_later = True else: raise CommandExecutionError( f"TCC Database structure unknown for digest '{digest}'" @@ -309,10 +312,56 @@ class TccDB: (app_id, client_type, auth_value), ) self.connection.commit() + elif self.ge_sonoma_and_later: + # CREATE TABLE access ( + # service TEXT NOT NULL, + # client TEXT NOT NULL, + # client_type INTEGER NOT NULL, + # auth_value INTEGER NOT NULL, + # auth_reason INTEGER NOT NULL, + # auth_version INTEGER NOT NULL, + # csreq BLOB, + # policy_id INTEGER, + # indirect_object_identifier_type INTEGER, + # indirect_object_identifier TEXT NOT NULL DEFAULT 'UNUSED', + # indirect_object_code_identity BLOB, + # flags INTEGER, + # last_modified INTEGER NOT NULL DEFAULT (CAST(strftime('%s','now') AS INTEGER)), + # pid INTEGER, + # pid_version INTEGER, + # boot_uuid TEXT NOT NULL DEFAULT 'UNUSED', + # last_reminded INTEGER NOT NULL DEFAULT (CAST(strftime('%s','now') AS INTEGER)), + # PRIMARY KEY (service, client, client_type, indirect_object_identifier), + # FOREIGN KEY (policy_id) + self.connection.execute( + """ + INSERT or REPLACE INTO access VALUES( + 'kTCCServiceAccessibility', + ?, + ?, + ?, + 4, + 1, + NULL, + NULL, + NULL, + 'UNUSED', + NULL, + 0, + 0, + 0, + 0, + 'UNUSED', + ? + ) + """, + (app_id, client_type, auth_value, time.time()), + ) + self.connection.commit() return True def enabled(self, app_id): - if self.ge_bigsur_and_later: + if self.ge_bigsur_and_later or self.ge_sonoma_and_later: column = "auth_value" elif self.ge_mojave_and_catalina: column = "allowed" @@ -328,7 +377,7 @@ class TccDB: def enable(self, app_id): if not self.installed(app_id): return False - if self.ge_bigsur_and_later: + if self.ge_bigsur_and_later or self.ge_sonoma_and_later: column = "auth_value" elif self.ge_mojave_and_catalina: column = "allowed" @@ -344,7 +393,7 @@ class TccDB: def disable(self, app_id): if not self.installed(app_id): return False - if self.ge_bigsur_and_later: + if self.ge_bigsur_and_later or self.ge_sonoma_and_later: column = "auth_value" elif self.ge_mojave_and_catalina: column = "allowed" diff --git a/salt/modules/saltutil.py b/salt/modules/saltutil.py index 00344d70083..bd01b82935e 100644 --- a/salt/modules/saltutil.py +++ b/salt/modules/saltutil.py @@ -126,8 +126,8 @@ def _sync(form, saltenv=None, extmod_whitelist=None, extmod_blacklist=None): def update(version=None): """ Update the salt minion from the URL defined in opts['update_url'] - VMware, Inc provides the latest builds here: - update_url: https://repo.saltproject.io/windows/ + Broadcom, Inc provides the latest builds here: + update_url: https://packages.broadcom.com/artifactory/saltproject-generic/windows/ Be aware that as of 2014-8-11 there's a bug in esky such that only the latest version available in the update_url can be downloaded and installed. diff --git a/salt/modules/system.py b/salt/modules/system.py index 0765c9506f7..059c4c26ba8 100644 --- a/salt/modules/system.py +++ b/salt/modules/system.py @@ -12,6 +12,7 @@ Support for reboot, shutdown, etc on POSIX-like systems. with ``salt`` will work as expected. """ +import logging import os.path import re from datetime import datetime, timedelta, tzinfo @@ -22,6 +23,8 @@ import salt.utils.platform from salt.exceptions import CommandExecutionError, SaltInvocationError from salt.utils.decorators import depends +log = logging.getLogger(__name__) + __virtualname__ = "system" @@ -202,10 +205,10 @@ def _swclock_to_hwclock(): """ res = __salt__["cmd.run_all"](["hwclock", "--systohc"], python_shell=False) if res["retcode"] != 0: - msg = "hwclock failed to set hardware clock from software clock: {}".format( - res["stderr"] + log.warn( + "hwclock failed to set hardware clock from software clock: %s", + res["stderr"], ) - raise CommandExecutionError(msg) return True diff --git a/salt/modules/tls.py b/salt/modules/tls.py index 2cc3c09119a..f85370cc902 100644 --- a/salt/modules/tls.py +++ b/salt/modules/tls.py @@ -1982,7 +1982,7 @@ if __name__ == "__main__": L="Centerville", O="SaltStack", OU=None, - emailAddress="test_system@saltstack.org", + emailAddress="test_system@saltproject.io", ) create_ca_signed_cert("koji", "test_system") create_pkcs12("koji", "test_system", passphrase="test") diff --git a/salt/pillar/pillar_ldap.py b/salt/pillar/pillar_ldap.py index 9649194ad08..2c5eab301b8 100644 --- a/salt/pillar/pillar_ldap.py +++ b/salt/pillar/pillar_ldap.py @@ -15,7 +15,7 @@ Configuring the LDAP ext_pillar =============================== The basic configuration is part of the `master configuration -`_. +<_master-configuration-ext-pillar>`_. .. code-block:: yaml diff --git a/salt/renderers/stateconf.py b/salt/renderers/stateconf.py index d487f2d4e67..cad4dd387a5 100644 --- a/salt/renderers/stateconf.py +++ b/salt/renderers/stateconf.py @@ -6,7 +6,7 @@ A flexible renderer that takes a templating engine and a data format :platform: all """ -# See http://docs.saltstack.org/en/latest/ref/renderers/all/salt.renderers.stateconf.html +# See http://docs.saltproject.io/en/latest/ref/renderers/all/salt.renderers.stateconf.html # for a guide to using this module. # # FIXME: I really need to review and simplify this renderer, it's getting out of hand! diff --git a/salt/roster/range.py b/salt/roster/range.py index 3f039dcef42..0633d56e389 100644 --- a/salt/roster/range.py +++ b/salt/roster/range.py @@ -24,7 +24,7 @@ try: HAS_RANGE = True except ImportError: - log.error("Unable to load range library") + log.warning("Unable to load range library") # pylint: enable=import-error diff --git a/salt/runners/manage.py b/salt/runners/manage.py index 65b3455f53d..c2c549fde01 100644 --- a/salt/runners/manage.py +++ b/salt/runners/manage.py @@ -769,7 +769,7 @@ def bootstrap_psexec( installer_url URL of minion installer executable. Defaults to the latest version from - https://repo.saltproject.io/windows/ + https://packages.broadcom.com/artifactory/saltproject-generic/windows/ username Optional user name for login on remote computer. @@ -787,6 +787,9 @@ def bootstrap_psexec( salt-run manage.bootstrap_psexec hosts='host1,host2' installer_url='http://exampledomain/salt-installer.exe' """ + # TODO: Need to make this gets the latest version from the new repo location + # TODO: Similar to tests/support/win_installer.py + # TODO: Maybe need to move that ^^^^ to a salt util if not installer_url: base_url = "https://repo.saltproject.io/windows/" source = urllib.request.urlopen(base_url).read() diff --git a/salt/states/pkgrepo.py b/salt/states/pkgrepo.py index 35b8d3896b8..f547c33522b 100644 --- a/salt/states/pkgrepo.py +++ b/salt/states/pkgrepo.py @@ -99,17 +99,17 @@ Using ``aptkey: False`` with ``key_url`` example: .. code-block:: yaml - deb [signed-by=/etc/apt/keyrings/salt-archive-keyring.gpg arch=amd64] https://repo.saltproject.io/py3/ubuntu/18.04/amd64/latest bionic main: + deb [signed-by=/etc/apt/keyrings/salt-archive-keyring.gpg arch=amd64] https://packages.broadcom.com/artifactory/saltproject-deb/ bionic main: pkgrepo.managed: - file: /etc/apt/sources.list.d/salt.list - - key_url: https://repo.saltproject.io/py3/ubuntu/18.04/amd64/latest/salt-archive-keyring.gpg + - key_url: https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public - aptkey: False Using ``aptkey: False`` with ``keyserver`` and ``keyid``: .. code-block:: yaml - deb [signed-by=/etc/apt/keyrings/salt-archive-keyring.gpg arch=amd64] https://repo.saltproject.io/py3/ubuntu/18.04/amd64/latest bionic main: + deb [signed-by=/etc/apt/keyrings/salt-archive-keyring.gpg arch=amd64] https://packages.broadcom.com/artifactory/saltproject-deb/ bionic main: pkgrepo.managed: - file: /etc/apt/sources.list.d/salt.list - keyserver: keyserver.ubuntu.com diff --git a/salt/utils/systemd.py b/salt/utils/systemd.py index 9b079ade0a0..df7509cd437 100644 --- a/salt/utils/systemd.py +++ b/salt/utils/systemd.py @@ -76,6 +76,32 @@ def offline(context=None): return ret +def status(context=None): + """Return True if systemd status succeeds. When False, the system may have + been booted with systemd but systemd is in a degraded state. + + .. versionadded:: 3006.0 + """ + contextkey = "salt.utils.systemd.status" + if isinstance(context, (dict, salt.loader.context.NamedLoaderContext)): + # Can't put this if block on the same line as the above if block, + # because it will break the elif below. + if contextkey in context: + return context[contextkey] + elif context is not None: + raise SaltInvocationError("context must be a dictionary if passed") + proc = subprocess.run( + ["systemctl", "status"], + check=False, + capture_output=True, + ) + ret = ( + b"Failed to get D-Bus connection: No such file or directory" not in proc.stderr + ) + context[contextkey] = ret + return ret + + def version(context=None): """ Attempts to run systemctl --version. Returns None if unable to determine @@ -123,7 +149,10 @@ def has_scope(context=None): _sd_version = version(context) if _sd_version is None: return False - return _sd_version >= 205 + if status(context): + return _sd_version >= 205 + else: + return False def pid_to_service(pid): @@ -143,7 +172,10 @@ def _pid_to_service_systemctl(pid): systemd_cmd = ["systemctl", "--output", "json", "status", str(pid)] try: systemd_output = subprocess.run( - systemd_cmd, check=True, text=True, capture_output=True + systemd_cmd, + check=True, + text=True, + capture_output=True, ) status_json = salt.utils.json.find_json(systemd_output.stdout) except (ValueError, subprocess.CalledProcessError): diff --git a/tests/conftest.py b/tests/conftest.py index 1d283a8bbc9..edf27fc5c20 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -16,6 +16,7 @@ import _pytest.logging import _pytest.skipping import more_itertools import pytest +import pytestskipmarkers import salt import salt._logging @@ -426,7 +427,8 @@ def pytest_itemcollected(item): pytest.fail( "The test {!r} appears to be written for pytest but it's not under" " {!r}. Please move it there.".format( - item.nodeid, str(PYTESTS_DIR.relative_to(CODE_DIR)), pytrace=False + item.nodeid, + str(PYTESTS_DIR.relative_to(CODE_DIR)), ) ) @@ -801,6 +803,12 @@ def salt_factories_default_root_dir(salt_factories_default_root_dir): dictionary, then that's the value used, and not the one returned by this fixture. """ + if os.environ.get("CI") and pytestskipmarkers.utils.platform.is_windows(): + tempdir = pathlib.Path( + os.environ.get("RUNNER_TEMP", r"C:\Windows\Temp") + ).resolve() + return tempdir / "stsuite" + return salt_factories_default_root_dir / "stsuite" diff --git a/tests/filename_map.yml b/tests/filename_map.yml index 810eac62fb2..594d9da94ac 100644 --- a/tests/filename_map.yml +++ b/tests/filename_map.yml @@ -155,7 +155,7 @@ salt/engines/*: - pytests.unit.engines.test_engines salt/grains/*: - - integration.grains.test_custom + - pytests.integration.grains.test_custom salt/matchers/*: - integration.states.test_match diff --git a/tests/integration/grains/test_custom.py b/tests/integration/grains/test_custom.py deleted file mode 100644 index d99e88d1902..00000000000 --- a/tests/integration/grains/test_custom.py +++ /dev/null @@ -1,23 +0,0 @@ -""" -Test the core grains -""" - -import pytest - -from tests.support.case import ModuleCase - - -@pytest.mark.windows_whitelisted -class TestGrainsCore(ModuleCase): - """ - Test the core grains grains - """ - - @pytest.mark.slow_test - def test_grains_passed_to_custom_grain(self): - """ - test if current grains are passed to grains module functions that have a grains argument - """ - self.assertEqual( - self.run_function("grains.get", ["custom_grain_test"]), "itworked" - ) diff --git a/tests/integration/modules/test_cmdmod.py b/tests/integration/modules/test_cmdmod.py index 7d76aafcb74..7a1c04c6216 100644 --- a/tests/integration/modules/test_cmdmod.py +++ b/tests/integration/modules/test_cmdmod.py @@ -225,6 +225,7 @@ class CMDModuleTest(ModuleCase): ) @pytest.mark.slow_test + @pytest.mark.skip_on_windows def test_script(self): """ cmd.script @@ -235,6 +236,7 @@ class CMDModuleTest(ModuleCase): self.assertEqual(ret["stdout"], args) @pytest.mark.slow_test + @pytest.mark.skip_on_windows def test_script_query_string(self): """ cmd.script @@ -245,6 +247,7 @@ class CMDModuleTest(ModuleCase): self.assertEqual(ret["stdout"], args) @pytest.mark.slow_test + @pytest.mark.skip_on_windows def test_script_retcode(self): """ cmd.script_retcode @@ -254,6 +257,7 @@ class CMDModuleTest(ModuleCase): self.assertEqual(ret, 0) @pytest.mark.slow_test + @pytest.mark.skip_on_windows def test_script_cwd(self): """ cmd.script with cwd @@ -267,6 +271,7 @@ class CMDModuleTest(ModuleCase): self.assertEqual(ret["stdout"], args) @pytest.mark.slow_test + @pytest.mark.skip_on_windows def test_script_cwd_with_space(self): """ cmd.script with cwd @@ -515,7 +520,7 @@ class CMDModuleTest(ModuleCase): """ with self._ensure_user_exists(self.runas_usr): out = self.run_function( - "cmd.run", ["env"], runas=self.runas_usr + "cmd.run", ["env"], runas=self.runas_usr, cwd="/tmp" ).splitlines() self.assertIn(f"USER={self.runas_usr}", out) diff --git a/tests/integration/modules/test_cp.py b/tests/integration/modules/test_cp.py index ef88590a9d5..31cf8a18144 100644 --- a/tests/integration/modules/test_cp.py +++ b/tests/integration/modules/test_cp.py @@ -231,12 +231,15 @@ class CPModuleTest(ModuleCase): """ cp.get_url with https:// source given """ - self.run_function("cp.get_url", ["https://repo.saltproject.io/index.html", tgt]) + self.run_function( + "cp.get_url", + ["https://packages.broadcom.com/artifactory/saltproject-generic/", tgt], + ) with salt.utils.files.fopen(tgt, "r") as instructions: data = salt.utils.stringutils.to_unicode(instructions.read()) - self.assertIn("Salt Project", data) - self.assertIn("Package", data) - self.assertIn("Repo", data) + self.assertIn("Index of saltproject", data) + self.assertIn("onedir", data) + self.assertIn("Artifactory Online Server", data) self.assertNotIn("AYBABTU", data) @pytest.mark.slow_test @@ -245,14 +248,15 @@ class CPModuleTest(ModuleCase): cp.get_url with https:// source given and destination omitted. """ ret = self.run_function( - "cp.get_url", ["https://repo.saltproject.io/index.html"] + "cp.get_url", + ["https://packages.broadcom.com/artifactory/saltproject-generic/"], ) with salt.utils.files.fopen(ret, "r") as instructions: data = salt.utils.stringutils.to_unicode(instructions.read()) - self.assertIn("Salt Project", data) - self.assertIn("Package", data) - self.assertIn("Repo", data) + self.assertIn("Index of saltproject", data) + self.assertIn("onedir", data) + self.assertIn("Artifactory Online Server", data) self.assertNotIn("AYBABTU", data) @pytest.mark.slow_test @@ -266,16 +270,19 @@ class CPModuleTest(ModuleCase): tgt = None while time.time() - start <= timeout: ret = self.run_function( - "cp.get_url", ["https://repo.saltproject.io/index.html", tgt] + "cp.get_url", + ["https://packages.broadcom.com/artifactory/saltproject-generic/", tgt], ) if ret.find("HTTP 599") == -1: break time.sleep(sleep) if ret.find("HTTP 599") != -1: - raise Exception("https://repo.saltproject.io/index.html returned 599 error") - self.assertIn("Salt Project", ret) - self.assertIn("Package", ret) - self.assertIn("Repo", ret) + raise Exception( + "https://packages.broadcom.com/artifactory/saltproject-generic/ returned 599 error" + ) + self.assertIn("Index of saltproject", ret) + self.assertIn("onedir", ret) + self.assertIn("Artifactory Online Server", ret) self.assertNotIn("AYBABTU", ret) @pytest.mark.slow_test @@ -344,11 +351,11 @@ class CPModuleTest(ModuleCase): """ cp.get_file_str with https:// source given """ - src = "https://repo.saltproject.io/index.html" + src = "https://packages.broadcom.com/artifactory/saltproject-generic/" ret = self.run_function("cp.get_file_str", [src]) - self.assertIn("Salt Project", ret) - self.assertIn("Package", ret) - self.assertIn("Repo", ret) + self.assertIn("Index of saltproject", ret) + self.assertIn("onedir", ret) + self.assertIn("Artifactory Online Server", ret) self.assertNotIn("AYBABTU", ret) @pytest.mark.slow_test diff --git a/tests/integration/modules/test_file.py b/tests/integration/modules/test_file.py index 98ad9f3af45..1d352778c34 100644 --- a/tests/integration/modules/test_file.py +++ b/tests/integration/modules/test_file.py @@ -7,6 +7,7 @@ import pytest import salt.utils.files import salt.utils.platform +import salt.utils.stringutils from tests.support.case import ModuleCase from tests.support.helpers import requires_system_grains from tests.support.runtests import RUNTIME_VARS @@ -199,7 +200,7 @@ class FileModuleTest(ModuleCase): assert ret["retcode"] == 0, repr(ret) with salt.utils.files.fopen(src_file) as fp: self.assertEqual( - salt.utils.stringutils.to_unicode(fp.read()), "Hello world\n" + salt.utils.stringutils.to_unicode(fp.read()), f"Hello world{os.linesep}" ) def test_remove_file(self): diff --git a/tests/integration/modules/test_gem.py b/tests/integration/modules/test_gem.py index e8c6b031c3b..7ddb0a12a1d 100644 --- a/tests/integration/modules/test_gem.py +++ b/tests/integration/modules/test_gem.py @@ -5,6 +5,7 @@ Integration tests for Ruby Gem module import pytest from tornado.httpclient import HTTPClient +import salt.utils.platform from tests.support.case import ModuleCase @@ -31,6 +32,7 @@ class GemModuleTest(ModuleCase): if check_status() is False: self.skipTest("External resource 'https://rubygems.org' is not available") + self.GEM_BIN = "gem.cmd" if salt.utils.platform.is_windows() else "gem" self.GEM = "tidy" self.GEM_VER = "1.1.2" self.OLD_GEM = "brass" @@ -54,6 +56,11 @@ class GemModuleTest(ModuleCase): self.addCleanup(uninstall_gem) + def run_function(self, function, *args, **kwargs): + """Override run_function to use the gem binary""" + kwargs["gem_bin"] = self.GEM_BIN + return super().run_function(function, *args, **kwargs) + @pytest.mark.slow_test def test_install_uninstall(self): """ diff --git a/tests/integration/modules/test_linux_shadow.py b/tests/integration/modules/test_linux_shadow.py index c922cb2f618..e65b73b3540 100644 --- a/tests/integration/modules/test_linux_shadow.py +++ b/tests/integration/modules/test_linux_shadow.py @@ -52,6 +52,7 @@ class ShadowModuleTest(ModuleCase): @pytest.mark.destructive_test @pytest.mark.slow_test + @pytest.mark.skip_if_binaries_missing("passwd") def test_del_password(self): """ Test shadow.del_password @@ -61,8 +62,9 @@ class ShadowModuleTest(ModuleCase): # Correct Functionality self.assertTrue(self.run_function("shadow.del_password", [self._test_user])) - self.assertEqual( - self.run_function("shadow.info", [self._test_user])["passwd"], "" + self.assertIn( + self.run_function("shadow.info", [self._test_user])["passwd"], + ["", "!", "!!"], ) # User does not exist diff --git a/tests/integration/modules/test_localemod.py b/tests/integration/modules/test_localemod.py index 7130895bafb..5a59e84e49a 100644 --- a/tests/integration/modules/test_localemod.py +++ b/tests/integration/modules/test_localemod.py @@ -1,13 +1,27 @@ +import subprocess + import pytest +import salt.utils.platform from tests.support.case import ModuleCase +def _check_systemctl(): + if not hasattr(_check_systemctl, "memo"): + if not salt.utils.platform.is_linux(): + _check_systemctl.memo = False + else: + proc = subprocess.run(["localectl"], capture_output=True, check=False) + _check_systemctl.memo = b"No such file or directory" in proc.stderr + return _check_systemctl.memo + + @pytest.mark.skip_on_windows(reason="minion is windows") @pytest.mark.skip_on_darwin(reason="locale method is not supported on mac") @pytest.mark.skip_on_freebsd( reason="locale method is supported only within login classes or environment variables" ) +@pytest.mark.skipif(_check_systemctl(), reason="localectl degraded") @pytest.mark.requires_salt_modules("locale") @pytest.mark.windows_whitelisted class LocaleModuleTest(ModuleCase): @@ -50,6 +64,7 @@ class LocaleModuleTest(ModuleCase): @pytest.mark.destructive_test @pytest.mark.slow_test + @pytest.mark.skipif(_check_systemctl(), reason="systemd degraded") def test_set_locale(self): original_locale = self.run_function("locale.get_locale") locale_to_set = self._find_new_locale(original_locale) diff --git a/tests/integration/modules/test_timezone.py b/tests/integration/modules/test_timezone.py index 3af9bf628ec..c9894c61089 100644 --- a/tests/integration/modules/test_timezone.py +++ b/tests/integration/modules/test_timezone.py @@ -4,8 +4,11 @@ Integration tests for timezone module Linux and Solaris are supported """ +import subprocess + import pytest +import salt.utils.platform from tests.support.case import ModuleCase try: @@ -16,6 +19,17 @@ except ImportError: HAS_TZLOCAL = False +def _check_systemctl(): + if not hasattr(_check_systemctl, "memo"): + if not salt.utils.platform.is_linux(): + _check_systemctl.memo = False + else: + proc = subprocess.run(["timedatectl"], capture_output=True, check=False) + _check_systemctl.memo = b"No such file or directory" in proc.stderr + return _check_systemctl.memo + + +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") class TimezoneLinuxModuleTest(ModuleCase): def setUp(self): """ @@ -32,6 +46,7 @@ class TimezoneLinuxModuleTest(ModuleCase): self.assertIn(ret, timescale) +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") class TimezoneSolarisModuleTest(ModuleCase): def setUp(self): """ diff --git a/tests/pytests/functional/cli/test_salt.py b/tests/pytests/functional/cli/test_salt.py index c91655f8aff..8de8cc9d374 100644 --- a/tests/pytests/functional/cli/test_salt.py +++ b/tests/pytests/functional/cli/test_salt.py @@ -99,9 +99,7 @@ def test_help_log(salt_cli): """ ret = salt_cli.run("--help") count = 0 - stdout = ret.stdout.split("\n") - for line in stdout: - if "sensitive data:" in line: - count += 1 - assert line.strip() == "sensitive data: all, debug, garbage, profile, trace" - assert count == 2 + # This can be dependent on COLUMNS environment variable + assert "sensitive data: all, debug, garbage, profile, trace" in " ".join( + ret.stdout.split() + ) diff --git a/tests/pytests/functional/loader/test_loader.py b/tests/pytests/functional/loader/test_loader.py index f34ca2239cf..2ce19d2a2b6 100644 --- a/tests/pytests/functional/loader/test_loader.py +++ b/tests/pytests/functional/loader/test_loader.py @@ -23,7 +23,9 @@ def salt_extension(tmp_path_factory): @pytest.fixture def venv(tmp_path): - with SaltVirtualEnv(venv_dir=tmp_path / ".venv") as _venv: + with SaltVirtualEnv( + venv_dir=tmp_path / ".venv", system_site_packages=True + ) as _venv: yield _venv diff --git a/tests/pytests/functional/modules/cmd/test_script.py b/tests/pytests/functional/modules/cmd/test_script.py index c272835f0bf..dcdd632fa70 100644 --- a/tests/pytests/functional/modules/cmd/test_script.py +++ b/tests/pytests/functional/modules/cmd/test_script.py @@ -57,7 +57,7 @@ def test_windows_script_args_powershell(cmd, shell, issue_56195): ) script = "salt://issue-56195/test.ps1" - ret = cmd.script(source=script, args=args, shell="powershell", saltenv="base") + ret = cmd.script(source=script, args=args, shell=shell, saltenv="base") assert ret["stdout"] == password @@ -78,7 +78,7 @@ def test_windows_script_args_powershell_runas(cmd, shell, account, issue_56195): ret = cmd.script( source=script, args=args, - shell="powershell", + shell=shell, saltenv="base", runas=account.username, password=account.password, diff --git a/tests/pytests/functional/modules/state/test_jinja_filters.py b/tests/pytests/functional/modules/state/test_jinja_filters.py index 7a72ba7f530..0acad0aad3d 100644 --- a/tests/pytests/functional/modules/state/test_jinja_filters.py +++ b/tests/pytests/functional/modules/state/test_jinja_filters.py @@ -385,8 +385,10 @@ def _filter_id(value): sls=r""" {% if grains['os'] == 'Windows' %} {% set result = 'c:\Windows\System32\cmd.exe' | is_bin_file() %} + {% elif grains['os_family'] == 'Debian' %} + {% set result = '/usr/bin/file' | is_bin_file() %} {% else %} - {% set result = '/bin/ls' | is_bin_file() %} + {% set result = '/bin/file' | is_bin_file() %} {% endif %} test: module.run: diff --git a/tests/pytests/functional/modules/test_aptpkg.py b/tests/pytests/functional/modules/test_aptpkg.py index 6e8f08566c4..612ee7717db 100644 --- a/tests/pytests/functional/modules/test_aptpkg.py +++ b/tests/pytests/functional/modules/test_aptpkg.py @@ -100,6 +100,9 @@ def configure_loader_modules(minion_opts, grains): @pytest.fixture() def revert_repo_file(tmp_path): + sources = pathlib.Path("/etc/apt/sources.list") + if not sources.exists(): + sources.touch() try: repo_file = pathlib.Path("/etc") / "apt" / "sources.list" backup = tmp_path / "repo_backup" @@ -117,7 +120,7 @@ def build_repo_file(): source_path = "/etc/apt/sources.list.d/source_test_list.list" try: test_repos = [ - "deb [signed-by=/etc/apt/keyrings/salt-archive-keyring-2023.gpg arch=amd64] https://repo.saltproject.io/salt/py3/ubuntu/22.04/amd64/latest jammy main", + "deb [signed-by=/etc/apt/keyrings/salt-archive-keyring-2023.gpg arch=amd64] https://packages.broadcom.com/artifactory/saltproject-deb/ jammy main", "deb http://dist.list stable/all/", ] with salt.utils.files.fopen(source_path, "w+") as fp: diff --git a/tests/pytests/functional/modules/test_network.py b/tests/pytests/functional/modules/test_network.py index ab6aef879e5..a05006bccd7 100644 --- a/tests/pytests/functional/modules/test_network.py +++ b/tests/pytests/functional/modules/test_network.py @@ -4,6 +4,8 @@ Validate network module import pytest +import salt.utils.platform + pytestmark = [ pytest.mark.windows_whitelisted, pytest.mark.requires_network, @@ -12,7 +14,7 @@ pytestmark = [ @pytest.fixture(scope="module") def url(modules): - return "rewrite.amazon.com" + return "ns.google.com" @pytest.fixture(scope="module") @@ -26,9 +28,18 @@ def test_network_ping(network, url): network.ping """ ret = network.ping(url) - exp_out = ["ping", url, "ms", "time"] - for out in exp_out: - assert out in ret.lower() + + # Github Runners are on Azure, which doesn't allow ping + packet_loss = "100% packet loss" + if salt.utils.platform.is_windows(): + packet_loss = "100% loss" + + if packet_loss not in ret.lower(): + exp_out = ["ping", url, "ms", "time"] + for out in exp_out: + assert out in ret.lower() + else: + assert packet_loss in ret.lower() @pytest.mark.skip_on_darwin(reason="Not supported on macOS") diff --git a/tests/pytests/functional/modules/test_pkg.py b/tests/pytests/functional/modules/test_pkg.py index e2380c2932d..7bd5fb4d389 100644 --- a/tests/pytests/functional/modules/test_pkg.py +++ b/tests/pytests/functional/modules/test_pkg.py @@ -135,12 +135,8 @@ def test_mod_del_repo(grains, modules): elif grains["os_family"] == "RedHat": repo = "saltstack" name = "SaltStack repo for RHEL/CentOS {}".format(grains["osmajorrelease"]) - baseurl = "https://repo.saltproject.io/py3/redhat/{}/x86_64/latest/".format( - grains["osmajorrelease"] - ) - gpgkey = "https://repo.saltproject.io/py3/redhat/{}/x86_64/latest/SALTSTACK-GPG-KEY.pub".format( - grains["osmajorrelease"] - ) + baseurl = "https://packages.broadcom.com/artifactory/saltproject-rpm/" + gpgkey = "https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public" gpgcheck = 1 enabled = 1 ret = modules.pkg.mod_repo( diff --git a/tests/pytests/functional/modules/test_service.py b/tests/pytests/functional/modules/test_service.py index a54ff1fbe6c..8384c9c5b20 100644 --- a/tests/pytests/functional/modules/test_service.py +++ b/tests/pytests/functional/modules/test_service.py @@ -1,4 +1,5 @@ import os +import subprocess import pytest @@ -14,6 +15,19 @@ pytestmark = [ ] +def _check_systemctl(): + if not hasattr(_check_systemctl, "memo"): + if not salt.utils.platform.is_linux(): + _check_systemctl.memo = False + else: + proc = subprocess.run(["systemctl"], capture_output=True, check=False) + _check_systemctl.memo = ( + b"Failed to get D-Bus connection: No such file or directory" + in proc.stderr + ) + return _check_systemctl.memo + + @pytest.fixture def service_name(grains, modules): # For local testing purposes @@ -68,6 +82,7 @@ def setup_service(service_name, modules): modules.service.disable(service_name) +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") def test_service_status_running(modules, service_name): """ test service.status execution module @@ -88,6 +103,7 @@ def test_service_status_dead(modules, service_name): assert not check_service +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") def test_service_restart(modules, service_name): """ test service.restart @@ -95,6 +111,7 @@ def test_service_restart(modules, service_name): assert modules.service.stop(service_name) +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") def test_service_enable(modules, service_name): """ test service.get_enabled and service.enable module @@ -106,6 +123,7 @@ def test_service_enable(modules, service_name): assert service_name in modules.service.get_enabled() +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") def test_service_disable(modules, service_name): """ test service.get_disabled and service.disable module diff --git a/tests/pytests/functional/modules/test_system.py b/tests/pytests/functional/modules/test_system.py index 5944507c1ee..8ffb048fd58 100644 --- a/tests/pytests/functional/modules/test_system.py +++ b/tests/pytests/functional/modules/test_system.py @@ -20,6 +20,21 @@ pytestmark = [ log = logging.getLogger(__name__) +def check_hostnamectl(): + if not hasattr(check_hostnamectl, "memo"): + if not salt.utils.platform.is_linux(): + check_hostnamectl.memo = False + else: + proc = subprocess.run(["hostnamectl"], capture_output=True, check=False) + check_hostnamectl.memo = ( + b"Failed to connect to bus: No such file or directory" in proc.stderr + or b"Failed to create bus connection: No such file or directory" + in proc.stderr + or b"Failed to query system properties" in proc.stderr + ) + return check_hostnamectl.memo + + @pytest.fixture(scope="module") def cmdmod(modules): return modules.cmd @@ -52,6 +67,7 @@ def fmt_str(): @pytest.fixture(scope="function") def setup_teardown_vars(file, service, system): + _systemd_timesyncd_available_ = None _orig_time = datetime.datetime.utcnow() if os.path.isfile("/etc/machine-info"): @@ -183,6 +199,7 @@ def _test_hwclock_sync(system, hwclock_has_compare): log.error("Failed to check hwclock sync") +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_get_system_date_time(setup_teardown_vars, system, fmt_str): """ Test we are able to get the correct time @@ -194,6 +211,7 @@ def test_get_system_date_time(setup_teardown_vars, system, fmt_str): assert _same_times(t1, t2, seconds_diff=3), msg +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_get_system_date_time_utc(setup_teardown_vars, system, fmt_str): """ Test we are able to get the correct time with utc @@ -205,9 +223,9 @@ def test_get_system_date_time_utc(setup_teardown_vars, system, fmt_str): assert _same_times(t1, t2, seconds_diff=3), msg -@pytest.mark.skip_on_env("ON_DOCKER", eq="1") @pytest.mark.destructive_test @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_set_system_date_time(setup_teardown_vars, system, hwclock_has_compare): """ Test changing the system clock. We are only able to set it up to a @@ -226,9 +244,9 @@ def test_set_system_date_time(setup_teardown_vars, system, hwclock_has_compare): _test_hwclock_sync(system, hwclock_has_compare) -@pytest.mark.skip_on_env("ON_DOCKER", eq="1") @pytest.mark.destructive_test @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_set_system_date_time_utc(setup_teardown_vars, system, hwclock_has_compare): """ Test changing the system clock. We are only able to set it up to a @@ -247,9 +265,9 @@ def test_set_system_date_time_utc(setup_teardown_vars, system, hwclock_has_compa _test_hwclock_sync(system, hwclock_has_compare) -@pytest.mark.skip_on_env("ON_DOCKER", eq="1") @pytest.mark.destructive_test @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_set_system_date_time_utcoffset_east( setup_teardown_vars, system, hwclock_has_compare ): @@ -271,9 +289,9 @@ def test_set_system_date_time_utcoffset_east( _test_hwclock_sync(system, hwclock_has_compare) -@pytest.mark.skip_on_env("ON_DOCKER", eq="1") @pytest.mark.destructive_test @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_set_system_date_time_utcoffset_west( setup_teardown_vars, system, hwclock_has_compare ): @@ -295,10 +313,10 @@ def test_set_system_date_time_utcoffset_west( _test_hwclock_sync(system, hwclock_has_compare) -@pytest.mark.skip_on_env("ON_DOCKER", eq="1") @pytest.mark.flaky(max_runs=4) @pytest.mark.destructive_test @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_set_system_time(setup_teardown_vars, system, hwclock_has_compare): """ Test setting the system time without adjusting the date. @@ -317,9 +335,9 @@ def test_set_system_time(setup_teardown_vars, system, hwclock_has_compare): _test_hwclock_sync(system, hwclock_has_compare) -@pytest.mark.skip_on_env("ON_DOCKER", eq="1") @pytest.mark.destructive_test @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_set_system_date(setup_teardown_vars, system, hwclock_has_compare): """ Test setting the system date without adjusting the time. @@ -340,6 +358,7 @@ def test_set_system_date(setup_teardown_vars, system, hwclock_has_compare): @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_get_computer_desc(setup_teardown_vars, system, cmdmod): """ Test getting the system hostname @@ -361,6 +380,7 @@ def test_get_computer_desc(setup_teardown_vars, system, cmdmod): @pytest.mark.destructive_test @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_set_computer_desc(setup_teardown_vars, system): """ Test setting the computer description @@ -375,6 +395,7 @@ def test_set_computer_desc(setup_teardown_vars, system): @pytest.mark.destructive_test @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_set_computer_desc_multiline(setup_teardown_vars, system): """ Test setting the computer description with a multiline string with tabs @@ -394,6 +415,7 @@ def test_set_computer_desc_multiline(setup_teardown_vars, system): @pytest.mark.skip_if_not_root +@pytest.mark.skipif(check_hostnamectl(), reason="hostnamctl degraded.") def test_has_hwclock(setup_teardown_vars, system, grains, hwclock_has_compare): """ Verify platform has a settable hardware clock, if possible. diff --git a/tests/pytests/functional/modules/test_win_useradd.py b/tests/pytests/functional/modules/test_win_useradd.py index 5e33ce36bd4..781ec2d776c 100644 --- a/tests/pytests/functional/modules/test_win_useradd.py +++ b/tests/pytests/functional/modules/test_win_useradd.py @@ -223,9 +223,9 @@ def test_list_groups_int(user, account_int): assert ret == ["Users"] -def test_list_users(user): +def test_list_users(user, account_str): ret = user.list_users() - assert "Administrator" in ret + assert account_str.username in ret def test_removegroup_str(user, account_str): diff --git a/tests/pytests/functional/modules/win_file/test_check_perms.py b/tests/pytests/functional/modules/win_file/test_check_perms.py index f2196185904..34a795124e0 100644 --- a/tests/pytests/functional/modules/win_file/test_check_perms.py +++ b/tests/pytests/functional/modules/win_file/test_check_perms.py @@ -3,8 +3,11 @@ Tests for win_file execution module """ import pytest +from saltfactories.utils import random_string +import salt.modules.cmdmod as cmd import salt.modules.win_file as win_file +import salt.modules.win_useradd as win_useradd import salt.utils.win_dacl as win_dacl from salt.exceptions import CommandExecutionError from tests.support.mock import patch @@ -25,9 +28,22 @@ def configure_loader_modules(): }, "__opts__": {"test": False}, }, + win_useradd: { + "__salt__": { + "cmd.run_all": cmd.run_all, + }, + }, } +@pytest.fixture +def temp_account(): + user_name = random_string("test-account-", uppercase=False) + with pytest.helpers.create_account(username=user_name) as account: + win_useradd.addgroup(account.username, "Users") + yield account.username + + @pytest.fixture(scope="function") def test_file(): with pytest.helpers.temp_file("win_file_test.file") as test_file: @@ -184,7 +200,7 @@ def test_check_perms_inheritance_true(test_file): assert result == expected -def test_check_perms_reset_test_true(test_file): +def test_check_perms_reset_test_true(test_file, temp_account): """ Test resetting perms with test=True. This shows minimal changes """ @@ -193,7 +209,7 @@ def test_check_perms_reset_test_true(test_file): # Set some permissions win_dacl.set_permissions( obj_name=str(test_file), - principal="Administrator", + principal=temp_account, permissions="full_control", ) expected = { @@ -204,7 +220,7 @@ def test_check_perms_reset_test_true(test_file): "Users": {"permissions": "read_execute"}, }, "remove_perms": { - "Administrator": { + f"{temp_account}": { "grant": { "applies to": "This folder only", "permissions": "Full control", @@ -228,7 +244,7 @@ def test_check_perms_reset_test_true(test_file): assert result == expected -def test_check_perms_reset(test_file): +def test_check_perms_reset(test_file, temp_account): """ Test resetting perms on a File """ @@ -237,7 +253,7 @@ def test_check_perms_reset(test_file): # Set some permissions win_dacl.set_permissions( obj_name=str(test_file), - principal="Administrator", + principal=temp_account, permissions="full_control", ) expected = { @@ -248,7 +264,7 @@ def test_check_perms_reset(test_file): "Users": {"permissions": "read_execute"}, }, "remove_perms": { - "Administrator": { + f"{temp_account}": { "grant": { "applies to": "This folder only", "permissions": "Full control", diff --git a/tests/pytests/functional/runners/test_winrepo.py b/tests/pytests/functional/runners/test_winrepo.py index f744c2a98dd..c1dbf7ff302 100644 --- a/tests/pytests/functional/runners/test_winrepo.py +++ b/tests/pytests/functional/runners/test_winrepo.py @@ -24,6 +24,7 @@ def configure_loader_modules(minion_opts, tmp_path): @pytest.fixture def winrepo_remotes(minion_opts): remotes = set() + # Legacy repo has been archived as of September 2024 remotes.update(minion_opts.get("winrepo_remotes", [])) remotes.update(minion_opts.get("winrepo_remotes_ng", [])) return remotes diff --git a/tests/pytests/functional/states/chocolatey/test_post_20.py b/tests/pytests/functional/states/chocolatey/test_post_20.py index f0ba71a184c..601db9c5f6c 100644 --- a/tests/pytests/functional/states/chocolatey/test_post_20.py +++ b/tests/pytests/functional/states/chocolatey/test_post_20.py @@ -110,10 +110,10 @@ def vim(chocolatey_mod): @pytest.fixture(scope="function") -def everything(chocolatey_mod): - chocolatey_mod.install(name="everything", version="1.4.1935") +def sudo(chocolatey_mod): + chocolatey_mod.install(name="sudo", version="1.1.2") yield - chocolatey_mod.uninstall(name="everything", force=True) + chocolatey_mod.uninstall(name="sudo", force=True) def test_installed_latest(clean, chocolatey, chocolatey_mod): @@ -129,11 +129,10 @@ def test_installed_version(clean, chocolatey, chocolatey_mod): assert result["vim"]["installed"][0] == "9.0.1672" -def test_installed_version_existing_capitalization( - everything, chocolatey, chocolatey_mod -): - result = chocolatey.installed(name="everything", version="1.4.11024") - expected_changes = {"Everything": {"new": ["1.4.11024"], "old": ["1.4.1935"]}} +# @pytest.mark.skipif(True, reason="Timing out, skipping for now") +def test_installed_version_existing_capitalization(sudo, chocolatey, chocolatey_mod): + result = chocolatey.installed(name="sudo", version="1.1.3") + expected_changes = {"Sudo": {"new": ["1.1.3"], "old": ["1.1.2"]}} assert result["changes"] == expected_changes diff --git a/tests/pytests/functional/states/chocolatey/test_pre_20.py b/tests/pytests/functional/states/chocolatey/test_pre_20.py index e951c1d180b..cfefe13f139 100644 --- a/tests/pytests/functional/states/chocolatey/test_pre_20.py +++ b/tests/pytests/functional/states/chocolatey/test_pre_20.py @@ -110,10 +110,10 @@ def vim(chocolatey_mod): @pytest.fixture(scope="function") -def everything(chocolatey_mod): - chocolatey_mod.install(name="everything", version="1.4.1935") +def sudo(chocolatey_mod): + chocolatey_mod.install(name="sudo", version="1.1.2") yield - chocolatey_mod.uninstall(name="everything", force=True) + chocolatey_mod.uninstall(name="sudo", force=True) def test_installed_latest(clean, chocolatey, chocolatey_mod): @@ -129,11 +129,10 @@ def test_installed_version(clean, chocolatey, chocolatey_mod): assert result["vim"]["installed"][0] == "9.0.1672" -def test_installed_version_existing_capitalization( - everything, chocolatey, chocolatey_mod -): - result = chocolatey.installed(name="everything", version="1.4.11024") - expected_changes = {"Everything": {"new": ["1.4.11024"], "old": ["1.4.1935"]}} +# @pytest.mark.skipif(True, reason="Timing out, skipping for now") +def test_installed_version_existing_capitalization(sudo, chocolatey, chocolatey_mod): + result = chocolatey.installed(name="sudo", version="1.1.3") + expected_changes = {"Sudo": {"new": ["1.1.3"], "old": ["1.1.2"]}} assert result["changes"] == expected_changes diff --git a/tests/pytests/functional/states/file/test__check_directory_win.py b/tests/pytests/functional/states/file/test__check_directory_win.py index 2405050b545..bde28fab064 100644 --- a/tests/pytests/functional/states/file/test__check_directory_win.py +++ b/tests/pytests/functional/states/file/test__check_directory_win.py @@ -2,7 +2,6 @@ import pytest import salt.states.file as file import salt.utils.win_dacl as win_dacl -import salt.utils.win_functions as win_functions pytestmark = [ pytest.mark.windows_whitelisted, @@ -20,14 +19,15 @@ def configure_loader_modules(): @pytest.fixture def temp_path(tmp_path): - # We need to create a directory that doesn't inherit permissions from the test suite + + # Ownership is not inherited but permissions are, so we shouldn't have to + # set ownership. Ownership is determined by the user creating the directory. + # An administrator account will set the owner as the Administrators group. + # A non-administrator account will set the user itself as the owner. + + # Create a directory and set the permissions to make sure they're the only + # ones (reset_perms=True) and not inherited (protected=True) tmp_path.mkdir(parents=True, exist_ok=True) - win_dacl.set_owner(obj_name=str(tmp_path), principal="Administrators") - assert win_dacl.get_owner(obj_name=str(tmp_path)) == "Administrators" - # We don't want the parent test directory to inherit permissions - win_dacl.set_inheritance(obj_name=str(tmp_path), enabled=False) - assert not win_dacl.get_inheritance(obj_name=str(tmp_path)) - # Set these permissions and make sure they're the only ones win_dacl.set_permissions( obj_name=str(tmp_path), principal="Administrators", @@ -47,16 +47,20 @@ def temp_path(tmp_path): } }, } + # Verify perms and inheritance assert win_dacl.get_permissions(obj_name=str(tmp_path)) == perms + assert not win_dacl.get_inheritance(obj_name=str(tmp_path)) - # Now we create a directory for testing that does inherit those permissions from the above, new parent directory + # Now we create a directory for testing that does inherit those permissions + # from the above, new parent directory test_dir = tmp_path / "test_dir" test_dir.mkdir() - current_user = win_functions.get_current_user(with_domain=False) - assert win_dacl.get_owner(obj_name=str(test_dir)) == current_user - # We do want the test directory to inherit permissions from the parent directory + + # We want to make sure inheritance is enabled assert win_dacl.get_inheritance(obj_name=str(test_dir)) - # Make sure the permissions are inherited from the parent + + # We want to make sure the test directory inherited permissions from the + # parent directory perms = { "Inherited": { "Administrators": { diff --git a/tests/pytests/functional/states/file/test_directory.py b/tests/pytests/functional/states/file/test_directory.py index 19cb3f94876..328c3412b70 100644 --- a/tests/pytests/functional/states/file/test_directory.py +++ b/tests/pytests/functional/states/file/test_directory.py @@ -34,11 +34,6 @@ def test_directory_symlink_dry_run(file, tmp_path): Ensure that symlinks are followed when file.directory is run with test=True """ - if IS_WINDOWS and not os.environ.get("GITHUB_ACTIONS_PIPELINE"): - pytest.xfail( - "This test fails when running from Jenkins but not on the GitHub " - "Actions Pipeline" - ) tmp_dir = tmp_path / "pgdata" sym_dir = tmp_path / "pg_data" @@ -57,7 +52,22 @@ def test_directory_symlink_dry_run(file, tmp_path): ret = file.directory( test=True, name=str(sym_dir), follow_symlinks=True, **extra_kwds ) - assert ret.result is True + + expected = True + + if IS_WINDOWS: + # On Windows the result is None because there would have been changes + # made to the directory (making Administrator the Owner) + # https://docs.saltproject.io/en/latest/ref/states/writing.html#return-data + expected = None + + assert ret.result is expected + + +def _kernel_check(lookfor): + with salt.utils.files.fopen("/proc/version") as fp: + versioninfo = fp.read().lower() + return lookfor in versioninfo @pytest.mark.skip_if_not_root @@ -83,7 +93,10 @@ def test_directory_max_depth(file, tmp_path): initial_mode = "0111" changed_mode = "0555" - if salt.utils.platform.is_photonos(): + # Check that we are not just running photon but the kernel matches. This + # check should fail if we are in a photon container running on and os other + # than photon. + if salt.utils.platform.is_photonos() and _kernel_check("photon"): initial_modes = { 0: {sub: "0750", subsub: "0110"}, 1: {sub: "0110", subsub: "0110"}, diff --git a/tests/pytests/functional/states/pkgrepo/test_debian.py b/tests/pytests/functional/states/pkgrepo/test_debian.py index 468bc429565..9cacf657f5b 100644 --- a/tests/pytests/functional/states/pkgrepo/test_debian.py +++ b/tests/pytests/functional/states/pkgrepo/test_debian.py @@ -27,6 +27,9 @@ pytestmark = [ @pytest.fixture def pkgrepo(states, grains): + sources = pathlib.Path("/etc/apt/sources.list") + if not sources.exists(): + sources.touch() if grains["os_family"] != "Debian": raise pytest.skip.Exception( "Test only for debian based platforms", _use_item_location=True @@ -661,8 +664,8 @@ class Repo: @alt_repo.default def _default_alt_repo(self): """ - Use an alternative repo, packages do not - exist for the OS on repo.saltproject.io + Use an alternative repo, packages do not exist for the OS on + packages.broadcom.com """ if ( self.grains["osfullname"] == "Ubuntu" @@ -690,7 +693,7 @@ class Repo: @repo_url.default def _default_repo_url(self): - return f"https://repo.saltproject.io/py3/{self.fullname}/{self.grains['osrelease']}/{self.grains['osarch']}/latest" + return "https://packages.broadcom.com/artifactory/saltproject-deb/" @repo_content.default def _default_repo_content(self): @@ -863,7 +866,7 @@ def test_adding_repo_file_signedby_alt_file(pkgrepo, states, repo): assert repo.repo_content in ret.comment key_file = repo.key_file.parent / "salt-alt-key.gpg" - repo_content = "deb [arch=amd64 signed-by={}] https://repo.saltproject.io/py3/debian/10/amd64/latest buster main".format( + repo_content = "deb [arch=amd64 signed-by={}] https://packages.broadcom.com/artifactory/saltproject-deb/ buster main".format( str(key_file) ) ret = states.pkgrepo.managed( @@ -925,7 +928,7 @@ def test_adding_repo_file_signedby_fail_key_keyurl( name=repo.repo_content, file=str(repo.repo_file), clean_file=True, - key_url="https://repo.saltproject.io/salt/py3/ubuntu/20.04/amd64/latest/SALT-PROJECT-GPG-PUBKEY-2023.pub", + key_url="https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public", aptkey=False, ) diff --git a/tests/pytests/functional/states/test_pkg.py b/tests/pytests/functional/states/test_pkg.py index 09b14704f2e..d179eaa4ca0 100644 --- a/tests/pytests/functional/states/test_pkg.py +++ b/tests/pytests/functional/states/test_pkg.py @@ -67,9 +67,9 @@ def PKG_TARGETS(grains): elif grains["os_family"] == "RedHat": if grains["os"] == "VMware Photon OS": if grains["osmajorrelease"] >= 5: - _PKG_TARGETS = ["wget", "zsh"] + _PKG_TARGETS = ["ctags", "zsh"] else: - _PKG_TARGETS = ["wget", "zsh-html"] + _PKG_TARGETS = ["ctags", "zsh-html"] elif ( grains["os"] in ("CentOS Stream", "Rocky", "AlmaLinux") and grains["osmajorrelease"] == 9 diff --git a/tests/pytests/functional/states/test_service.py b/tests/pytests/functional/states/test_service.py index fd023df0637..6f02e31fe44 100644 --- a/tests/pytests/functional/states/test_service.py +++ b/tests/pytests/functional/states/test_service.py @@ -3,6 +3,7 @@ Tests for the service state """ import os +import subprocess import pytest @@ -21,6 +22,20 @@ STOPPED = False RUNNING = True +def _check_systemctl(): + if not hasattr(_check_systemctl, "memo"): + if not salt.utils.platform.is_linux(): + _check_systemctl.memo = False + else: + proc = subprocess.run(["systemctl"], capture_output=True, check=False) + _check_systemctl.memo = ( + b"Failed to get D-Bus connection: No such file or directory" + in proc.stderr + or b"Failed to connect to bus: No such file or directory" in proc.stderr + ) + return _check_systemctl.memo + + @pytest.fixture def service_name(grains, modules): # For local testing purposes @@ -86,6 +101,7 @@ def check_service_status(exp_return, modules, service_name): @pytest.mark.slow_test +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") def test_service_running(service_name, modules, states): """ test service.running state module @@ -105,6 +121,7 @@ def test_service_running(service_name, modules, states): @pytest.mark.slow_test +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") def test_service_dead(service_name, modules, states): """ test service.dead state module @@ -119,6 +136,7 @@ def test_service_dead(service_name, modules, states): @pytest.mark.slow_test +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") def test_service_dead_init_delay(service_name, modules, states): """ test service.dead state module diff --git a/tests/pytests/functional/test_version.py b/tests/pytests/functional/test_version.py index 1c198abce7d..cacd953c05f 100644 --- a/tests/pytests/functional/test_version.py +++ b/tests/pytests/functional/test_version.py @@ -25,6 +25,11 @@ def salt_extension(tmp_path_factory): def test_salt_extensions_in_versions_report(tmp_path, salt_extension): with SaltVirtualEnv(venv_dir=tmp_path / ".venv") as venv: + # These are required for the test to pass, why are they not already + # installed? + venv.install("pyyaml") + venv.install("looseversion") + venv.install("packaging") # Install our extension into the virtualenv venv.install(str(salt_extension.srcdir)) installed_packages = venv.get_installed_packages() @@ -47,6 +52,12 @@ def test_salt_extensions_absent_in_versions_report(tmp_path, salt_extension): Ensure that the 'Salt Extensions' header does not show up when no extension is installed """ with SaltVirtualEnv(venv_dir=tmp_path / ".venv") as venv: + # These are required for the test to pass, why are they not already + # installed? + venv.install("pyyaml") + venv.install("looseversion") + venv.install("packaging") + venv.install("distro") installed_packages = venv.get_installed_packages() assert salt_extension.name not in installed_packages ret = venv.run_code( diff --git a/tests/pytests/functional/utils/win_dacl/test_file.py b/tests/pytests/functional/utils/win_dacl/test_file.py index 7de08f03422..9709860c5d6 100644 --- a/tests/pytests/functional/utils/win_dacl/test_file.py +++ b/tests/pytests/functional/utils/win_dacl/test_file.py @@ -1,3 +1,6 @@ +import os +import tempfile + import pytest import salt.utils.win_dacl as win_dacl @@ -18,9 +21,24 @@ def configure_loader_modules(minion_opts): } +@pytest.fixture(scope="module") +def user_temp_dir(): + """ + Return the user's temp directory if available + + Some of the tests fail if using system temp directories + """ + if "TMP" in os.environ and os.path.exists(os.environ["TMP"]): + return os.environ["TMP"] + return tempfile.gettempdir() + + @pytest.fixture(scope="function") -def test_file(): - with pytest.helpers.temp_file("dacl_test.file") as test_file: +def test_file(tmp_path_factory, user_temp_dir): + + with pytest.helpers.temp_file( + "dacl_test.file", directory=user_temp_dir + ) as test_file: yield test_file @@ -671,8 +689,10 @@ def test_get_set_inheritance(test_file): assert result is False -def test_copy_security(): - with pytest.helpers.temp_file("source_test.file") as source: +def test_copy_security(user_temp_dir): + with pytest.helpers.temp_file( + "source_test.file", directory=user_temp_dir + ) as source: # Set permissions on Source result = win_dacl.set_permissions( obj_name=str(source), @@ -697,7 +717,9 @@ def test_copy_security(): ) assert result is True - with pytest.helpers.temp_file("target_test.file") as target: + with pytest.helpers.temp_file( + "target_test.file", directory=user_temp_dir + ) as target: # Copy security from Source to Target result = win_dacl.copy_security(source=str(source), target=str(target)) assert result is True diff --git a/tests/pytests/integration/grains/test_custom.py b/tests/pytests/integration/grains/test_custom.py new file mode 100644 index 00000000000..6eeab4deab1 --- /dev/null +++ b/tests/pytests/integration/grains/test_custom.py @@ -0,0 +1,20 @@ +""" +Test the custom grains +""" + +import pytest + +pytestmark = [ + pytest.mark.windows_whitelisted, + pytest.mark.slow_test, +] + + +def test_grains_passed_to_custom_grain(salt_call_cli): + """ + test if current grains are passed to grains module functions that have a grains argument + """ + ret = salt_call_cli.run("grains.item", "custom_grain_test") + assert ret.returncode == 0 + assert ret.data + assert ret.data["custom_grain_test"] == "itworked" diff --git a/tests/pytests/integration/netapi/test_ssh_client.py b/tests/pytests/integration/netapi/test_ssh_client.py index b9428b99465..09bd51dc989 100644 --- a/tests/pytests/integration/netapi/test_ssh_client.py +++ b/tests/pytests/integration/netapi/test_ssh_client.py @@ -151,7 +151,7 @@ def test_shell_inject_ssh_priv( """ # ZDI-CAN-11143 path = tmp_path / "test-11143" - tgts = ["repo.saltproject.io", "www.zerodayinitiative.com"] + tgts = ["packages.broadcom.com", "www.zerodayinitiative.com"] ret = None for tgt in tgts: low = { diff --git a/tests/pytests/integration/ssh/test_master.py b/tests/pytests/integration/ssh/test_master.py index 5a81fcb8d0e..8b566756c55 100644 --- a/tests/pytests/integration/ssh/test_master.py +++ b/tests/pytests/integration/ssh/test_master.py @@ -2,16 +2,49 @@ Simple Smoke Tests for Connected SSH minions """ +import subprocess + +import packaging.version import pytest from saltfactories.utils.functional import StateResult +import salt.utils.platform +import salt.utils.versions + pytestmark = [ pytest.mark.slow_test, pytest.mark.skip_on_windows(reason="salt-ssh not available on Windows"), ] +def _check_systemctl(): + if not hasattr(_check_systemctl, "memo"): + if not salt.utils.platform.is_linux(): + _check_systemctl.memo = False + else: + proc = subprocess.run(["systemctl"], capture_output=True, check=False) + _check_systemctl.memo = ( + b"Failed to get D-Bus connection: No such file or directory" + in proc.stderr + ) + return _check_systemctl.memo + + +def _check_python(): + try: + proc = subprocess.run( + ["/usr/bin/python3", "--version"], capture_output=True, check=False + ) + except FileNotFoundError: + return True + return packaging.version.Version( + proc.stdout.decode().strip().split()[1] + ) <= packaging.version.Version("3.10") + + @pytest.mark.skip_if_not_root +@pytest.mark.skipif(_check_systemctl(), reason="systemctl degraded") +@pytest.mark.skipif(_check_python(), reason="System python less than 3.10") def test_service(salt_ssh_cli, grains): service = "cron" os_family = grains["os_family"] diff --git a/tests/pytests/integration/states/test_file.py b/tests/pytests/integration/states/test_file.py index 1b9d61445e6..9526137deb4 100644 --- a/tests/pytests/integration/states/test_file.py +++ b/tests/pytests/integration/states/test_file.py @@ -400,7 +400,7 @@ def _check_min_patch_version(shell): min_patch_ver = "2.6" ret = shell.run("patch", "--version") assert ret.returncode == 0 - version = ret.stdout.strip().split()[2] + version = ret.stdout.splitlines()[0].split()[-1] if Version(version) < Version(min_patch_ver): pytest.xfail( "Minimum version of patch not found, expecting {}, found {}".format( @@ -1230,6 +1230,7 @@ def test_directory_recurse(salt_master, salt_call_cli, tmp_path, grains): target_file = target_dir / "test-file" target_file.write_text("this is a test file") + file_perms = target_file.stat().st_mode target_link = target_dir / "test-link" target_link.symlink_to(target_file) @@ -1238,7 +1239,6 @@ def test_directory_recurse(salt_master, salt_call_cli, tmp_path, grains): ret = subprocess.run(["chown", "-h", "nobody", str(target_link)], check=False) assert ret.returncode == 0 - file_perms = stat.S_IFREG | stat.S_IWUSR | stat.S_IRUSR | stat.S_IRGRP if grains["os"] != "VMware Photon OS": file_perms |= stat.S_IROTH diff --git a/tests/pytests/pkg/conftest.py b/tests/pytests/pkg/conftest.py index 258d794c89f..f26c4a08065 100644 --- a/tests/pytests/pkg/conftest.py +++ b/tests/pytests/pkg/conftest.py @@ -34,6 +34,16 @@ def _system_up_to_date( grains, shell, ): + gpg_dest = "/etc/apt/keyrings/salt-archive-keyring.gpg" + if os.path.exists(gpg_dest): + with salt.utils.files.fopen(gpg_dest, "r") as fp: + log.error("Salt gpg key is %s", fp.read()) + else: + log.error("Salt gpg not present") + # download_file( + # "https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public", + # gpg_dest, + # ) if grains["os_family"] == "Debian": ret = shell.run("apt", "update") assert ret.returncode == 0 diff --git a/tests/pytests/pkg/downgrade/test_salt_downgrade.py b/tests/pytests/pkg/downgrade/test_salt_downgrade.py index 44542e5f21b..70f19e211b2 100644 --- a/tests/pytests/pkg/downgrade/test_salt_downgrade.py +++ b/tests/pytests/pkg/downgrade/test_salt_downgrade.py @@ -18,19 +18,26 @@ def _get_running_named_salt_pid(process_name): pids = [] for proc in psutil.process_iter(): + cmd_line = "" try: - cmdl_strg = " ".join(str(element) for element in proc.cmdline()) + cmd_line = " ".join(str(element) for element in proc.cmdline()) except (psutil.ZombieProcess, psutil.NoSuchProcess): - continue - if process_name in cmdl_strg: - pids.append(proc.pid) + # Even though it's a zombie process, it still has a cmdl_string and + # a pid, so we'll use it + pass + if process_name in cmd_line: + try: + pids.append(proc.pid) + except psutil.NoSuchProcess: + # Process is now closed + continue return pids def test_salt_downgrade_minion(salt_call_cli, install_salt): """ - Test an downgrade of Salt Minion. + Test a downgrade of Salt Minion. """ is_restart_fixed = packaging.version.parse( install_salt.prev_version diff --git a/tests/pytests/pkg/download/test_pkg_download.py b/tests/pytests/pkg/download/test_pkg_download.py index a6f4c7e38e7..d331d527e6f 100644 --- a/tests/pytests/pkg/download/test_pkg_download.py +++ b/tests/pytests/pkg/download/test_pkg_download.py @@ -55,33 +55,10 @@ def get_salt_test_commands(): @pytest.fixture(scope="module") def root_url(salt_release): - if os.environ.get("SALT_REPO_TYPE", "release") == "staging": - repo_domain = os.environ.get( - "SALT_REPO_DOMAIN_STAGING", "staging.repo.saltproject.io" - ) - else: - repo_domain = os.environ.get("SALT_REPO_DOMAIN_RELEASE", "repo.saltproject.io") - if "rc" in salt_release: - salt_path = "salt_rc/salt" - else: - salt_path = "salt" - salt_repo_user = os.environ.get("SALT_REPO_USER") - if salt_repo_user: - log.info( - "SALT_REPO_USER: %s", - salt_repo_user[0] + "*" * (len(salt_repo_user) - 2) + salt_repo_user[-1], - ) - salt_repo_pass = os.environ.get("SALT_REPO_PASS") - if salt_repo_pass: - log.info( - "SALT_REPO_PASS: %s", - salt_repo_pass[0] + "*" * (len(salt_repo_pass) - 2) + salt_repo_pass[-1], - ) - if salt_repo_user and salt_repo_pass: - repo_domain = f"{salt_repo_user}:{salt_repo_pass}@{repo_domain}" - _root_url = f"https://{repo_domain}/{salt_path}/py3" - log.info("Repository Root URL: %s", _root_url) - return _root_url + default_url = "https://packages.broadcom.com/artifactory" + repo_domain = os.environ.get("SALT_REPO_DOMAIN_RELEASE", default_url) + log.info("Repository Root URL: %s", repo_domain) + return repo_domain @pytest.fixture(scope="module") @@ -95,46 +72,15 @@ def get_salt_release(): if salt_release is None: if pkg_test_type == "download-pkgs": log.warning( - "Setting salt release to 3006.0rc2 which is probably not what you want." + "Setting salt release to 3006.0 which is probably not what you want." ) - salt_release = "3006.0rc2" + salt_release = "3006.0" if pkg_test_type == "download-pkgs": - if packaging.version.parse(salt_release) < packaging.version.parse("3006.0rc1"): + if packaging.version.parse(salt_release) < packaging.version.parse("3006.0"): log.warning("The salt release being tested, %r looks off.", salt_release) return salt_release -def get_repo_subpath_params(): - current_release = packaging.version.parse(get_salt_release()) - params = ["minor", current_release.major] - latest_env_var = os.environ.get("LATEST_SALT_RELEASE") - if latest_env_var is not None: - latest_release = packaging.version.parse(latest_env_var) - if current_release >= latest_release: - log.debug( - "Running the tests for the latest release since %s >= %s", - current_release, - latest_release, - ) - params.append("latest") - return params - - -@pytest.fixture( - scope="module", - params=get_repo_subpath_params(), -) -def repo_subpath(request): - return request.param - - -@pytest.fixture(scope="module") -def gpg_key_name(salt_release): - if packaging.version.parse(salt_release) > packaging.version.parse("3005"): - return "SALT-PROJECT-GPG-PUBKEY-2023.pub" - return "salt-archive-keyring.gpg" - - @pytest.fixture(scope="module") def salt_release(): yield get_salt_release() @@ -153,8 +99,6 @@ def _setup_system( shell, root_url, salt_release, - gpg_key_name, - repo_subpath, package_type, tmp_path_factory, onedir_install_path, @@ -168,7 +112,6 @@ def _setup_system( root_url=root_url, salt_release=salt_release, downloads_path=downloads_path, - repo_subpath=repo_subpath, package_type=package_type, onedir_install_path=onedir_install_path, ): @@ -180,7 +123,6 @@ def _setup_system( root_url=root_url, salt_release=salt_release, downloads_path=downloads_path, - repo_subpath=repo_subpath, package_type=package_type, onedir_install_path=onedir_install_path, ) @@ -192,8 +134,6 @@ def _setup_system( root_url=root_url, salt_release=salt_release, downloads_path=downloads_path, - gpg_key_name=gpg_key_name, - repo_subpath=repo_subpath, ) elif grains["os"] == "Fedora": setup_redhat_family( @@ -203,8 +143,6 @@ def _setup_system( root_url=root_url, salt_release=salt_release, downloads_path=downloads_path, - gpg_key_name=gpg_key_name, - repo_subpath=repo_subpath, ) elif grains["os"] == "VMware Photon OS": setup_redhat_family( @@ -214,8 +152,6 @@ def _setup_system( root_url=root_url, salt_release=salt_release, downloads_path=downloads_path, - gpg_key_name=gpg_key_name, - repo_subpath=repo_subpath, ) elif grains["os_family"] == "RedHat": setup_redhat_family( @@ -225,20 +161,14 @@ def _setup_system( root_url=root_url, salt_release=salt_release, downloads_path=downloads_path, - gpg_key_name=gpg_key_name, - repo_subpath=repo_subpath, ) elif grains["os_family"] == "Debian": setup_debian_family( shell, - os_name=grains["os"].lower(), - os_version=grains["osrelease"], os_codename=grains["oscodename"], root_url=root_url, salt_release=salt_release, downloads_path=downloads_path, - gpg_key_name=gpg_key_name, - repo_subpath=repo_subpath, package_type=package_type, onedir_install_path=onedir_install_path, ) @@ -256,34 +186,19 @@ def setup_redhat_family( root_url, salt_release, downloads_path, - gpg_key_name, - repo_subpath, ): arch = os.environ.get("SALT_REPO_ARCH") or "x86_64" if os_name == "photon": os_version = f"{os_version}.0" - if repo_subpath == "minor": - repo_url_base = ( - f"{root_url}/{os_name}/{os_version}/{arch}/{repo_subpath}/{salt_release}" - ) - else: - repo_url_base = f"{root_url}/{os_name}/{os_version}/{arch}/{repo_subpath}" - - gpg_file_url = f"{root_url}/{os_name}/{os_version}/{arch}/{gpg_key_name}" - - try: - pytest.helpers.download_file(gpg_file_url, downloads_path / gpg_key_name) - except Exception as exc: # pylint: disable=broad-except - pytest.fail(f"Failed to download {gpg_file_url}: {exc}") - - ret = shell.run("rpm", "--import", str(downloads_path / gpg_key_name), check=False) - if ret.returncode != 0: - pytest.fail("Failed to import gpg key") + repo_url_base = f"{root_url}/saltproject-rpm" + # Download the salt.repo + # It contains the gpg key url so we don't need to download it here + salt_repo_url = "https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.repo" repo_file = pytest.helpers.download_file( - f"{repo_url_base}.repo", downloads_path / f"salt-{os_name}.repo" + salt_repo_url, downloads_path / "salt.repo" ) commands = [ @@ -293,13 +208,13 @@ def setup_redhat_family( "yum", "install", "-y", - "salt-master", - "salt-minion", - "salt-ssh", - "salt-syndic", - "salt-cloud", - "salt-api", - "salt-debuginfo", + f"salt-master-{salt_release}", + f"salt-minion-{salt_release}", + f"salt-ssh-{salt_release}", + f"salt-syndic-{salt_release}", + f"salt-cloud-{salt_release}", + f"salt-api-{salt_release}", + f"salt-debuginfo-{salt_release}", ), ] @@ -311,14 +226,10 @@ def setup_redhat_family( def setup_debian_family( shell, - os_name, - os_version, os_codename, root_url, salt_release, downloads_path, - gpg_key_name, - repo_subpath, package_type, onedir_install_path, ): @@ -333,11 +244,9 @@ def setup_debian_family( elif arch == "x86_64": arch = "amd64" - if repo_subpath == "minor": - repo_url_base = f"{root_url}/{os_name}/{os_version}/{arch}/{repo_subpath}/{salt_release}" - else: - repo_url_base = f"{root_url}/{os_name}/{os_version}/{arch}/{repo_subpath}" - gpg_file_url = f"{root_url}/{os_name}/{os_version}/{arch}/{gpg_key_name}" + repo_url_base = f"{root_url}/saltproject-deb/" + gpg_file_url = "https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public" + gpg_key_name = "SALT-PROJECT-GPG-PUBKEY-2023.pub" try: pytest.helpers.download_file(gpg_file_url, downloads_path / gpg_key_name) @@ -382,11 +291,9 @@ def setup_debian_family( else: # We are testing the onedir download onedir_name = f"salt-{salt_release}-onedir-linux-{arch}.tar.xz" - if repo_subpath == "minor": - repo_url_base = f"{root_url}/onedir/{repo_subpath}/{salt_release}" - else: - repo_url_base = f"{root_url}/onedir/{repo_subpath}" - onedir_url = f"{repo_url_base}/{onedir_name}" + onedir_url = ( + f"{root_url}/saltproject-generic/onedir/{salt_release}/{onedir_name}" + ) onedir_location = downloads_path / onedir_name onedir_extracted = onedir_install_path @@ -403,24 +310,13 @@ def setup_macos( root_url, salt_release, downloads_path, - repo_subpath, package_type, onedir_install_path, ): arch = os.environ.get("SALT_REPO_ARCH") or "x86_64" if package_type == "package": - - if packaging.version.parse(salt_release) > packaging.version.parse("3005"): - mac_pkg = f"salt-{salt_release}-py3-{arch}.pkg" - if repo_subpath == "minor": - mac_pkg_url = ( - f"{root_url}/macos/{repo_subpath}/{salt_release}/{mac_pkg}" - ) - else: - mac_pkg_url = f"{root_url}/macos/{repo_subpath}/{mac_pkg}" - else: - mac_pkg_url = f"{root_url}/macos/{salt_release}/{mac_pkg}" - mac_pkg = f"salt-{salt_release}-macos-{arch}.pkg" + mac_pkg = f"salt-{salt_release}-py3-{arch}.pkg" + mac_pkg_url = f"{root_url}/saltproject-generic/macos/{salt_release}/{mac_pkg}" mac_pkg_path = downloads_path / mac_pkg pytest.helpers.download_file(mac_pkg_url, mac_pkg_path) @@ -437,11 +333,7 @@ def setup_macos( else: # We are testing the onedir download onedir_name = f"salt-{salt_release}-onedir-macos-{arch}.tar.xz" - if repo_subpath == "minor": - repo_url_base = f"{root_url}/onedir/{repo_subpath}/{salt_release}" - else: - repo_url_base = f"{root_url}/onedir/{repo_subpath}" - onedir_url = f"{repo_url_base}/{onedir_name}" + onedir_url = f"{root_url}/onedir/{salt_release}/{onedir_name}" onedir_location = downloads_path / onedir_name onedir_extracted = onedir_install_path @@ -459,7 +351,6 @@ def setup_windows( root_url, salt_release, downloads_path, - repo_subpath, package_type, onedir_install_path, timeout=300, @@ -469,26 +360,18 @@ def setup_windows( if package_type != "onedir": root_dir = pathlib.Path(os.getenv("ProgramFiles"), "Salt Project", "Salt") - if packaging.version.parse(salt_release) > packaging.version.parse("3005"): - if package_type.lower() == "nsis": - if arch.lower() != "x86": - arch = arch.upper() - win_pkg = f"Salt-Minion-{salt_release}-Py3-{arch}-Setup.exe" - else: - if arch.lower() != "x86": - arch = arch.upper() - win_pkg = f"Salt-Minion-{salt_release}-Py3-{arch}.msi" - if repo_subpath == "minor": - win_pkg_url = ( - f"{root_url}/windows/{repo_subpath}/{salt_release}/{win_pkg}" - ) - else: - win_pkg_url = f"{root_url}/windows/{repo_subpath}/{win_pkg}" - ssm_bin = root_dir / "ssm.exe" + if package_type.lower() == "nsis": + if arch.lower() != "x86": + arch = arch.upper() + win_pkg = f"Salt-Minion-{salt_release}-Py3-{arch}-Setup.exe" else: - win_pkg = f"salt-{salt_release}-windows-{arch}.exe" - win_pkg_url = f"{root_url}/windows/{salt_release}/{win_pkg}" - ssm_bin = root_dir / "bin" / "ssm_bin" + if arch.lower() != "x86": + arch = arch.upper() + win_pkg = f"Salt-Minion-{salt_release}-Py3-{arch}.msi" + win_pkg_url = ( + f"{root_url}/saltproject-generic/windows/{salt_release}/{win_pkg}" + ) + ssm_bin = root_dir / "ssm.exe" pkg_path = downloads_path / win_pkg @@ -554,11 +437,7 @@ def setup_windows( else: # We are testing the onedir download onedir_name = f"salt-{salt_release}-onedir-windows-{arch}.zip" - if repo_subpath == "minor": - repo_url_base = f"{root_url}/onedir/{repo_subpath}/{salt_release}" - else: - repo_url_base = f"{root_url}/onedir/{repo_subpath}" - onedir_url = f"{repo_url_base}/{onedir_name}" + onedir_url = f"{root_url}/onedir/{salt_release}/{onedir_name}" onedir_location = downloads_path / onedir_name onedir_extracted = onedir_install_path diff --git a/tests/pytests/pkg/integration/test_version.py b/tests/pytests/pkg/integration/test_version.py index 8bbef78793a..56a5dc33707 100644 --- a/tests/pytests/pkg/integration/test_version.py +++ b/tests/pytests/pkg/integration/test_version.py @@ -29,7 +29,7 @@ def test_salt_version(version, install_salt): actual.append(actual_ver[0]) actual.append(actual_ver_salt_stripped) else: - pytest.skip("Not testing a non-release build artifact, do not run") + pytest.skip("We don't run this test on release builds") expected = ["salt", version] assert actual == expected @@ -128,7 +128,6 @@ def test_compare_versions(binary, install_salt): @pytest.mark.parametrize( "symlink", [ - # We can't create a salt symlink because there is a salt directory "salt", "salt-api", "salt-call", @@ -149,6 +148,8 @@ def test_symlinks_created(version, symlink, install_salt): Test symlinks created """ ret = install_salt.proc.run(pathlib.Path("/usr/local/sbin") / symlink, "--version") + install_log_file = pathlib.Path("/tmp") / "postinstall.txt" + install_log_content = install_log_file.read_text() ret.stdout.matcher.fnmatch_lines([f"*{version}*"]) diff --git a/tests/pytests/scenarios/dns/multimaster/test_dns.py b/tests/pytests/scenarios/dns/multimaster/test_dns.py index 5e0fc4c80f7..5712c21a896 100644 --- a/tests/pytests/scenarios/dns/multimaster/test_dns.py +++ b/tests/pytests/scenarios/dns/multimaster/test_dns.py @@ -39,7 +39,7 @@ def test_multimaster_dns( log.info("Removed secondary master IP address.") # Wait for the minion's master_alive_interval, adding a second for # reliablity. - time.sleep(master_alive_interval + 1) + time.sleep(master_alive_interval + 10) assert ( "Master ip address changed from 172.16.0.1 to 127.0.0.1" in caplog.text ) diff --git a/tests/pytests/unit/modules/test_aptpkg.py b/tests/pytests/unit/modules/test_aptpkg.py index a7550ffca8a..250dd81bdfd 100644 --- a/tests/pytests/unit/modules/test_aptpkg.py +++ b/tests/pytests/unit/modules/test_aptpkg.py @@ -470,7 +470,7 @@ def test_get_http_proxy_url_username_passwd(): """ Test _get_http_proxy_url when username and passwod set """ - host = "repo.saltproject.io" + host = "packages.broadcom.com" port = "888" user = "user" passwd = "password" @@ -486,7 +486,7 @@ def test_get_http_proxy_url(): """ Test basic functionality for _get_http_proxy_url """ - host = "repo.saltproject.io" + host = "packages.broadcom.com" port = "888" user = "" passwd = "" diff --git a/tests/pytests/unit/modules/test_win_file.py b/tests/pytests/unit/modules/test_win_file.py index 19924c39873..d327defe56d 100644 --- a/tests/pytests/unit/modules/test_win_file.py +++ b/tests/pytests/unit/modules/test_win_file.py @@ -2,8 +2,10 @@ import os import re import pytest +from saltfactories.utils import random_string import salt.modules.win_file as win_file +import salt.modules.win_useradd import salt.utils.user import salt.utils.win_dacl from salt.exceptions import CommandExecutionError @@ -20,6 +22,14 @@ def configure_loader_modules(): } +@pytest.fixture(scope="module") +def test_user(): + user_name = random_string("test-") + salt.modules.win_useradd.add(name=user_name, password="P@ssw0rd") + yield user_name + salt.modules.win_useradd.delete(name=user_name) + + def test__virtual__not_windows(): with patch("salt.utils.platform.is_windows", autospec=True, return_value=False): expected = (False, "Module win_file: Missing Win32 modules") @@ -126,9 +136,9 @@ def test_uid_to_user_empty(): assert result == expected -def test_user_to_uid(): - result = win_file.user_to_uid("Administrator") - expected = salt.utils.win_dacl.get_sid_string("Administrator") +def test_user_to_uid(test_user): + result = win_file.user_to_uid(test_user) + expected = salt.utils.win_dacl.get_sid_string(test_user) assert result == expected diff --git a/tests/pytests/unit/modules/win_lgpo/test__policy_info.py b/tests/pytests/unit/modules/win_lgpo/test__policy_info.py index 5849e309398..a0c4213cfe4 100644 --- a/tests/pytests/unit/modules/win_lgpo/test__policy_info.py +++ b/tests/pytests/unit/modules/win_lgpo/test__policy_info.py @@ -226,15 +226,15 @@ def test_sidConversion_no_conversion(pol_info): assert pol_info._sidConversion([val]) == expected -def test_sidConversion_everyone(pol_info): +def test_sidConversion_sid(pol_info): val = ws.ConvertStringSidToSid("S-1-1-0") expected = ["Everyone"] assert pol_info._sidConversion([val]) == expected -def test_sidConversion_administrator(pol_info): - val = ws.LookupAccountName("", "Administrator")[0] - expected = [f"{socket.gethostname()}\\Administrator"] +def test_sidConversion_name(pol_info): + val = ws.LookupAccountName("", "DefaultAccount")[0] + expected = [f"{socket.gethostname()}\\DefaultAccount"] assert pol_info._sidConversion([val]) == expected @@ -250,8 +250,8 @@ def test_usernamesToSidObjects_empty_value(pol_info, val, expected): def test_usernamesToSidObjects_string_list(pol_info): - val = "Administrator,Guest" - admin_sid = ws.LookupAccountName("", "Administrator")[0] + val = "DefaultAccount,Guest" + admin_sid = ws.LookupAccountName("", "DefaultAccount")[0] guest_sid = ws.LookupAccountName("", "Guest")[0] expected = [admin_sid, guest_sid] assert pol_info._usernamesToSidObjects(val) == expected diff --git a/tests/pytests/unit/states/test_service.py b/tests/pytests/unit/states/test_service.py index 6be5afdc8ae..04cdd9b059b 100644 --- a/tests/pytests/unit/states/test_service.py +++ b/tests/pytests/unit/states/test_service.py @@ -3,6 +3,7 @@ """ import logging +import subprocess import pytest @@ -16,6 +17,20 @@ from tests.support.mock import MagicMock, patch log = logging.getLogger(__name__) +def _check_systemctl(): + if not hasattr(_check_systemctl, "memo"): + if not salt.utils.platform.is_linux(): + _check_systemctl.memo = False + else: + proc = subprocess.run(["systemctl"], capture_output=True, check=False) + _check_systemctl.memo = ( + b"Failed to get D-Bus connection: No such file or directory" + in proc.stderr + or b"Failed to connect to bus: No such file or directory" in proc.stderr + ) + return _check_systemctl.memo + + def func(name): """ Mock func method @@ -679,6 +694,7 @@ def test_mod_beacon(tmp_path): assert ret == expected +@pytest.mark.skipif(_check_systemctl(), reason="systemctl is in a degraded state") @pytest.mark.skip_on_darwin(reason="service.running is currently failing on OSX") @pytest.mark.skip_if_not_root @pytest.mark.destructive_test diff --git a/tests/pytests/unit/utils/test_network.py b/tests/pytests/unit/utils/test_network.py index 557f315a337..d3d9744fb45 100644 --- a/tests/pytests/unit/utils/test_network.py +++ b/tests/pytests/unit/utils/test_network.py @@ -1431,12 +1431,17 @@ def test_isportopen_false(): assert ret is False -def test_isportopen(): - if salt.utils.platform.is_windows(): - port = "135" - else: - port = "22" - ret = network.isportopen("127.0.0.1", port) +@pytest.fixture +def openport_22233(): + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.bind(("0.0.0.0", 22233)) + s.listen(5) + yield + s.close() + + +def test_isportopen(openport_22233): + ret = network.isportopen("127.0.0.1", 22233) assert ret == 0 @@ -1460,7 +1465,7 @@ def test_ip_to_host(grains): ret = network.ip_to_host("127.0.0.1") if grains.get("oscodename") == "Photon": # Photon returns this for IPv4 - assert ret == "ipv6-localhost" + assert ret in ("ipv6-localhost", "localhost") else: assert ret == hostname @@ -1469,15 +1474,15 @@ def test_ip_to_host(grains): ret = network.ip_to_host("::1") if grains["os"] == "Amazon": - assert ret == "localhost6" + assert ret in ("localhost6", "localhost") elif grains["os_family"] == "Debian": if grains["osmajorrelease"] == 12: assert ret == hostname else: - assert ret == "ip6-localhost" + assert ret in ("ip6-localhost", "localhost") elif grains["os_family"] == "RedHat": if grains["oscodename"] == "Photon": - assert ret == "ipv6-localhost" + assert ret in ("ipv6-localhost", "localhost") else: assert ret == hostname elif grains["os_family"] == "Arch": @@ -1485,7 +1490,7 @@ def test_ip_to_host(grains): # running doesn't have osmajorrelease grains assert ret == hostname else: - assert ret == "ip6-localhost" + assert ret in ("ip6-localhost", "localhost") else: assert ret == hostname diff --git a/tests/pytests/unit/utils/test_win_functions.py b/tests/pytests/unit/utils/test_win_functions.py index 4f1e8b39d56..6fcb1081d38 100644 --- a/tests/pytests/unit/utils/test_win_functions.py +++ b/tests/pytests/unit/utils/test_win_functions.py @@ -1,7 +1,9 @@ import platform import pytest +from saltfactories.utils import random_string +import salt.modules.win_useradd import salt.utils.win_functions as win_functions from tests.support.mock import MagicMock, patch @@ -36,6 +38,14 @@ except ImportError: HAS_PYWIN = False +@pytest.fixture(scope="module") +def test_user(): + user_name = random_string("test-") + salt.modules.win_useradd.add(name=user_name, password="P@ssw0rd") + yield user_name + salt.modules.win_useradd.delete(name=user_name) + + # Test cases for salt.utils.win_functions. @@ -176,7 +186,7 @@ def test_get_sam_name_everyone(): @pytest.mark.skipif(not HAS_PYWIN, reason="Requires pywintypes libraries") -def test_get_sam_name(): - expected = "\\".join([platform.node()[:15], "Administrator"]) - result = win_functions.get_sam_name("Administrator") - assert result == expected +def test_get_sam_name(test_user): + expected = "\\".join([platform.node()[:15], test_user]) + result = win_functions.get_sam_name(test_user) + assert result.lower() == expected.lower() diff --git a/tests/support/pkg.py b/tests/support/pkg.py index 269e0361502..4508de22281 100644 --- a/tests/support/pkg.py +++ b/tests/support/pkg.py @@ -628,8 +628,7 @@ class SaltPkgInstall: def install_previous(self, downgrade=False): """ - Install previous version. This is used for - upgrade tests. + Install previous version. This is used for upgrade tests. """ major_ver = packaging.version.parse(self.prev_version).major relenv = packaging.version.parse(self.prev_version) >= packaging.version.parse( @@ -638,9 +637,7 @@ class SaltPkgInstall: distro_name = self.distro_name if distro_name in ("almalinux", "rocky", "centos", "fedora"): distro_name = "redhat" - root_url = "salt/py3/" - if self.classic: - root_url = "py3/" + root_url = "https://packages.broadcom.com/artifactory" if self.distro_name in [ "almalinux", @@ -655,11 +652,6 @@ class SaltPkgInstall: # Removing EPEL repo files for fp in pathlib.Path("/etc", "yum.repos.d").glob("epel*"): fp.unlink() - gpg_key = "SALTSTACK-GPG-KEY.pub" - if self.distro_version == "9": - gpg_key = "SALTSTACK-GPG-KEY2.pub" - if relenv: - gpg_key = "SALT-PROJECT-GPG-PUBKEY-2023.pub" if platform.is_aarch64(): arch = "arm64" @@ -673,11 +665,11 @@ class SaltPkgInstall: ret = self.proc.run( "rpm", "--import", - f"https://repo.saltproject.io/{root_url}{distro_name}/{self.distro_version}/{arch}/{major_ver}/{gpg_key}", + "https://packages.broadcom.com/artifactory/api/security/keypair/SaltProjectKey/public", ) self._check_retcode(ret) download_file( - f"https://repo.saltproject.io/{root_url}{distro_name}/{self.distro_version}/{arch}/{major_ver}.repo", + "https://github.com/saltstack/salt-install-guide/releases/latest/download/salt.repo", f"/etc/yum.repos.d/salt-{distro_name}.repo", ) if self.distro_name == "photon": @@ -724,39 +716,36 @@ class SaltPkgInstall: arch = "arm64" else: arch = "amd64" + pathlib.Path("/etc/apt/keyrings").mkdir(parents=True, exist_ok=True) - gpg_dest = "salt-archive-keyring.gpg" - gpg_key = gpg_dest - if relenv: - gpg_key = "SALT-PROJECT-GPG-PUBKEY-2023.gpg" + gpg_full_path = "/etc/apt/keyrings/salt-archive-keyring.gpg" + + # download the gpg pub key download_file( - f"https://repo.saltproject.io/{root_url}{distro_name}/{self.distro_version}/{arch}/{major_ver}/{gpg_key}", - f"/etc/apt/keyrings/{gpg_dest}", + f"{root_url}/api/security/keypair/SaltProjectKey/public", + f"{gpg_full_path}", ) with salt.utils.files.fopen( pathlib.Path("/etc", "apt", "sources.list.d", "salt.list"), "w" ) as fp: fp.write( - f"deb [signed-by=/etc/apt/keyrings/{gpg_dest} arch={arch}] " - f"https://repo.saltproject.io/{root_url}{distro_name}/{self.distro_version}/{arch}/{major_ver} {self.distro_codename} main" + f"deb [signed-by={gpg_full_path} arch={arch}] " + f"{root_url}/saltproject-deb/ {self.distro_codename} main" ) self._check_retcode(ret) - cmd = [ - self.pkg_mngr, - "install", - *self.salt_pkgs, - "-y", - ] + cmd = [self.pkg_mngr, "install", *self.salt_pkgs, "-y"] if downgrade: pref_file = pathlib.Path("/etc", "apt", "preferences.d", "salt.pref") pref_file.parent.mkdir(exist_ok=True) + # TODO: There's probably something I should put in here to say what version + # TODO: But maybe that's done elsewhere, hopefully in self.salt_pkgs pref_file.write_text( textwrap.dedent( - """\ + f"""\ Package: salt* - Pin: origin "repo.saltproject.io" + Pin: origin "{root_url}/saltproject-deb" Pin-Priority: 1001 """ ), @@ -771,7 +760,7 @@ class SaltPkgInstall: "-o", "DPkg::Options::=--force-confold", ] - ret = self.proc.run(self.pkg_mngr, "update", *extra_args, env=env) + self.proc.run(self.pkg_mngr, "update", *extra_args, env=env) cmd.extend(extra_args) @@ -791,31 +780,20 @@ class SaltPkgInstall: elif platform.is_windows(): self.bin_dir = self.install_dir / "bin" self.run_root = self.bin_dir / "salt.exe" - self.ssm_bin = self.bin_dir / "ssm.exe" - if self.file_ext == "msi" or relenv: - self.ssm_bin = self.install_dir / "ssm.exe" + self.ssm_bin = self.install_dir / "ssm.exe" - if not self.classic: - if not relenv: - win_pkg = ( - f"salt-{self.prev_version}-1-windows-amd64.{self.file_ext}" - ) - else: - if self.file_ext == "msi": - win_pkg = ( - f"Salt-Minion-{self.prev_version}-Py3-AMD64.{self.file_ext}" - ) - elif self.file_ext == "exe": - win_pkg = f"Salt-Minion-{self.prev_version}-Py3-AMD64-Setup.{self.file_ext}" - win_pkg_url = f"https://repo.saltproject.io/salt/py3/windows/{major_ver}/{win_pkg}" + if self.file_ext == "exe": + win_pkg = ( + f"Salt-Minion-{self.prev_version}-Py3-AMD64-Setup.{self.file_ext}" + ) + elif self.file_ext == "msi": + win_pkg = f"Salt-Minion-{self.prev_version}-Py3-AMD64.{self.file_ext}" else: - if self.file_ext == "msi": - win_pkg = ( - f"Salt-Minion-{self.prev_version}-Py3-AMD64.{self.file_ext}" - ) - elif self.file_ext == "exe": - win_pkg = f"Salt-Minion-{self.prev_version}-Py3-AMD64-Setup.{self.file_ext}" - win_pkg_url = f"https://repo.saltproject.io/windows/{win_pkg}" + log.debug("Unknown windows file extension: %s", self.file_ext) + + win_pkg_url = ( + f"{root_url}/saltproject-generic/windows/{self.prev_version}/{win_pkg}" + ) pkg_path = pathlib.Path(r"C:\TEMP", win_pkg) pkg_path.parent.mkdir(exist_ok=True) download_file(win_pkg_url, pkg_path) @@ -856,17 +834,10 @@ class SaltPkgInstall: else: arch = "x86_64" - if self.classic: - mac_pkg = f"salt-{self.prev_version}-py3-{arch}.pkg" - mac_pkg_url = f"https://repo.saltproject.io/osx/{mac_pkg}" - else: - if not relenv: - mac_pkg = f"salt-{self.prev_version}-1-macos-{arch}.pkg" - else: - mac_pkg = f"salt-{self.prev_version}-py3-{arch}.pkg" - mac_pkg_url = ( - f"https://repo.saltproject.io/salt/py3/macos/{major_ver}/{mac_pkg}" - ) + mac_pkg = f"salt-{self.prev_version}-py3-{arch}.pkg" + mac_pkg_url = ( + f"{root_url}/saltproject-generic/macos/{self.prev_version}/{mac_pkg}" + ) mac_pkg_path = f"/tmp/{mac_pkg}" if not os.path.exists(mac_pkg_path): diff --git a/tests/support/pytest/helpers.py b/tests/support/pytest/helpers.py index 1c87f33e633..9026dc6003a 100644 --- a/tests/support/pytest/helpers.py +++ b/tests/support/pytest/helpers.py @@ -513,6 +513,8 @@ class FakeSaltExtension: setup_requires = wheel setuptools>=50.3.2 + install_requires = + distro [options.entry_points] salt.loader= diff --git a/tests/support/virt.py b/tests/support/virt.py index c651b01adcc..1802c3c3966 100644 --- a/tests/support/virt.py +++ b/tests/support/virt.py @@ -110,7 +110,28 @@ class SaltVirtMinionContainerFactory(SaltMinion): "-m", "pip", "install", - f"--constraint=/salt/requirements/static/ci/py{requirements_py_version}/linux.txt", + "-r", + f"/salt/requirements/static/pkg/py{requirements_py_version}/linux.txt", + ) + log.debug("Install Salt Dependencies in the container: %s", ret.stderr) + assert ret.returncode == 0 + ret = self.run( + self.python_executable, + "-m", + "pip", + "install", + f"--constraint=/salt/requirements/static/pkg/py{requirements_py_version}/linux.txt", + "-r", + f"/salt/requirements/static/pkg/py{requirements_py_version}/linux.txt", + ) + log.debug("Install Salt Dependencies in the container: %s", ret.stderr) + assert ret.returncode == 0 + ret = self.run( + self.python_executable, + "-m", + "pip", + "install", + f"--constraint=/salt/requirements/static/pkg/py{requirements_py_version}/linux.txt", "/salt", ) log.debug("Install Salt in the container: %s", ret) diff --git a/tests/support/win_installer.py b/tests/support/win_installer.py index b41586a6806..846245194b0 100644 --- a/tests/support/win_installer.py +++ b/tests/support/win_installer.py @@ -10,18 +10,46 @@ """ import hashlib +from html.parser import HTMLParser import requests PREFIX = "Salt-Minion-" -REPO = "https://repo.saltproject.io/windows" +REPO = "https://packages.broadcom.com/artifactory/saltproject-generic/windows/" def latest_installer_name(arch="AMD64", **kwargs): """ Create an installer file name """ - return f"Salt-Minion-Latest-Py3-{arch}-Setup.exe" + + # This is where windows packages are found + # Each version is in its own directory, so we need to list the directories + # and use the last one as the latest + html_response = requests.get(REPO, timeout=60) + + versions = [] + + # Create a class so we can define how to handle the starttag + # We're looking for a "href" in the "a" tag which is the version + class MyHTMLParser(HTMLParser): + + def handle_starttag(self, tag, attrs): + # Only parse the 'anchor' tag. + if tag == "a": + # Check the list of defined attributes. + for name, value in attrs: + # If href is defined, add the value to the list of versions + if name == "href": + versions.append(value.strip("/")) + + parser = MyHTMLParser() + parser.feed(html_response.text) + parser.close() + + latest = versions[-1] + + return f"{PREFIX}{latest}-Py3-{arch}-Setup.exe" def download_and_verify(fp, name, repo=REPO): diff --git a/tests/unit/modules/test_localemod.py b/tests/unit/modules/test_localemod.py index cc2706b20be..e7c147ed956 100644 --- a/tests/unit/modules/test_localemod.py +++ b/tests/unit/modules/test_localemod.py @@ -2,6 +2,8 @@ :codeauthor: Rupesh Tare """ +import subprocess + import pytest import salt.modules.localemod as localemod @@ -11,6 +13,15 @@ from tests.support.mock import MagicMock, Mock, patch from tests.support.unit import TestCase +def _check_localectl(): + if not hasattr(_check_localectl, "memo"): + proc = subprocess.run(["localectl"], check=False, capture_output=True) + _check_localectl.memo = ( + b"Failed to connect to bus: No such file or directory" in proc.stderr + ) + return _check_localectl.memo + + class LocalemodTestCase(TestCase, LoaderModuleMockMixin): """ Test cases for salt.modules.localemod @@ -55,6 +66,7 @@ class LocalemodTestCase(TestCase, LoaderModuleMockMixin): ): assert localemod.list_avail() == ["A", "B"] + @pytest.mark.skipif(_check_localectl, reason="localectl is in degraded state") @patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/localctl")) @patch( "salt.modules.localemod.__salt__", @@ -87,6 +99,7 @@ class LocalemodTestCase(TestCase, LoaderModuleMockMixin): assert "data" in out["x11_model"] assert out["x11_model"]["data"] == "pc105" + @pytest.mark.skipif(_check_localectl, reason="localectl is in degraded state") @patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/localctl")) @patch( "salt.modules.localemod.__salt__", @@ -165,6 +178,7 @@ class LocalemodTestCase(TestCase, LoaderModuleMockMixin): assert 'Unable to find "localectl"' in str(exc_info.value) assert not localemod.log.debug.called + @pytest.mark.skipif(_check_localectl, reason="localectl is in degraded state") @patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/localctl")) @patch( "salt.modules.localemod.__salt__", @@ -175,6 +189,7 @@ class LocalemodTestCase(TestCase, LoaderModuleMockMixin): localemod._localectl_status() assert 'Unable to parse result of "localectl"' in str(exc_info.value) + @pytest.mark.skipif(_check_localectl, reason="localectl is in degraded state") @patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/localctl")) @patch( "salt.modules.localemod.__salt__", @@ -185,6 +200,7 @@ class LocalemodTestCase(TestCase, LoaderModuleMockMixin): localemod._localectl_status() assert 'Unable to parse result of "localectl"' in str(exc_info.value) + @pytest.mark.skipif(_check_localectl, reason="localectl is in degraded state") @patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/localctl")) @patch( "salt.modules.localemod.__salt__", @@ -831,6 +847,7 @@ class LocalemodTestCase(TestCase, LoaderModuleMockMixin): ): assert localemod.gen_locale("en_US.UTF-8", verbose=True) == ret + @pytest.mark.skipif(_check_localectl, reason="localectl is in degraded state") @patch("salt.utils.path.which", MagicMock(return_value="/usr/bin/localctl")) def test_parse_localectl(self): localectl_out = ( diff --git a/tests/unit/utils/test_systemd.py b/tests/unit/utils/test_systemd.py index 20e1aaeda0c..a68aa186d6a 100644 --- a/tests/unit/utils/test_systemd.py +++ b/tests/unit/utils/test_systemd.py @@ -173,18 +173,20 @@ class SystemdTestCase(TestCase): # return data, so it is sufficient enough to mock it as True for # these tests. with patch("os.stat", side_effect=_booted_effect): - # Test without context dict passed - self.assertEqual(_systemd.has_scope(), _expected) - # Test that context key is set when context dict is passed - context = {} - self.assertEqual(_systemd.has_scope(context), _expected) - self.assertEqual( - context, - { - "salt.utils.systemd.booted": True, - "salt.utils.systemd.version": _version, - }, - ) + with patch("salt.utils.systemd.status", return_value=True): + # Test without context dict passed + self.assertEqual(_systemd.has_scope(), _expected) + context = {"salt.utils.systemd.status": True} + # Test that context key is set when context dict is passed + self.assertEqual(_systemd.has_scope(context), _expected) + self.assertEqual( + context, + { + "salt.utils.systemd.booted": True, + "salt.utils.systemd.status": True, + "salt.utils.systemd.version": _version, + }, + ) def test_has_scope_systemd205(self): """ @@ -207,18 +209,20 @@ class SystemdTestCase(TestCase): # return data, so it is sufficient enough to mock it as True for # these tests. with patch("os.stat", side_effect=_booted_effect): - # Test without context dict passed - self.assertEqual(_systemd.has_scope(), _expected) - # Test that context key is set when context dict is passed - context = {} - self.assertEqual(_systemd.has_scope(context), _expected) - self.assertEqual( - context, - { - "salt.utils.systemd.booted": True, - "salt.utils.systemd.version": _version, - }, - ) + with patch("salt.utils.systemd.status", return_value=True): + # Test without context dict passed + self.assertEqual(_systemd.has_scope(), _expected) + # Test that context key is set when context dict is passed + context = {"salt.utils.systemd.status": True} + self.assertEqual(_systemd.has_scope(context), _expected) + self.assertEqual( + context, + { + "salt.utils.systemd.booted": True, + "salt.utils.systemd.version": _version, + "salt.utils.systemd.status": True, + }, + ) def test_has_scope_systemd206(self): """ @@ -241,18 +245,20 @@ class SystemdTestCase(TestCase): # return data, so it is sufficient enough to mock it as True for # these tests. with patch("os.stat", side_effect=_booted_effect): - # Test without context dict passed - self.assertEqual(_systemd.has_scope(), _expected) - # Test that context key is set when context dict is passed - context = {} - self.assertEqual(_systemd.has_scope(context), _expected) - self.assertEqual( - context, - { - "salt.utils.systemd.booted": True, - "salt.utils.systemd.version": _version, - }, - ) + with patch("salt.utils.systemd.status", return_value=True): + # Test without context dict passed + self.assertEqual(_systemd.has_scope(), _expected) + # Test that context key is set when context dict is passed + context = {"salt.utils.systemd.status": True} + self.assertEqual(_systemd.has_scope(context), _expected) + self.assertEqual( + context, + { + "salt.utils.systemd.booted": True, + "salt.utils.systemd.version": _version, + "salt.utils.systemd.status": True, + }, + ) def test_has_scope_no_systemd(self): """ diff --git a/tools/ci.py b/tools/ci.py index efa97f70e05..a600a681873 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -9,35 +9,25 @@ import json import logging import os import pathlib +import pprint import random import shutil import sys import time -from typing import TYPE_CHECKING, Any +from typing import TYPE_CHECKING, Any, Literal import yaml from ptscripts import Context, command_group import tools.utils import tools.utils.gh -from tools.precommit.workflows import TEST_SALT_LISTING +from tools.precommit.workflows import TEST_SALT_LISTING, TEST_SALT_PKG_LISTING if sys.version_info < (3, 11): from typing_extensions import NotRequired, TypedDict else: from typing import NotRequired, TypedDict # pylint: disable=no-name-in-module -try: - import boto3 -except ImportError: - print( - "\nPlease run 'python -m pip install -r " - "requirements/static/ci/py{}.{}/tools.txt'\n".format(*sys.version_info), - file=sys.stderr, - flush=True, - ) - raise - log = logging.getLogger(__name__) # Define the command group @@ -153,93 +143,6 @@ def process_changed_files(ctx: Context, event_name: str, changed_files: pathlib. ctx.exit(0) -@ci.command( - name="runner-types", - arguments={ - "event_name": { - "help": "The name of the GitHub event being processed.", - }, - }, -) -def runner_types(ctx: Context, event_name: str): - """ - Set GH Actions 'runners' output to know what can run where. - """ - gh_event_path = os.environ.get("GITHUB_EVENT_PATH") or None - if gh_event_path is None: - ctx.warn("The 'GITHUB_EVENT_PATH' variable is not set.") - ctx.exit(1) - - if TYPE_CHECKING: - assert gh_event_path is not None - - github_output = os.environ.get("GITHUB_OUTPUT") - if github_output is None: - ctx.warn("The 'GITHUB_OUTPUT' variable is not set.") - ctx.exit(1) - - if TYPE_CHECKING: - assert github_output is not None - - try: - gh_event = json.loads(open(gh_event_path, encoding="utf-8").read()) - except Exception as exc: - ctx.error(f"Could not load the GH Event payload from {gh_event_path!r}:\n", exc) # type: ignore[arg-type] - ctx.exit(1) - - ctx.info("GH Event Payload:") - ctx.print(gh_event, soft_wrap=True) - # Let's it print until the end - time.sleep(1) - - ctx.info("Selecting which type of runners(self hosted runners or not) to run") - runners = {"github-hosted": False, "self-hosted": False} - if event_name == "pull_request": - ctx.info("Running from a pull request event") - pr_event_data = gh_event["pull_request"] - if ( - pr_event_data["head"]["repo"]["full_name"] - == pr_event_data["base"]["repo"]["full_name"] - ): - # If this is a pull request coming from the same repository, don't run anything - ctx.info("Pull request is coming from the same repository.") - ctx.info("Not running any jobs since they will run against the branch") - ctx.info("Writing 'runners' to the github outputs file:\n", runners) - with open(github_output, "a", encoding="utf-8") as wfh: - wfh.write(f"runners={json.dumps(runners)}\n") - ctx.exit(0) - - # This is a PR from a forked repository - ctx.info("Pull request is not comming from the same repository") - runners["github-hosted"] = runners["self-hosted"] = True - ctx.info("Writing 'runners' to the github outputs file:\n", runners) - with open(github_output, "a", encoding="utf-8") as wfh: - wfh.write(f"runners={json.dumps(runners)}\n") - ctx.exit(0) - - # This is a push or a scheduled event - ctx.info(f"Running from a {event_name!r} event") - if ( - gh_event["repository"]["fork"] is True - and os.environ.get("FORK_HAS_SELF_HOSTED_RUNNERS", "0") == "1" - ): - # This is running on a forked repository, don't run tests - ctx.info("The push event is on a forked repository") - runners["github-hosted"] = True - ctx.info("Writing 'runners' to the github outputs file:\n", runners) - with open(github_output, "a", encoding="utf-8") as wfh: - wfh.write(f"runners={json.dumps(runners)}\n") - ctx.exit(0) - - # Not running on a fork, or the fork has self hosted runners, run everything - ctx.info(f"The {event_name!r} event is from the main repository") - runners["github-hosted"] = runners["self-hosted"] = True - ctx.info("Writing 'runners' to the github outputs file:\n", runners) - with open(github_output, "a", encoding="utf-8") as wfh: - wfh.write(f"runners={json.dumps(runners)}") - ctx.exit(0) - - @ci.command( name="define-jobs", arguments={ @@ -394,6 +297,9 @@ def define_jobs( changed_files_contents["workflows"], changed_files_contents["golden_images"], } + if "test:os:all" in labels or any([_.startswith("test:os:macos") for _ in labels]): + jobs["build-deps-onedir-macos"] = True + jobs["build-salt-onedir-macos"] = True if jobs["test-pkg"] and required_pkg_test_changes == {"false"}: if "test:pkg" in labels: with open(github_step_summary, "a", encoding="utf-8") as wfh: @@ -635,6 +541,23 @@ def define_testrun(ctx: Context, event_name: str, changed_files: pathlib.Path): wfh.write(f"testrun={json.dumps(testrun)}\n") +def _build_matrix(os_kind, linux_arm_runner): + """ + Generate matrix for build ci/cd steps. + """ + _matrix = [{"arch": "x86_64"}] + if os_kind == "windows": + _matrix = [ + {"arch": "amd64"}, + {"arch": "x86"}, + ] + elif os_kind == "macos": + _matrix.append({"arch": "arm64"}) + elif os_kind == "linux" and linux_arm_runner: + _matrix.append({"arch": "arm64"}) + return _matrix + + @ci.command( arguments={ "distro_slug": { @@ -807,6 +730,7 @@ def pkg_matrix( "tiamat": "salt/py3/macos/minor/", "relenv": "salt/py3/macos/minor/", } + name = "macos" else: parts = distro_slug.split("-") name = parts[0] @@ -819,6 +743,8 @@ def pkg_matrix( else: arch = "x86_64" + ctx.info(f"Parsed linux slug parts {name} {version} {arch}") + if name == "amazonlinux": name = "amazon" elif name == "rockylinux": @@ -838,9 +764,11 @@ def pkg_matrix( "tiamat": f"salt/py3/{name}/{version}/{arch}/minor/", "relenv": f"salt/py3/{name}/{version}/{arch}/minor/", } + _matrix = [] - s3 = boto3.client("s3") - paginator = s3.get_paginator("list_objects_v2") + # XXX: fetch versions + # s3 = boto3.client("s3") + # paginator = s3.get_paginator("list_objects_v2") _matrix = [ { "tests-chunk": "install", @@ -854,38 +782,51 @@ def pkg_matrix( if backend == "relenv" and version >= tools.utils.Version("3006.5"): prefix.replace("/arm64/", "/aarch64/") # Using a paginator allows us to list recursively and avoid the item limit - page_iterator = paginator.paginate( - Bucket=f"salt-project-{tools.utils.SPB_ENVIRONMENT}-salt-artifacts-release", - Prefix=prefix, - ) + # page_iterator = paginator.paginate( + # Bucket=f"salt-project-{tools.utils.SPB_ENVIRONMENT}-salt-artifacts-release", + # Prefix=prefix, + # ) # Uses a jmespath expression to test if the wanted version is in any of the filenames - key_filter = f"Contents[?contains(Key, '{version}')][]" - if pkg_type == "MSI": - # TODO: Add this back when we add MSI upgrade and downgrade tests - # key_filter = f"Contents[?contains(Key, '{version}')] | [?ends_with(Key, '.msi')]" - continue - elif pkg_type == "NSIS": - key_filter = ( - f"Contents[?contains(Key, '{version}')] | [?ends_with(Key, '.exe')]" - ) - continue - objects = list(page_iterator.search(key_filter)) + # key_filter = f"Contents[?contains(Key, '{version}')][]" + # if pkg_type == "MSI": + # # TODO: Add this back when we add MSI upgrade and downgrade tests + # # key_filter = f"Contents[?contains(Key, '{version}')] | [?ends_with(Key, '.msi')]" + # continue + # elif pkg_type == "NSIS": + # key_filter = ( + # f"Contents[?contains(Key, '{version}')] | [?ends_with(Key, '.exe')]" + # ) + # continue + # objects = list(page_iterator.search(key_filter)) # Testing using `any` because sometimes the paginator returns `[None]` - if any(objects): - ctx.info( - f"Found {version} ({backend}) for {distro_slug}: {objects[0]['Key']}" - ) - for session in ("upgrade", "downgrade"): - if backend == "classic": - session += "-classic" - _matrix.append( - { - "tests-chunk": session, - "version": str(version), - } - ) + # if any(objects): + # ctx.info( + # f"Found {version} ({backend}) for {distro_slug}: {objects[0]['Key']}" + # ) + # for session in ("upgrade", "downgrade"): + # if backend == "classic": + # session += "-classic" + # _matrix.append( + # { + # "tests-chunk": session, + # "version": str(version), + # } + # ) + # else: + # ctx.info(f"No {version} ({backend}) for {distro_slug} at {prefix}") + if name == "windows": + sessions = [ + "upgrade", + ] else: - ctx.info(f"No {version} ({backend}) for {distro_slug} at {prefix}") + sessions = ["upgrade", "downgrade"] + for session in sessions: + _matrix.append( + { + "tests-chunk": session, + "version": str(version), + } + ) ctx.info("Generated matrix:") if not _matrix: @@ -894,12 +835,21 @@ def pkg_matrix( for entry in _matrix: ctx.print(" * ", entry, soft_wrap=True) + # if ( + # gh_event["repository"]["fork"] is True + # and "macos" in distro_slug + # and "arm64" in distro_slug + # ): + # # XXX: This should work now + # ctx.warn("Forks don't have access to MacOS 13 Arm64. Clearning the matrix.") + # _matrix.clear() + if ( - gh_event["repository"]["fork"] is True - and "macos" in distro_slug - and "arm64" in distro_slug + arch == "arm64" + and name not in ["windows", "macos"] + and os.environ.get("LINUX_ARM_RUNNER", "0") not in ("0", "") ): - ctx.warn("Forks don't have access to MacOS 13 Arm64. Clearning the matrix.") + ctx.warn("This fork does not have a linux arm64 runner configured.") _matrix.clear() if not _matrix: @@ -945,23 +895,18 @@ def get_ci_deps_matrix(ctx: Context): _matrix = { "linux": [ - {"distro-slug": "amazonlinux-2", "arch": "x86_64"}, - {"distro-slug": "amazonlinux-2-arm64", "arch": "arm64"}, + {"arch": "x86_64"}, ], "macos": [ - {"distro-slug": "macos-12", "arch": "x86_64"}, + {"distro-slug": "macos-13", "arch": "x86_64"}, + {"distro-slug": "macos-14", "arch": "arm64"}, ], "windows": [ {"distro-slug": "windows-2022", "arch": "amd64"}, ], } - if gh_event["repository"]["fork"] is not True: - _matrix["macos"].append( - { - "distro-slug": "macos-13-arm64", - "arch": "arm64", - } - ) + if os.environ.get("LINUX_ARM_RUNNER", "0") not in ("0", ""): + _matrix["linux"].append({"arch": "arm64"}) ctx.info("Generated matrix:") ctx.print(_matrix, soft_wrap=True) @@ -1220,7 +1165,7 @@ def get_pr_test_labels( f"The '{slug}' slug exists as a label but not as an available OS." ) selected.add(slug) - if slug != "all": + if slug != "all" and slug in available: available.remove(slug) continue test_labels.append(name) @@ -1583,3 +1528,349 @@ def upload_coverage(ctx: Context, reports_path: pathlib.Path, commit_sha: str = time.sleep(sleep_time) ctx.exit(0) + + +def _os_test_filter(osdef, transport, chunk, arm_runner): + """ + Filter out some test runs based on os, tranport and chunk to be run. + """ + if transport == "tcp" and chunk in ("unit", "functional"): + return False + if "macos" in osdef.slug and chunk == "scenarios": + return False + if not arm_runner: + return False + if transport == "tcp" and osdef.slug not in ( + "rockylinux-9", + "rockylinux-9-arm64", + "photonos-5", + "photonos-5-arm64", + "ubuntu-22.04", + "ubuntu-22.04-arm64", + ): + return False + return True + + +@ci.command( + name="workflow-config", + arguments={ + "salt_version": { + "help": "The version of salt being tested against", + }, + "event_name": { + "help": "The name of the GitHub event being processed.", + }, + "skip_tests": { + "help": "Skip running the Salt tests", + }, + "skip_pkg_tests": { + "help": "Skip running the Salt Package tests", + }, + "skip_pkg_download_tests": { + "help": "Skip running the Salt Package download tests", + }, + "changed_files": { + "help": ( + "Path to '.json' file containing the payload of changed files " + "from the 'dorny/paths-filter' GitHub action." + ), + }, + }, +) +def workflow_config( + ctx: Context, + salt_version: str, + event_name: str, + changed_files: pathlib.Path, + skip_tests: bool = False, + skip_pkg_tests: bool = False, + skip_pkg_download_tests: bool = False, +): + full = False + gh_event_path = os.environ.get("GITHUB_EVENT_PATH") or None + gh_event = None + config: dict[str, Any] = {} + + ctx.info(f"{'==== environment ====':^80s}") + ctx.info(f"{pprint.pformat(dict(os.environ))}") + ctx.info(f"{'==== end environment ====':^80s}") + ctx.info(f"Github event path is {gh_event_path}") + + if event_name != "pull_request": + full = True + + if gh_event_path is None: + labels = [] + config["linux_arm_runner"] = "" + else: + try: + gh_event = json.loads(open(gh_event_path, encoding="utf-8").read()) + except Exception as exc: + ctx.error( + f"Could not load the GH Event payload from {gh_event_path!r}:\n", exc + ) + ctx.exit(1) + + if "pull_request" in gh_event: + pr = gh_event["pull_request"]["number"] + labels = _get_pr_test_labels_from_event_payload(gh_event) + else: + labels = [] + ctx.warn("The 'pull_request' key was not found on the event payload.") + + if gh_event["repository"]["private"]: + # Private repositories need arm runner configuration environment + # variable. + if os.environ.get("LINUX_ARM_RUNNER", "0") in ("0", ""): + config["linux_arm_runner"] = "" + else: + config["linux_arm_runner"] = os.environ["LINUX_ARM_RUNNER"] + else: + # Public repositories can use github's arm64 runners. + config["linux_arm_runner"] = "ubuntu-24.04-arm" + + ctx.info(f"{'==== labels ====':^80s}") + ctx.info(f"{pprint.pformat(labels)}") + ctx.info(f"{'==== end labels ====':^80s}") + + ctx.info(f"{'==== github event ====':^80s}") + ctx.info(f"{pprint.pformat(gh_event)}") + ctx.info(f"{'==== end github event ====':^80s}") + + jobs = { + "lint": True, + "test": True, + "test-pkg": True, + "test-pkg-download": True, + "prepare-release": True, + "build-docs": True, + "build-source-tarball": True, + "build-deps-onedir": True, + "build-salt-onedir": True, + "build-pkgs": True, + "build-deps-ci": True, + } + + platforms: list[Literal["linux", "macos", "windows"]] = [ + "linux", + "macos", + "windows", + ] + + if skip_pkg_download_tests: + jobs["test-pkg-download"] = False + + config["jobs"] = jobs + config["build-matrix"] = { + platform: _build_matrix(platform, config["linux_arm_runner"]) + for platform in platforms + } + ctx.info(f"{'==== build matrix ====':^80s}") + ctx.info(f"{pprint.pformat(config['build-matrix'])}") + ctx.info(f"{'==== end build matrix ====':^80s}") + config["artifact-matrix"] = [] + for platform in platforms: + config["artifact-matrix"] += [ + dict({"platform": platform}, **_) for _ in config["build-matrix"][platform] + ] + ctx.info(f"{'==== artifact matrix ====':^80s}") + ctx.info(f"{pprint.pformat(config['artifact-matrix'])}") + ctx.info(f"{'==== end artifact matrix ====':^80s}") + + # Get salt releases. + releases = tools.utils.get_salt_releases(ctx) + str_releases = [str(version) for version in releases] + latest = str_releases[-1] + + # Get testing releases. + parsed_salt_version = tools.utils.Version(salt_version) + # We want the latest 4 major versions, removing the oldest if this version is a new major + num_major_versions = 4 + if parsed_salt_version.minor == 0: + num_major_versions = 3 + majors = sorted( + list( + { + # We aren't testing upgrades from anything before 3006.0 + # and we don't want to test 3007.? on the 3006.x branch + version.major + for version in releases + if version.major > 3005 and version.major <= parsed_salt_version.major + } + ) + )[-num_major_versions:] + testing_releases = [] + # Append the latest minor for each major + for major in majors: + minors_of_major = [version for version in releases if version.major == major] + testing_releases.append(minors_of_major[-1]) + str_releases = [str(version) for version in testing_releases] + ctx.info(f"str_releases {str_releases}") + + pkg_test_matrix: dict[str, list] = {_: [] for _ in platforms} + + if not config["linux_arm_runner"]: + # Filter out linux arm tests because we are on a private repository and + # no arm64 runner is defined. + TEST_SALT_LISTING["linux"] = list( + filter(lambda x: x.arch != "arm64", TEST_SALT_LISTING["linux"]) + ) + TEST_SALT_PKG_LISTING["linux"] = list( + filter(lambda x: x.arch != "arm64", TEST_SALT_PKG_LISTING["linux"]) + ) + if not skip_pkg_tests: + for platform in platforms: + pkg_test_matrix[platform] = [ + dict( + { + "tests-chunk": "install", + "version": None, + }, + **_.as_dict(), + ) + for _ in TEST_SALT_PKG_LISTING[platform] + ] + for version in str_releases: + for platform in platforms: + pkg_test_matrix[platform] += [ + dict( + { + "tests-chunk": "upgrade", + "version": version, + }, + **_.as_dict(), + ) + for _ in TEST_SALT_PKG_LISTING[platform] + ] + # Skipping downgrade tests on windows. These tests have never + # been run and currently fail. This should be fixed. + if platform == "windows": + continue + pkg_test_matrix[platform] += [ + dict( + { + "tests-chunk": "downgrade", + "version": version, + }, + **_.as_dict(), + ) + for _ in TEST_SALT_PKG_LISTING[platform] + ] + ctx.info(f"{'==== pkg test matrix ====':^80s}") + ctx.info(f"{pprint.pformat(pkg_test_matrix)}") + ctx.info(f"{'==== end pkg test matrix ====':^80s}") + + # We need to be careful about how many chunks we make. We are limitied to + # 256 items in a matrix. + _splits = { + "functional": 4, + "integration": 7, + "scenarios": 1, + "unit": 4, + } + + test_matrix: dict[str, list] = {} + if not skip_tests: + for platform in platforms: + for transport in ("zeromq", "tcp"): + for chunk in ("unit", "functional", "integration", "scenarios"): + splits = _splits.get(chunk) or 1 + if full and splits > 1: + for split in range(1, splits + 1): + if platform != "linux": + if platform not in test_matrix: + test_matrix[platform] = [] + test_matrix[platform] += [ + dict( + { + "transport": transport, + "tests-chunk": chunk, + "test-group": split, + "test-group-count": splits, + }, + **_.as_dict(), + ) + for _ in TEST_SALT_LISTING[platform] + if _os_test_filter( + _, transport, chunk, config["linux_arm_runner"] + ) + ] + else: + for arch in ["x86_64", "arm64"]: + if f"{platform}-{arch}" not in test_matrix: + test_matrix[f"{platform}-{arch}"] = [] + test_matrix[f"{platform}-{arch}"] += [ + dict( + { + "transport": transport, + "tests-chunk": chunk, + "test-group": split, + "test-group-count": splits, + }, + **_.as_dict(), + ) + for _ in TEST_SALT_LISTING[platform] + if _os_test_filter( + _, + transport, + chunk, + config["linux_arm_runner"], + ) + and _.arch == arch + ] + else: + if platform != "linux": + if platform not in test_matrix: + test_matrix[platform] = [] + test_matrix[platform] += [ + dict( + {"transport": transport, "tests-chunk": chunk}, + **_.as_dict(), + ) + for _ in TEST_SALT_LISTING[platform] + if _os_test_filter( + _, transport, chunk, config["linux_arm_runner"] + ) + ] + else: + for arch in ["x86_64", "arm64"]: + if f"{platform}-{arch}" not in test_matrix: + test_matrix[f"{platform}-{arch}"] = [] + test_matrix[f"{platform}-{arch}"] += [ + dict( + {"transport": transport, "tests-chunk": chunk}, + **_.as_dict(), + ) + for _ in TEST_SALT_LISTING[platform] + if _os_test_filter( + _, transport, chunk, config["linux_arm_runner"] + ) + and _.arch == arch + ] + + for key in test_matrix: + if len(test_matrix[key]) > 256: + ctx.warn( + f"Number of jobs in {platform} test matrix exceeds 256 ({len(test_matrix[key])}), jobs may not run." + ) + + ctx.info(f"{'==== test matrix ====':^80s}") + ctx.info(f"{pprint.pformat(test_matrix)}") + ctx.info(f"{'==== end test matrix ====':^80s}") + config["pkg-test-matrix"] = pkg_test_matrix + config["test-matrix"] = test_matrix + ctx.info("Jobs selected are") + for x, y in jobs.items(): + ctx.info(f"{x} = {y}") + github_step_summary = os.environ.get("GITHUB_STEP_SUMMARY") + if github_step_summary is not None: + with open(github_step_summary, "a", encoding="utf-8") as wfh: + wfh.write("Selected Jobs:\n") + for name, value in sorted(jobs.items()): + wfh.write(f" - `{name}`: {value}\n") + github_output = os.environ.get("GITHUB_OUTPUT") + if github_output is not None: + with open(github_output, "a", encoding="utf-8") as wfh: + wfh.write(f"config={json.dumps(config)}\n") + ctx.exit(0) diff --git a/tools/precommit/workflows.py b/tools/precommit/workflows.py index 81234530f2e..d4884b5da3f 100644 --- a/tools/precommit/workflows.py +++ b/tools/precommit/workflows.py @@ -13,119 +13,21 @@ from jinja2 import Environment, FileSystemLoader, StrictUndefined from ptscripts import Context, command_group import tools.utils -from tools.utils import Linux, MacOS, PlatformDefinitions, Windows +from tools.utils import ( + Linux, + LinuxPkg, + MacOS, + MacOSPkg, + PlatformDefinitions, + Windows, + WindowsPkg, +) log = logging.getLogger(__name__) WORKFLOWS = tools.utils.REPO_ROOT / ".github" / "workflows" TEMPLATES = WORKFLOWS / "templates" -TEST_SALT_LISTING = PlatformDefinitions( - { - "linux": [ - Linux(slug="rockylinux-8", display_name="Rocky Linux 8", arch="x86_64"), - Linux( - slug="rockylinux-8-arm64", - display_name="Rocky Linux 8 Arm64", - arch="arm64", - ), - Linux(slug="rockylinux-9", display_name="Rocky Linux 9", arch="x86_64"), - Linux( - slug="rockylinux-9-arm64", - display_name="Rocky Linux 9 Arm64", - arch="arm64", - ), - Linux(slug="amazonlinux-2", display_name="Amazon Linux 2", arch="x86_64"), - Linux( - slug="amazonlinux-2-arm64", - display_name="Amazon Linux 2 Arm64", - arch="arm64", - ), - Linux( - slug="amazonlinux-2023", - display_name="Amazon Linux 2023", - arch="x86_64", - ), - Linux( - slug="amazonlinux-2023-arm64", - display_name="Amazon Linux 2023 Arm64", - arch="arm64", - ), - Linux(slug="debian-11", display_name="Debian 11", arch="x86_64"), - Linux(slug="debian-11-arm64", display_name="Debian 11 Arm64", arch="arm64"), - Linux(slug="debian-12", display_name="Debian 12", arch="x86_64"), - Linux(slug="debian-12-arm64", display_name="Debian 12 Arm64", arch="arm64"), - Linux(slug="fedora-40", display_name="Fedora 40", arch="x86_64"), - Linux(slug="opensuse-15", display_name="Opensuse 15", arch="x86_64"), - Linux(slug="photonos-4", display_name="Photon OS 4", arch="x86_64"), - Linux( - slug="photonos-4-arm64", display_name="Photon OS 4 Arm64", arch="arm64" - ), - Linux( - slug="photonos-4", - display_name="Photon OS 4", - arch="x86_64", - fips=True, - ), - Linux( - slug="photonos-4-arm64", - display_name="Photon OS 4 Arm64", - arch="arm64", - fips=True, - ), - Linux(slug="photonos-5", display_name="Photon OS 5", arch="x86_64"), - Linux( - slug="photonos-5-arm64", display_name="Photon OS 5 Arm64", arch="arm64" - ), - Linux( - slug="photonos-5", - display_name="Photon OS 5", - arch="x86_64", - fips=True, - ), - Linux( - slug="photonos-5-arm64", - display_name="Photon OS 5 Arm64", - arch="arm64", - fips=True, - ), - Linux(slug="ubuntu-20.04", display_name="Ubuntu 20.04", arch="x86_64"), - Linux( - slug="ubuntu-20.04-arm64", - display_name="Ubuntu 20.04 Arm64", - arch="arm64", - ), - Linux(slug="ubuntu-22.04", display_name="Ubuntu 22.04", arch="x86_64"), - Linux( - slug="ubuntu-22.04-arm64", - display_name="Ubuntu 22.04 Arm64", - arch="arm64", - ), - Linux(slug="ubuntu-24.04", display_name="Ubuntu 24.04", arch="x86_64"), - Linux( - slug="ubuntu-24.04-arm64", - display_name="Ubuntu 24.04 Arm64", - arch="arm64", - ), - ], - "macos": [ - MacOS(slug="macos-12", display_name="macOS 12", arch="x86_64"), - MacOS(slug="macos-13", display_name="macOS 13", arch="x86_64"), - MacOS( - slug="macos-13-arm64", - display_name="macOS 13 Arm64", - arch="arm64", - runner="macos-13-xlarge", - ), - ], - "windows": [ - Windows(slug="windows-2016", display_name="Windows 2016", arch="amd64"), - Windows(slug="windows-2019", display_name="Windows 2019", arch="amd64"), - Windows(slug="windows-2022", display_name="Windows 2022", arch="amd64"), - ], - } -) - # Define the command group cgroup = command_group( name="workflows", @@ -134,6 +36,414 @@ cgroup = command_group( parent="pre-commit", ) +# Testing platforms +TEST_SALT_LISTING = PlatformDefinitions( + { + "linux": [ + Linux( + slug="rockylinux-8", + display_name="Rocky Linux 8", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:rockylinux-8", + ), + Linux( + slug="rockylinux-8-arm64", + display_name="Rocky Linux 8 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:rockylinux-8", + ), + Linux( + slug="rockylinux-9", + display_name="Rocky Linux 9", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:rockylinux-9", + ), + Linux( + slug="rockylinux-9-arm64", + display_name="Rocky Linux 9 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:rockylinux-9", + ), + Linux( + slug="amazonlinux-2", + display_name="Amazon Linux 2", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:amazonlinux-2", + ), + Linux( + slug="amazonlinux-2-arm64", + display_name="Amazon Linux 2 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:amazonlinux-2", + ), + Linux( + slug="amazonlinux-2023", + display_name="Amazon Linux 2023", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:amazonlinux-2023", + ), + Linux( + slug="amazonlinux-2023-arm64", + display_name="Amazon Linux 2023 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:amazonlinux-2023", + ), + Linux( + slug="debian-11", + display_name="Debian 11", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:debian-11", + ), + Linux( + slug="debian-11-arm64", + display_name="Debian 11 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:debian-11", + ), + Linux( + slug="debian-12", + display_name="Debian 12", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:debian-12", + ), + Linux( + slug="debian-12-arm64", + display_name="Debian 12 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:debian-12", + ), + Linux( + slug="fedora-40", + display_name="Fedora 40", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:fedora-40", + ), + # Linux(slug="opensuse-15", display_name="Opensuse 15", arch="x86_64"), + Linux( + slug="photonos-4", + display_name="Photon OS 4", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-4", + ), + Linux( + slug="photonos-4-arm64", + display_name="Photon OS 4 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-4", + ), + Linux( + slug="photonos-4", + display_name="Photon OS 4", + arch="x86_64", + fips=True, + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-4", + ), + Linux( + slug="photonos-4-arm64", + display_name="Photon OS 4 Arm64", + arch="arm64", + fips=True, + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-4", + ), + Linux( + slug="photonos-5", + display_name="Photon OS 5", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-5", + ), + Linux( + slug="photonos-5-arm64", + display_name="Photon OS 5 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-5", + ), + Linux( + slug="photonos-5", + display_name="Photon OS 5", + arch="x86_64", + fips=True, + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-5", + ), + Linux( + slug="photonos-5-arm64", + display_name="Photon OS 5 Arm64", + arch="arm64", + fips=True, + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-5", + ), + Linux( + slug="ubuntu-20.04", + display_name="Ubuntu 20.04", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-20.04", + ), + Linux( + slug="ubuntu-20.04-arm64", + display_name="Ubuntu 20.04 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-20.04", + ), + Linux( + slug="ubuntu-22.04", + display_name="Ubuntu 22.04", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-22.04", + ), + Linux( + slug="ubuntu-22.04-arm64", + display_name="Ubuntu 22.04 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-22.04", + ), + Linux( + slug="ubuntu-24.04", + display_name="Ubuntu 24.04", + arch="x86_64", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-24.04", + ), + Linux( + slug="ubuntu-24.04-arm64", + display_name="Ubuntu 24.04 Arm64", + arch="arm64", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-24.04", + ), + ], + "macos": [ + MacOS(slug="macos-13", display_name="macOS 13", arch="x86_64"), + MacOS(slug="macos-14", display_name="macOS 14 (M1)", arch="arm64"), + MacOS(slug="macos-15", display_name="macOS 15 (M1)", arch="arm64"), + ], + "windows": [ + # Windows(slug="windows-2016", display_name="Windows 2016", arch="amd64"), + Windows(slug="windows-2019", display_name="Windows 2019", arch="amd64"), + Windows(slug="windows-2022", display_name="Windows 2022", arch="amd64"), + ], + } +) +TEST_SALT_PKG_LISTING = PlatformDefinitions( + { + "linux": [ + LinuxPkg( + slug="rockylinux-8", + display_name="Rocky Linux 8", + arch="x86_64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:rockylinux-8", + ), + LinuxPkg( + slug="rockylinux-8-arm64", + display_name="Rocky Linux 8 Arm64", + arch="arm64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:rockylinux-8", + ), + LinuxPkg( + slug="rockylinux-9", + display_name="Rocky Linux 9", + arch="x86_64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:rockylinux-9", + ), + LinuxPkg( + slug="rockylinux-9-arm64", + display_name="Rocky Linux 9 Arm64", + arch="arm64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:rockylinux-9", + ), + LinuxPkg( + slug="amazonlinux-2", + display_name="Amazon Linux 2", + arch="x86_64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:amazonlinux-2", + ), + LinuxPkg( + slug="amazonlinux-2-arm64", + display_name="Amazon Linux 2 Arm64", + arch="arm64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:amazonlinux-2", + ), + LinuxPkg( + slug="amazonlinux-2023", + display_name="Amazon Linux 2023", + arch="x86_64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:amazonlinux-2023", + ), + LinuxPkg( + slug="amazonlinux-2023-arm64", + display_name="Amazon Linux 2023 Arm64", + arch="arm64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:amazonlinux-2023", + ), + LinuxPkg( + slug="debian-11", + display_name="Debian 11", + arch="x86_64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:debian-11", + ), + LinuxPkg( + slug="debian-11-arm64", + display_name="Debian 11 Arm64", + arch="arm64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:debian-11", + ), + LinuxPkg( + slug="debian-12", + display_name="Debian 12", + arch="x86_64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:debian-12", + ), + LinuxPkg( + slug="debian-12-arm64", + display_name="Debian 12 Arm64", + arch="arm64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:debian-12", + ), + LinuxPkg( + slug="photonos-4", + display_name="Photon OS 4", + arch="x86_64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-4", + ), + LinuxPkg( + slug="photonos-4-arm64", + display_name="Photon OS 4 Arm64", + arch="arm64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-4", + ), + LinuxPkg( + slug="photonos-4", + display_name="Photon OS 4", + arch="x86_64", + pkg_type="rpm", + fips=True, + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-4", + ), + LinuxPkg( + slug="photonos-4-arm64", + display_name="Photon OS 4 Arm64", + arch="arm64", + pkg_type="rpm", + fips=True, + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-4", + ), + LinuxPkg( + slug="photonos-5", + display_name="Photon OS 5", + arch="x86_64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-5", + ), + LinuxPkg( + slug="photonos-5-arm64", + display_name="Photon OS 5 Arm64", + arch="arm64", + pkg_type="rpm", + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-5", + ), + LinuxPkg( + slug="photonos-5", + display_name="Photon OS 5", + arch="x86_64", + pkg_type="rpm", + fips=True, + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-5", + ), + LinuxPkg( + slug="photonos-5-arm64", + display_name="Photon OS 5 Arm64", + arch="arm64", + pkg_type="rpm", + fips=True, + container="ghcr.io/saltstack/salt-ci-containers/testing:photon-5", + ), + LinuxPkg( + slug="ubuntu-20.04", + display_name="Ubuntu 20.04", + arch="x86_64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-20.04", + ), + LinuxPkg( + slug="ubuntu-20.04-arm64", + display_name="Ubuntu 20.04 Arm64", + arch="arm64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-20.04", + ), + LinuxPkg( + slug="ubuntu-22.04", + display_name="Ubuntu 22.04", + arch="x86_64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-22.04", + ), + LinuxPkg( + slug="ubuntu-22.04-arm64", + display_name="Ubuntu 22.04 Arm64", + arch="arm64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-22.04", + ), + LinuxPkg( + slug="ubuntu-24.04", + display_name="Ubuntu 24.04", + arch="x86_64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-24.04", + ), + LinuxPkg( + slug="ubuntu-24.04-arm64", + display_name="Ubuntu 24.04 Arm64", + arch="arm64", + pkg_type="deb", + container="ghcr.io/saltstack/salt-ci-containers/testing:ubuntu-24.04", + ), + ], + "macos": [ + MacOSPkg(slug="macos-13", display_name="macOS 13", arch="x86_64"), + MacOSPkg(slug="macos-14", display_name="macOS 14 (M1)", arch="arm64"), + MacOSPkg(slug="macos-15", display_name="macOS 15 (M1)", arch="arm64"), + ], + "windows": [ + WindowsPkg( + slug="windows-2019", + display_name="Windows 2019", + arch="amd64", + pkg_type="NSIS", + ), + WindowsPkg( + slug="windows-2019", + display_name="Windows 2019", + arch="amd64", + pkg_type="MSI", + ), + WindowsPkg( + slug="windows-2022", + display_name="Windows 2022", + arch="amd64", + pkg_type="NSIS", + ), + WindowsPkg( + slug="windows-2022", + display_name="Windows 2022", + arch="amd64", + pkg_type="MSI", + ), + ], + } +) + class NeedsTracker: def __init__(self): @@ -191,221 +501,7 @@ def generate_workflows(ctx: Context): }, }, } - - test_salt_pkg_listing = PlatformDefinitions( - { - "linux": [ - Linux( - slug="rockylinux-8", - display_name="Rocky Linux 8", - arch="x86_64", - pkg_type="rpm", - ), - Linux( - slug="rockylinux-8-arm64", - display_name="Rocky Linux 8 Arm64", - arch="arm64", - pkg_type="rpm", - ), - Linux( - slug="rockylinux-9", - display_name="Rocky Linux 9", - arch="x86_64", - pkg_type="rpm", - ), - Linux( - slug="rockylinux-9-arm64", - display_name="Rocky Linux 9 Arm64", - arch="arm64", - pkg_type="rpm", - ), - Linux( - slug="amazonlinux-2", - display_name="Amazon Linux 2", - arch="x86_64", - pkg_type="rpm", - ), - Linux( - slug="amazonlinux-2-arm64", - display_name="Amazon Linux 2 Arm64", - arch="arm64", - pkg_type="rpm", - ), - Linux( - slug="amazonlinux-2023", - display_name="Amazon Linux 2023", - arch="x86_64", - pkg_type="rpm", - ), - Linux( - slug="amazonlinux-2023-arm64", - display_name="Amazon Linux 2023 Arm64", - arch="arm64", - pkg_type="rpm", - ), - Linux( - slug="debian-11", - display_name="Debian 11", - arch="x86_64", - pkg_type="deb", - ), - Linux( - slug="debian-11-arm64", - display_name="Debian 11 Arm64", - arch="arm64", - pkg_type="deb", - ), - Linux( - slug="debian-12", - display_name="Debian 12", - arch="x86_64", - pkg_type="deb", - ), - Linux( - slug="debian-12-arm64", - display_name="Debian 12 Arm64", - arch="arm64", - pkg_type="deb", - ), - Linux( - slug="photonos-4", - display_name="Photon OS 4", - arch="x86_64", - pkg_type="rpm", - ), - Linux( - slug="photonos-4-arm64", - display_name="Photon OS 4 Arm64", - arch="arm64", - pkg_type="rpm", - ), - Linux( - slug="photonos-4", - display_name="Photon OS 4", - arch="x86_64", - pkg_type="rpm", - fips=True, - ), - Linux( - slug="photonos-4-arm64", - display_name="Photon OS 4 Arm64", - arch="arm64", - pkg_type="rpm", - fips=True, - ), - Linux( - slug="photonos-5", - display_name="Photon OS 5", - arch="x86_64", - pkg_type="rpm", - ), - Linux( - slug="photonos-5-arm64", - display_name="Photon OS 5 Arm64", - arch="arm64", - pkg_type="rpm", - ), - Linux( - slug="photonos-5", - display_name="Photon OS 5", - arch="x86_64", - pkg_type="rpm", - fips=True, - ), - Linux( - slug="photonos-5-arm64", - display_name="Photon OS 5 Arm64", - arch="arm64", - pkg_type="rpm", - fips=True, - ), - Linux( - slug="ubuntu-20.04", - display_name="Ubuntu 20.04", - arch="x86_64", - pkg_type="deb", - ), - Linux( - slug="ubuntu-20.04-arm64", - display_name="Ubuntu 20.04 Arm64", - arch="arm64", - pkg_type="deb", - ), - Linux( - slug="ubuntu-22.04", - display_name="Ubuntu 22.04", - arch="x86_64", - pkg_type="deb", - ), - Linux( - slug="ubuntu-22.04-arm64", - display_name="Ubuntu 22.04 Arm64", - arch="arm64", - pkg_type="deb", - ), - Linux( - slug="ubuntu-24.04", - display_name="Ubuntu 24.04", - arch="x86_64", - pkg_type="deb", - ), - Linux( - slug="ubuntu-24.04-arm64", - display_name="Ubuntu 24.04 Arm64", - arch="arm64", - pkg_type="deb", - ), - ], - "macos": [ - MacOS(slug="macos-12", display_name="macOS 12", arch="x86_64"), - MacOS(slug="macos-13", display_name="macOS 13", arch="x86_64"), - MacOS( - slug="macos-13-arm64", - display_name="macOS 13 Arm64", - arch="arm64", - runner="macos-13-xlarge", - ), - ], - "windows": [ - Windows( - slug="windows-2016", - display_name="Windows 2016", - arch="amd64", - pkg_type="NSIS", - ), - Windows( - slug="windows-2016", - display_name="Windows 2016", - arch="amd64", - pkg_type="MSI", - ), - Windows( - slug="windows-2019", - display_name="Windows 2019", - arch="amd64", - pkg_type="NSIS", - ), - Windows( - slug="windows-2019", - display_name="Windows 2019", - arch="amd64", - pkg_type="MSI", - ), - Windows( - slug="windows-2022", - display_name="Windows 2022", - arch="amd64", - pkg_type="NSIS", - ), - Windows( - slug="windows-2022", - display_name="Windows 2022", - arch="amd64", - pkg_type="MSI", - ), - ], - } - ) + test_salt_pkg_listing = TEST_SALT_PKG_LISTING build_rpms_listing = [] rpm_os_versions: dict[str, list[str]] = { @@ -474,6 +570,9 @@ def generate_workflows(ctx: Context): "includes": includes, "conclusion_needs": NeedsTracker(), "test_salt_needs": NeedsTracker(), + "test_salt_linux_needs": NeedsTracker(), + "test_salt_macos_needs": NeedsTracker(), + "test_salt_windows_needs": NeedsTracker(), "test_salt_pkg_needs": NeedsTracker(), "test_repo_needs": NeedsTracker(), "prepare_workflow_needs": NeedsTracker(), diff --git a/tools/utils/__init__.py b/tools/utils/__init__.py index 6f79b4c4493..c11677b0079 100644 --- a/tools/utils/__init__.py +++ b/tools/utils/__init__.py @@ -70,6 +70,31 @@ class OS: class Linux(OS): platform: str = attr.ib(default="linux") fips: bool = attr.ib(default=False) + container: str = attr.ib(default=None) + + @property + def job_name(self): + return f"test-{ self.slug.replace('.', '') }{'-fips' if self.fips else ''}" + + def as_dict(self): + return { + "platform": self.platform, + "slug": self.slug, + "arch": self.arch, + "display_name": self.display_name, + "pkg_type": self.pkg_type, + "fips": self.fips, + "container": self.container, + "job_name": self.job_name, + } + + +@attr.s(frozen=True, slots=True) +class LinuxPkg(Linux): + + @property + def job_name(self): + return f"test-pkg-{ self.slug.replace('.', '') }{ '-fips' if self.fips else ''}" @attr.s(frozen=True, slots=True) @@ -81,6 +106,29 @@ class MacOS(OS): def _default_runner(self): return self.slug + @property + def job_name(self): + return f"test-{ self.slug.replace('.', '') }" + + def as_dict(self): + return { + "platform": self.platform, + "slug": self.slug, + "arch": self.arch, + "display_name": self.display_name, + "pkg_type": self.pkg_type, + "runner": self.runner, + "job_name": self.job_name, + } + + +@attr.s(frozen=True, slots=True) +class MacOSPkg(MacOS): + + @property + def job_name(self): + return f"test-pkg-{ self.slug.replace('.', '') }" + @attr.s(frozen=True, slots=True) class Windows(OS): @@ -89,6 +137,28 @@ class Windows(OS): def _get_default_arch(self): return "amd64" + @property + def job_name(self): + return f"test-{ self.slug.replace('.', '') }" + + def as_dict(self): + return { + "platform": self.platform, + "slug": self.slug, + "arch": self.arch, + "display_name": self.display_name, + "pkg_type": self.pkg_type, + "job_name": self.job_name, + } + + +@attr.s(frozen=True, slots=True) +class WindowsPkg(Windows): + + @property + def job_name(self): + return f"test-pkg-{ self.slug.replace('.', '') }-{ self.pkg_type.lower() }" + class PlatformDefinitions(TypedDict): linux: list[Linux] @@ -186,7 +256,9 @@ class Version(packaging.version.Version): return hash(str(self)) -def get_salt_releases(ctx: Context, repository: str) -> list[Version]: +def get_salt_releases( + ctx: Context, repository: str = "saltstack/salt" +) -> list[Version]: """ Return a list of salt versions """