name: CI on: push: {} pull_request: {} schedule: # https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onschedule - cron: '0 */8 * * *' # Run every 8 hours workflow_dispatch: inputs: salt-version: type: string default: "" description: > The Salt version to set prior to running tests or building packages. If not set, it is discover at run time, like, for example, capturing the output of running `python3 salt/version.py` testrun-type: description: Type of test run required: true default: 'full' type: choice options: - full - changed env: COLUMNS: 160 CACHE_SEED: SEED-4 # Bump the number to invalidate all caches RELENV_DATA: "${{ github.workspace }}/.relenv" permissions: contents: read # for dorny/paths-filter to fetch a list of changed files pull-requests: read # for dorny/paths-filter to read pull requests concurrency: # Concurrency is defined in a way that concurrent builds against branches do # not cancel previous builds. # However, for every new build against the same pull request source branch, # all older builds against that same branch get canceled. group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: prepare-workflow: name: Prepare Workflow Run runs-on: ubuntu-latest outputs: jobs: ${{ steps.define-jobs.outputs.jobs }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} testrun: ${{ steps.define-testrun.outputs.testrun }} salt-version: ${{ steps.setup-salt-version.outputs.salt-version }} cache-seed: ${{ steps.set-cache-seed.outputs.cache-seed }} steps: - uses: actions/checkout@v3 with: fetch-depth: 0 # Full clone to also get the tags to get the right salt version - name: Get Changed Files if: ${{ github.event_name != 'schedule' && github.event_name != 'push'}} id: changed-files uses: dorny/paths-filter@v2 with: token: ${{ github.token }} list-files: json filters: | repo: - added|modified: - '**' doc-requirements: - added|modified: &doc_requirements - requirements/static/ci/py3.*/docs.txt lint-requirements: - added|modified: &lint_requirements - requirements/static/ci/py3.*/lint.txt pkg_requirements: - added|modified: &pkg_requirements - requirements/static/pkg/py3.*/darwin.txt - requirements/static/pkg/py3.*/linux.txt - requirements/static/pkg/py3.*/freebsd.txt - requirements/static/pkg/py3.*/windows.txt test_requirements: - added|modified: &test_requirements - requirements/static/ci/py3.*/darwin.txt - requirements/static/ci/py3.*/linux.txt - requirements/static/ci/py3.*/freebsd.txt - requirements/static/ci/py3.*/windows.txt - requirements/static/ci/py3.*/darwin-crypto.txt - requirements/static/ci/py3.*/linux-crypto.txt - requirements/static/ci/py3.*/freebsd-crypto.txt - requirements/static/ci/py3.*/windows-crypto.txt deleted: - deleted: - '**' docs: - added|modified: - doc/** - *doc_requirements salt: - added|modified: &salt_added_modified - setup.py - noxfile.py - salt/**/*.py - tasks/**/*.py - tools/**/*.py tests: - added|modified: &tests_added_modified - tests/**/*.py lint: - added|modified: - .pylintrc - *lint_requirements golden_images: - added|modified: - cicd/golden-images.json testrun: - added|modified: - *salt_added_modified - *tests_added_modified - name: Set up Python 3.10 uses: actions/setup-python@v4 with: python-version: "3.10" - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts - name: Pretty Print The GH Actions Event run: tools ci print-gh-event - name: Setup Salt Version id: setup-salt-version uses: ./.github/actions/setup-salt-version with: salt-version: "${{ inputs.salt-version }}" - name: Write Changed Files To A Local File if: ${{ github.event_name != 'schedule' && github.event_name != 'push'}} run: echo '${{ toJSON(steps.changed-files.outputs) }}' > changed-files.json - name: Check Local Changed Files Contents if: ${{ github.event_name != 'schedule' && github.event_name != 'push'}} run: cat changed-files.json - name: Process Changed Files if: ${{ github.event_name != 'schedule' && github.event_name != 'push'}} id: process-changed-files run: tools ci process-changed-files ${{ github.event_name }} changed-files.json - name: Check Collected Changed Files if: ${{ github.event_name != 'schedule' && github.event_name != 'push'}} run: echo '${{ steps.process-changed-files.outputs.changed-files }}' | jq -C '.' - name: Define Jobs To Run id: define-jobs run: tools ci define-jobs ${{ github.event_name }} - name: Check Collected Jobs run: echo '${{ steps.define-jobs.outputs.jobs }}' | jq -C '.' - name: Define Testrun id: define-testrun run: tools ci define-testrun ${{ github.event_name }} changed-files.json - name: Check Defined Test Run run: echo '${{ steps.define-testrun.outputs.testrun }}' | jq -C '.' - name: Check Contents of generated testrun-changed-files.txt if: ${{ fromJSON(steps.define-testrun.outputs.testrun)['type'] != 'full' }} run: cat testrun-changed-files.txt || true - name: Upload testrun-changed-files.txt if: ${{ fromJSON(steps.define-testrun.outputs.testrun)['type'] != 'full' }} uses: actions/upload-artifact@v3 with: name: testrun-changed-files.txt path: testrun-changed-files.txt - name: Set Cache Seed Output id: set-cache-seed run: | echo "cache-seed=${{ env.CACHE_SEED }}" >> "$GITHUB_OUTPUT" pre-commit: name: Pre-Commit if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} uses: ./.github/workflows/pre-commit-action.yml needs: - prepare-workflow with: changed-files: ${{ needs.prepare-workflow.outputs.changed-files }} docs: name: Build Docs if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} uses: ./.github/workflows/docs-action.yml needs: - prepare-workflow with: changed-files: ${{ needs.prepare-workflow.outputs.changed-files }} lint: name: Lint if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} uses: ./.github/workflows/lint-action.yml needs: - prepare-workflow with: changed-files: ${{ needs.prepare-workflow.outputs.changed-files }} release-changes: name: Create release diff if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} needs: - prepare-workflow runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python 3.10 uses: actions/setup-python@v4 with: python-version: "3.10" - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts - name: Setup Salt Version id: setup-salt-version uses: ./.github/actions/setup-salt-version with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - name: Generate Changes Diff uses: ./.github/actions/release-changes build-source-tarball: name: Build Source Tarball if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} needs: - prepare-workflow - release-changes runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Set up Python 3.10 uses: actions/setup-python@v4 with: python-version: "3.10" - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts - name: Setup Salt Version id: setup-salt-version uses: ./.github/actions/setup-salt-version with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - name: Build Source Tarball uses: ./.github/actions/build-source-tarball build-deps-onedir: name: Build Dependencies Onedir if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} 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.jobs)['self-hosted-runners'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} build-salt-onedir: name: Build Salt Onedir needs: - prepare-workflow - build-deps-onedir - build-source-tarball uses: ./.github/workflows/build-salt-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.jobs)['self-hosted-runners'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} build-pkgs: name: Build Salt Packages needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/build-packages.yml with: salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" self-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} github-hosted-runners: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} windows-2016: name: Windows 2016 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: windows-2016 nox-session: ci-test-onedir platform: windows arch: amd64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} windows-2019: name: Windows 2019 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: windows-2019 nox-session: ci-test-onedir platform: windows arch: amd64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} windows-2022: name: Windows 2022 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: windows-2022 nox-session: ci-test-onedir platform: windows arch: amd64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} macos-12: name: macOS 12 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['github-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action-macos.yml with: distro-slug: macos-12 nox-session: ci-test-onedir platform: darwin arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} almalinux-8: name: Alma Linux 8 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: almalinux-8 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} almalinux-9: name: Alma Linux 9 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: almalinux-9 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} amazonlinux-2: name: Amazon Linux 2 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: amazonlinux-2 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} archlinux-lts: name: Arch Linux LTS if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: archlinux-lts nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} centos-7: name: CentOS 7 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: centos-7 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} centosstream-8: name: CentOS Stream 8 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: centosstream-8 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} centosstream-9: name: CentOS Stream 9 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: centosstream-9 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} debian-10: name: Debian 10 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: debian-10 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} debian-11: name: Debian 11 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: debian-11 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} debian-11-arm64: name: Debian 11 Arm64 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: debian-11-arm64 nox-session: ci-test-onedir platform: linux arch: aarch64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} fedora-36: name: Fedora 36 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: fedora-36 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} opensuse-15: name: Opensuse 15 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: opensuse-15 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} photon-3: name: Photon OS 3 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: photonos-3 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} photon-4: name: Photon OS 4 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: photonos-4 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} ubuntu-1804: name: Ubuntu 18.04 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: ubuntu-18.04 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} ubuntu-2004: name: Ubuntu 20.04 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: ubuntu-20.04 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} ubuntu-2004-arm64: name: Ubuntu 20.04 Arm64 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: ubuntu-20.04-arm64 nox-session: ci-test-onedir platform: linux arch: aarch64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} ubuntu-2204: name: Ubuntu 22.04 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: ubuntu-22.04 nox-session: ci-test-onedir platform: linux arch: x86_64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} ubuntu-2204-arm64: name: Ubuntu 22.04 Arm64 if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['self-hosted-runners'] }} needs: - prepare-workflow - build-salt-onedir uses: ./.github/workflows/test-action.yml with: distro-slug: ubuntu-22.04-arm64 nox-session: ci-test-onedir platform: linux arch: aarch64 testrun: ${{ needs.prepare-workflow.outputs.testrun }} salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" cache-seed: ${{ needs.prepare-workflow.outputs.cache-seed }} 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() needs: - pre-commit - docs - lint - build-deps-onedir - build-salt-onedir - build-pkgs - almalinux-8 - almalinux-9 - amazonlinux-2 - archlinux-lts - centos-7 - centosstream-8 - centosstream-9 - debian-10 - debian-11 - debian-11-arm64 - fedora-36 - opensuse-15 - photon-3 - photon-4 - ubuntu-1804 - ubuntu-2004 - ubuntu-2004-arm64 - ubuntu-2204 - ubuntu-2204-arm64 - windows-2016 - windows-2019 - windows-2022 - macos-12 uses: ./.github/workflows/set-workflow-conclusion.yml