From 16bead7bcc90b24dabe5f0925667235fcf355323 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 20 Mar 2024 07:44:29 +0000 Subject: [PATCH 01/32] Remove log call which no longer makes sense --- tests/conftest.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/conftest.py b/tests/conftest.py index aef67bcb246..8384f4a0352 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -448,7 +448,6 @@ def pytest_collection_modifyitems(config, items): groups_collection_modifyitems(config, items) from_filenames_collection_modifyitems(config, items) - log.warning("Modifying collected tests to keep track of fixture usage") timeout_marker_tests_paths = ( str(PYTESTS_DIR / "pkg"), str(PYTESTS_DIR / "scenarios"), From ebb02d6c3a5908c3cf65409828d59044457a9705 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 20 Mar 2024 10:10:30 +0000 Subject: [PATCH 02/32] Adjust some tests to get passing nightly builds again --- .../modules/state/requisites/test_listen.py | 62 +++++---- tests/pytests/functional/states/test_user.py | 119 ++++++++++-------- 2 files changed, 93 insertions(+), 88 deletions(-) diff --git a/tests/pytests/functional/modules/state/requisites/test_listen.py b/tests/pytests/functional/modules/state/requisites/test_listen.py index 35b8c131e22..d0126e76d24 100644 --- a/tests/pytests/functional/modules/state/requisites/test_listen.py +++ b/tests/pytests/functional/modules/state/requisites/test_listen.py @@ -318,41 +318,35 @@ def test_listen_requisite_resolution_names(state, state_tree): assert "test_|-listener_service_|-crond_|-mod_watch" in ret -def test_onlyif_req(state, subtests): - onlyif = [{}] - with subtests.test(onlyif=onlyif): - ret = state.single( - name="onlyif test", fun="test.succeed_with_changes", onlyif=onlyif - ) - assert ret.result is True - assert ret.comment == "Success!" - - onlyif = [{"fun": "test.true"}] - with subtests.test(onlyif=onlyif): - ret = state.single( - name="onlyif test", fun="test.succeed_without_changes", onlyif=onlyif - ) - assert ret.result is True - assert not ret.changes - assert ret.comment == "Success!" - - onlyif = [{"fun": "test.false"}] - with subtests.test(onlyif=onlyif): - ret = state.single( - name="onlyif test", fun="test.fail_with_changes", onlyif=onlyif - ) - assert ret.result is True - assert not ret.changes - assert ret.comment == "onlyif condition is false" - - onlyif = [{"fun": "test.true"}] - with subtests.test(onlyif=onlyif): - ret = state.single( - name="onlyif test", fun="test.fail_with_changes", onlyif=onlyif - ) - assert ret.result is False +@pytest.mark.parametrize( + "fun,onlyif,result,comment,assert_changes", + ( + ("test.succeed_with_changes", [{}], True, "Success!", None), + ( + "test.succeed_without_changes", + [{"fun": "test.true"}], + True, + "Success!", + False, + ), + ( + "test.fail_with_changes", + [{"fun": "test.false"}], + True, + "onlyif condition is false", + False, + ), + ("test.fail_with_changes", [{"fun": "test.true"}], False, "Failure!", True), + ), +) +def test_onlyif_req(state, fun, onlyif, result, comment, assert_changes): + ret = state.single(name="onlyif test", fun=fun, onlyif=onlyif) + assert ret.result is result + assert ret.comment == comment + if assert_changes is True: assert ret.changes - assert ret.comment == "Failure!" + elif assert_changes is False: + assert not ret.changes def test_listen_requisite_not_exist(state, state_tree): diff --git a/tests/pytests/functional/states/test_user.py b/tests/pytests/functional/states/test_user.py index 43ae8513012..28be3cd8618 100644 --- a/tests/pytests/functional/states/test_user.py +++ b/tests/pytests/functional/states/test_user.py @@ -6,6 +6,7 @@ user present with custom homedir """ import pathlib +import random import shutil import sys @@ -43,6 +44,11 @@ def username(sminion): pass +@pytest.fixture +def guid(): + return random.randint(60000, 61000) + + @pytest.fixture def user_home(username, tmp_path): if salt.utils.platform.is_windows(): @@ -429,73 +435,78 @@ def test_user_present_change_optional_groups( assert user_info["groups"] == [group_1.name] +@pytest.fixture +def user_present_groups(states): + groups = ["testgroup1", "testgroup2"] + try: + yield groups + finally: + for group in groups: + ret = states.group.absent(name=group) + assert ret.result is True + + @pytest.mark.skip_unless_on_linux(reason="underlying functionality only runs on Linux") -def test_user_present_no_groups(modules, states, username): +def test_user_present_no_groups(modules, states, username, user_present_groups, guid): """ test user.present when groups arg is not included by the group is created in another state. Re-run the states to ensure there are not changes and it is idempotent. """ - groups = ["testgroup1", "testgroup2"] - try: - ret = states.group.present(name=username, gid=61121) - assert ret.result is True + ret = states.group.present(name=username, gid=guid) + assert ret.result is True - ret = states.user.present( - name=username, - uid=61121, - gid=61121, - ) - assert ret.result is True - assert ret.changes["groups"] == [username] - assert ret.changes["name"] == username + ret = states.user.present( + name=username, + uid=guid, + gid=guid, + ) + assert ret.result is True + assert ret.changes["groups"] == [username] + assert ret.changes["name"] == username - ret = states.group.present( - name=groups[0], - members=[username], - ) - assert ret.changes["members"] == [username] + ret = states.group.present( + name=user_present_groups[0], + members=[username], + ) + assert ret.changes["members"] == [username] - ret = states.group.present( - name=groups[1], - members=[username], - ) - assert ret.changes["members"] == [username] + ret = states.group.present( + name=user_present_groups[1], + members=[username], + ) + assert ret.changes["members"] == [username] - user_info = modules.user.info(username) - assert user_info - assert user_info["groups"] == [username, groups[0], groups[1]] + user_info = modules.user.info(username) + assert user_info + assert user_info["groups"] == [username, *user_present_groups] - # run again, expecting no changes - ret = states.group.present(name=username) - assert ret.result is True - assert ret.changes == {} + # run again, expecting no changes + ret = states.group.present(name=username) + assert ret.result is True + assert ret.changes == {} - ret = states.user.present( - name=username, - ) - assert ret.result is True - assert ret.changes == {} + ret = states.user.present( + name=username, + ) + assert ret.result is True + assert ret.changes == {} - ret = states.group.present( - name=groups[0], - members=[username], - ) - assert ret.result is True - assert ret.changes == {} + ret = states.group.present( + name=user_present_groups[0], + members=[username], + ) + assert ret.result is True + assert ret.changes == {} - ret = states.group.present( - name=groups[1], - members=[username], - ) - assert ret.result is True - assert ret.changes == {} + ret = states.group.present( + name=user_present_groups[1], + members=[username], + ) + assert ret.result is True + assert ret.changes == {} - user_info = modules.user.info(username) - assert user_info - assert user_info["groups"] == [username, groups[0], groups[1]] - finally: - for group in groups: - ret = states.group.absent(name=group) - assert ret.result is True + user_info = modules.user.info(username) + assert user_info + assert user_info["groups"] == [username, *user_present_groups] From e525bbada3c6fccb7289f7a999c59460e5e30142 Mon Sep 17 00:00:00 2001 From: Shane Lee Date: Wed, 20 Mar 2024 15:22:11 -0600 Subject: [PATCH 03/32] Remove vcredist and ucrt from Windows install --- pkg/windows/install_vs_buildtools.ps1 | 1 - pkg/windows/msi/Product.wxs | 13 -- pkg/windows/msi/README-how-to-build.md | 4 - pkg/windows/msi/build_pkg.ps1 | 33 ---- .../nsis/installer/Salt-Minion-Setup.nsi | 166 ------------------ pkg/windows/nsis/tests/setup.ps1 | 19 +- pkg/windows/prep_salt.ps1 | 35 ---- 7 files changed, 1 insertion(+), 270 deletions(-) diff --git a/pkg/windows/install_vs_buildtools.ps1 b/pkg/windows/install_vs_buildtools.ps1 index 238b0175e42..1d51058d2f1 100644 --- a/pkg/windows/install_vs_buildtools.ps1 +++ b/pkg/windows/install_vs_buildtools.ps1 @@ -103,7 +103,6 @@ if ( $install_build_tools ) { "--add Microsoft.VisualStudio.Component.Windows81SDK", ` "--add Microsoft.VisualStudio.Component.Windows10SDK.17763", ` "--add Microsoft.VisualStudio.Component.VC.140", ` - "--add Microsoft.Component.VC.Runtime.UCRTSDK", ` "--lang en-US", ` "--includeRecommended", ` "--quiet", ` diff --git a/pkg/windows/msi/Product.wxs b/pkg/windows/msi/Product.wxs index fb46c9d9d97..9893a32ab0f 100644 --- a/pkg/windows/msi/Product.wxs +++ b/pkg/windows/msi/Product.wxs @@ -246,17 +246,6 @@ IMCAC - Immediate Custom Action - It's immediate - - - - - - - - - - - @@ -269,8 +258,6 @@ IMCAC - Immediate Custom Action - It's immediate - - diff --git a/pkg/windows/msi/README-how-to-build.md b/pkg/windows/msi/README-how-to-build.md index 73ce6e6a107..34327ba3ab6 100644 --- a/pkg/windows/msi/README-how-to-build.md +++ b/pkg/windows/msi/README-how-to-build.md @@ -10,10 +10,6 @@ You need - .Net 3.5 SDK (for WiX)* - [Wix 3](http://wixtoolset.org/releases/)** - [Build tools 2015](https://www.microsoft.com/en-US/download/confirmation.aspx?id=48159)** -- Microsoft_VC140_CRT_x64.msm from Visual Studio 2015** -- Microsoft_VC140_CRT_x86.msm from Visual Studio 2015** -- Microsoft_VC120_CRT_x64.msm from Visual Studio 2013** -- Microsoft_VC120_CRT_x86.msm from Visual Studio 2013** Notes: - * `build.cmd` will open `optionalfeatures` if necessary. diff --git a/pkg/windows/msi/build_pkg.ps1 b/pkg/windows/msi/build_pkg.ps1 index 6a6176a2d4e..67069c049fd 100644 --- a/pkg/windows/msi/build_pkg.ps1 +++ b/pkg/windows/msi/build_pkg.ps1 @@ -73,8 +73,6 @@ function VerifyOrDownload ($local_file, $URL, $SHA256) { # Script Variables #------------------------------------------------------------------------------- -$WEBCACHE_DIR = "$env:TEMP\msi_build_cache_dir" -$DEPS_URL = "https://repo.saltproject.io/windows/dependencies" $PROJECT_DIR = $(git rev-parse --show-toplevel) $BUILD_DIR = "$PROJECT_DIR\pkg\windows\build" $BUILDENV_DIR = "$PROJECT_DIR\pkg\windows\buildenv" @@ -121,21 +119,6 @@ Write-Host "- Architecture: $BUILD_ARCH" Write-Host "- Salt Version: $Version" Write-Host $("-" * 80) -#------------------------------------------------------------------------------- -# Ensure cache dir exists -#------------------------------------------------------------------------------- - -if ( ! (Test-Path -Path $WEBCACHE_DIR) ) { - Write-Host "Creating cache directory: " -NoNewline - New-Item -ItemType directory -Path $WEBCACHE_DIR | Out-Null - if ( Test-Path -Path $WEBCACHE_DIR ) { - Write-Result "Success" -ForegroundColor Green - } else { - Write-Result "Failed" -ForegroundColor Red - exit 1 - } -} - #------------------------------------------------------------------------------- # Ensure WIX environment variable is set, if not refresh and check again #------------------------------------------------------------------------------- @@ -156,21 +139,6 @@ if ( ! "$env:WIX" ) { } } -#------------------------------------------------------------------------------- -# Caching VC++ Runtimes -#------------------------------------------------------------------------------- - -$RUNTIMES = @( - ("Microsoft_VC120_CRT_x64.msm", "64", "15FD10A495287505184B8913DF8D6A9CA461F44F78BC74115A0C14A5EDD1C9A7"), - ("Microsoft_VC120_CRT_x86.msm", "32", "26340B393F52888B908AC3E67B935A80D390E1728A31FF38EBCEC01117EB2579"), - ("Microsoft_VC140_CRT_x64.msm", "64", "E1344D5943FB2BBB7A56470ED0B7E2B9B212CD9210D3CC6FA82BC3DA8F11EDA8"), - ("Microsoft_VC140_CRT_x86.msm", "32", "0D36CFE6E9ABD7F530DBAA4A83841CDBEF9B2ADCB625614AF18208FDCD6B92A4") -) -$RUNTIMES | ForEach-Object { - $name, $arch, $hash = $_ - VerifyOrDownload "$WEBCACHE_DIR\$name" "$DEPS_URL/$arch/$name" "$hash" -} - #------------------------------------------------------------------------------- # Converting to MSI Version #------------------------------------------------------------------------------- @@ -531,7 +499,6 @@ Push-Location $SCRIPT_DIR -dDisplayVersion="$Version" ` -dInternalVersion="$INTERNAL_VERSION" ` -dDISCOVER_INSTALLDIR="$($DISCOVER_INSTALLDIR[$i])" ` - -dWEBCACHE_DIR="$WEBCACHE_DIR" ` -dDISCOVER_CONFDIR="$DISCOVER_CONFDIR" ` -ext "$($ENV:WIX)bin\WixUtilExtension.dll" ` -ext "$($ENV:WIX)bin\WixUIExtension.dll" ` diff --git a/pkg/windows/nsis/installer/Salt-Minion-Setup.nsi b/pkg/windows/nsis/installer/Salt-Minion-Setup.nsi index 2a957056f51..59ca96c76f6 100644 --- a/pkg/windows/nsis/installer/Salt-Minion-Setup.nsi +++ b/pkg/windows/nsis/installer/Salt-Minion-Setup.nsi @@ -524,171 +524,6 @@ InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show - -Section -copy_prereqs - # Copy prereqs to the Plugins Directory - # These files are downloaded by build_pkg.bat - # This directory gets removed upon completion - SetOutPath "$PLUGINSDIR\" - File /r "..\..\prereqs\" -SectionEnd - -# Check if the Windows 10 Universal C Runtime (KB2999226) is installed. Python -# 3 needs the updated ucrt on Windows 8.1/2012R2 and lower. They are installed -# via KB2999226, but we're not going to patch the system here. Instead, we're -# going to copy the .dll files to the \salt\bin directory -Section -install_ucrt - - Var /GLOBAL UcrtFileName - - # Get the Major.Minor version Number - # Windows 10 introduced CurrentMajorVersionNumber - ReadRegStr $R0 HKLM "SOFTWARE\Microsoft\Windows NT\CurrentVersion" \ - CurrentMajorVersionNumber - - # Windows 10/2016 will return a value here, skip to the end if returned - StrCmp $R0 '' lbl_needs_ucrt 0 - - # Found Windows 10 - detailPrint "KB2999226 does not apply to this machine" - goto lbl_done - - lbl_needs_ucrt: - # UCRT only needed on Windows Server 2012R2/Windows 8.1 and below. The - # first ReadRegStr command above should have skipped to lbl_done if on - # Windows 10 box - - # Is the update already installed - ClearErrors - - # Use WMI to check if it's installed - detailPrint "Checking for existing UCRT (KB2999226) installation" - nsExec::ExecToStack 'cmd /q /c wmic qfe get hotfixid | findstr "^KB2999226"' - # Clean up the stack - Pop $R0 # Gets the ErrorCode - Pop $R1 # Gets the stdout, which should be KB2999226 if it's installed - - # If it returned KB2999226 it's already installed - StrCmp $R1 'KB2999226' lbl_done - - detailPrint "UCRT (KB2999226) not found" - - # Use RunningX64 here to get the Architecture for the system running the - # installer. - ${If} ${RunningX64} - StrCpy $UcrtFileName "ucrt_x64.zip" - ${Else} - StrCpy $UcrtFileName "ucrt_x86.zip" - ${EndIf} - - ClearErrors - - detailPrint "Unzipping UCRT dll files to $INSTDIR\Scripts" - CreateDirectory $INSTDIR\Scripts - nsisunz::UnzipToLog "$PLUGINSDIR\$UcrtFileName" "$INSTDIR\Scripts" - - # Clean up the stack - Pop $R0 # Get Error - - ${IfNot} $R0 == "success" - detailPrint "error: $R0" - Sleep 3000 - ${Else} - detailPrint "UCRT dll files copied successfully" - ${EndIf} - - lbl_done: - -SectionEnd - - -# Check and install Visual C++ redist 2013 packages -# Hidden section (-) to install VCRedist -Section -install_vcredist_2013 - - Var /GLOBAL VcRedistName - Var /GLOBAL VcRedistReg - - # Only install 64bit VCRedist on 64bit machines - # Use RunningX64 here to get the Architecture for the system running the - # installer. - ${If} ${RunningX64} - StrCpy $VcRedistName "vcredist_x64_2013" - StrCpy $VcRedistReg "SOFTWARE\WOW6432Node\Microsoft\VisualStudio\12.0\VC\Runtimes\x64" - ${Else} - StrCpy $VcRedistName "vcredist_x86_2013" - StrCpy $VcRedistReg "SOFTWARE\Microsoft\VisualStudio\12.0\VC\Runtimes\x86" - ${EndIf} - - # Detecting VCRedist Installation - detailPrint "Checking for $VcRedistName..." - ReadRegDword $0 HKLM $VcRedistReg "Installed" - StrCmp $0 "1" +2 0 - Call InstallVCRedist - -SectionEnd - - -Function InstallVCRedist - detailPrint "System requires $VcRedistName" - MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 \ - "$VcRedistName is currently not installed. Would you like to \ - install?" \ - /SD IDYES IDYES InstallVcRedist - - detailPrint "$VcRedistName not installed" - detailPrint ">>>Installation aborted by user<<<" - MessageBox MB_ICONEXCLAMATION \ - "$VcRedistName not installed. Aborted by user.$\n$\n\ - Installer will now close." \ - /SD IDOK - Quit - - InstallVcRedist: - - # If an output variable is specified ($0 in the case below), ExecWait - # sets the variable with the exit code (and only sets the error flag if - # an error occurs; if an error occurs, the contents of the user - # variable are undefined). - # http://nsis.sourceforge.net/Reference/ExecWait - ClearErrors - detailPrint "Installing $VcRedistName..." - ExecWait '"$PLUGINSDIR\$VcRedistName.exe" /install /quiet /norestart' $0 - - IfErrors 0 CheckVcRedistErrorCode - - detailPrint "An error occurred during installation of $VcRedistName" - MessageBox MB_OK|MB_ICONEXCLAMATION \ - "$VcRedistName failed to install. Try installing the package \ - manually.$\n$\n\ - The installer will now close." \ - /SD IDOK - Quit - - CheckVcRedistErrorCode: - # Check for Reboot Error Code (3010) - ${If} $0 == 3010 - detailPrint "$VcRedistName installed but requires a restart to complete." - detailPrint "Reboot and run Salt install again" - MessageBox MB_OK|MB_ICONINFORMATION \ - "$VcRedistName installed but requires a restart to complete." \ - /SD IDOK - - # Check for any other errors - ${ElseIfNot} $0 == 0 - detailPrint "An error occurred during installation of $VcRedistName" - detailPrint "Error: $0" - MessageBox MB_OK|MB_ICONEXCLAMATION \ - "$VcRedistName failed to install. Try installing the package \ - mnually.$\n\ - ErrorCode: $0$\n\ - The installer will now close." \ - /SD IDOK - ${EndIf} - -FunctionEnd - - Section "MainSection" SEC01 ${If} $MoveExistingConfig == 1 @@ -763,7 +598,6 @@ Function .onInit ${EndIf} ${EndIf} - InitPluginsDir Call parseInstallerCommandLineSwitches # Uninstall msi-installed salt diff --git a/pkg/windows/nsis/tests/setup.ps1 b/pkg/windows/nsis/tests/setup.ps1 index ddebf709be0..c5d8b7459a6 100644 --- a/pkg/windows/nsis/tests/setup.ps1 +++ b/pkg/windows/nsis/tests/setup.ps1 @@ -35,7 +35,6 @@ $SCRIPT_DIR = (Get-ChildItem "$($myInvocation.MyCommand.Definition)").Directo $WINDOWS_DIR = "$PROJECT_DIR\pkg\windows" $NSIS_DIR = "$WINDOWS_DIR\nsis" $BUILDENV_DIR = "$WINDOWS_DIR\buildenv" -$PREREQS_DIR = "$WINDOWS_DIR\prereqs" $NSIS_BIN = "$( ${env:ProgramFiles(x86)} )\NSIS\makensis.exe" #------------------------------------------------------------------------------- @@ -50,8 +49,7 @@ Write-Host $("-" * 80) # Setup Directories #------------------------------------------------------------------------------- -$directories = "$PREREQS_DIR", - "$BUILDENV_DIR", +$directories = "$BUILDENV_DIR", "$BUILDENV_DIR\configs" $directories | ForEach-Object { if ( ! (Test-Path -Path "$_") ) { @@ -70,21 +68,6 @@ $directories | ForEach-Object { # Create binaries #------------------------------------------------------------------------------- -$prereq_files = "vcredist_x86_2013.exe", - "vcredist_x64_2013.exe", - "ucrt_x86.zip", - "ucrt_x64.zip" -$prereq_files | ForEach-Object { - Write-Host "Creating $_`: " -NoNewline - Set-Content -Path "$PREREQS_DIR\$_" -Value "binary" - if ( Test-Path -Path "$PREREQS_DIR\$_" ) { - Write-Result "Success" - } else { - Write-Result "Failed" -ForegroundColor Red - exit 1 - } -} - $binary_files = "ssm.exe", "python.exe" $binary_files | ForEach-Object { diff --git a/pkg/windows/prep_salt.ps1 b/pkg/windows/prep_salt.ps1 index 74497648482..7bcde5b60c7 100644 --- a/pkg/windows/prep_salt.ps1 +++ b/pkg/windows/prep_salt.ps1 @@ -62,7 +62,6 @@ if ( $BuildDir ) { } else { $BUILD_DIR = "$SCRIPT_DIR\buildenv" } -$PREREQ_DIR = "$SCRIPT_DIR\prereqs" $SCRIPTS_DIR = "$BUILD_DIR\Scripts" $BUILD_CONF_DIR = "$BUILD_DIR\configs" $SITE_PKGS_DIR = "$BUILD_DIR\Lib\site-packages" @@ -126,17 +125,6 @@ if ( Test-Path -Path $BUILD_CONF_DIR) { } } -if ( Test-Path -Path $PREREQ_DIR ) { - Write-Host "Removing PreReq Directory: " -NoNewline - Remove-Item -Path $PREREQ_DIR -Recurse -Force - if ( ! (Test-Path -Path $PREREQ_DIR) ) { - Write-Result "Success" -ForegroundColor Green - } else { - Write-Result "Failed" -ForegroundColor Red - exit 1 - } -} - #------------------------------------------------------------------------------- # Staging the Build Environment #------------------------------------------------------------------------------- @@ -183,29 +171,6 @@ $scripts | ForEach-Object { } } -# Copy VCRedist 2013 to the prereqs directory -New-Item -Path $PREREQ_DIR -ItemType Directory | Out-Null -Write-Host "Copying VCRedist 2013 $ARCH_X to prereqs: " -NoNewline -$file = "vcredist_$ARCH_X`_2013.exe" -Invoke-WebRequest -Uri "$SALT_DEP_URL/$file" -OutFile "$PREREQ_DIR\$file" -if ( Test-Path -Path "$PREREQ_DIR\$file" ) { - Write-Result "Success" -ForegroundColor Green -} else { - Write-Result "Failed" -ForegroundColor Red - exit 1 -} - -# Copy Universal C Runtimes to the prereqs directory -Write-Host "Copying Universal C Runtimes $ARCH_X to prereqs: " -NoNewline -$file = "ucrt_$ARCH_X.zip" -Invoke-WebRequest -Uri "$SALT_DEP_URL/$file" -OutFile "$PREREQ_DIR\$file" -if ( Test-Path -Path "$PREREQ_DIR\$file" ) { - Write-Result "Success" -ForegroundColor Green -} else { - Write-Result "Failed" -ForegroundColor Red - exit 1 -} - #------------------------------------------------------------------------------- # Remove binaries not needed by Salt #------------------------------------------------------------------------------- From ccfd8ea364366e451547afb721078f845c33707b Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 21 Mar 2024 16:14:52 +0000 Subject: [PATCH 04/32] Upgrade to ``pytest-salt-factories==1.0.0`` --- requirements/pytest.txt | 2 +- requirements/static/ci/py3.10/cloud.txt | 2 +- requirements/static/ci/py3.10/darwin.txt | 2 +- requirements/static/ci/py3.10/freebsd.txt | 2 +- requirements/static/ci/py3.10/linux.txt | 2 +- requirements/static/ci/py3.10/windows.txt | 2 +- requirements/static/ci/py3.11/cloud.txt | 2 +- requirements/static/ci/py3.11/darwin.txt | 2 +- requirements/static/ci/py3.11/freebsd.txt | 2 +- requirements/static/ci/py3.11/linux.txt | 2 +- requirements/static/ci/py3.11/windows.txt | 2 +- requirements/static/ci/py3.12/cloud.txt | 2 +- requirements/static/ci/py3.12/darwin.txt | 2 +- requirements/static/ci/py3.12/freebsd.txt | 2 +- requirements/static/ci/py3.12/linux.txt | 2 +- requirements/static/ci/py3.12/windows.txt | 2 +- requirements/static/ci/py3.7/cloud.txt | 2 +- requirements/static/ci/py3.7/freebsd.txt | 2 +- requirements/static/ci/py3.7/linux.txt | 2 +- requirements/static/ci/py3.7/windows.txt | 2 +- requirements/static/ci/py3.8/cloud.txt | 2 +- requirements/static/ci/py3.8/freebsd.txt | 2 +- requirements/static/ci/py3.8/linux.txt | 2 +- requirements/static/ci/py3.8/windows.txt | 2 +- requirements/static/ci/py3.9/cloud.txt | 2 +- requirements/static/ci/py3.9/darwin.txt | 2 +- requirements/static/ci/py3.9/freebsd.txt | 2 +- requirements/static/ci/py3.9/linux.txt | 2 +- requirements/static/ci/py3.9/windows.txt | 2 +- 29 files changed, 29 insertions(+), 29 deletions(-) diff --git a/requirements/pytest.txt b/requirements/pytest.txt index 5e6c895538d..d53137d6601 100644 --- a/requirements/pytest.txt +++ b/requirements/pytest.txt @@ -2,7 +2,7 @@ mock >= 3.0.0 # PyTest docker pytest >= 7.2.0 -pytest-salt-factories >= 1.0.0rc29 +pytest-salt-factories >= 1.0.0 pytest-helpers-namespace >= 2019.1.8 pytest-subtests pytest-timeout >= 2.3.1 diff --git a/requirements/static/ci/py3.10/cloud.txt b/requirements/static/ci/py3.10/cloud.txt index c948ec499d8..2e33e0b4545 100644 --- a/requirements/static/ci/py3.10/cloud.txt +++ b/requirements/static/ci/py3.10/cloud.txt @@ -474,7 +474,7 @@ pytest-httpserver==1.0.8 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via # -c requirements/static/ci/py3.10/linux.txt # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.10/darwin.txt b/requirements/static/ci/py3.10/darwin.txt index 1a08e11b99e..4e0e5401243 100644 --- a/requirements/static/ci/py3.10/darwin.txt +++ b/requirements/static/ci/py3.10/darwin.txt @@ -332,7 +332,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.10/freebsd.txt b/requirements/static/ci/py3.10/freebsd.txt index d4ff409bf90..990aa698296 100644 --- a/requirements/static/ci/py3.10/freebsd.txt +++ b/requirements/static/ci/py3.10/freebsd.txt @@ -325,7 +325,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.10/linux.txt b/requirements/static/ci/py3.10/linux.txt index 1a427909d2a..c00e7ab5eaf 100644 --- a/requirements/static/ci/py3.10/linux.txt +++ b/requirements/static/ci/py3.10/linux.txt @@ -342,7 +342,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.10/windows.txt b/requirements/static/ci/py3.10/windows.txt index 5085f969dcd..731ba77a15e 100644 --- a/requirements/static/ci/py3.10/windows.txt +++ b/requirements/static/ci/py3.10/windows.txt @@ -310,7 +310,7 @@ pytest-helpers-namespace==2021.12.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.11/cloud.txt b/requirements/static/ci/py3.11/cloud.txt index be47bc56fcd..59838032f9e 100644 --- a/requirements/static/ci/py3.11/cloud.txt +++ b/requirements/static/ci/py3.11/cloud.txt @@ -438,7 +438,7 @@ pytest-httpserver==1.0.8 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via # -c requirements/static/ci/py3.11/linux.txt # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.11/darwin.txt b/requirements/static/ci/py3.11/darwin.txt index 3318f874774..83b07114fcd 100644 --- a/requirements/static/ci/py3.11/darwin.txt +++ b/requirements/static/ci/py3.11/darwin.txt @@ -303,7 +303,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.11/freebsd.txt b/requirements/static/ci/py3.11/freebsd.txt index 0c5db4047d5..2c60650e8e6 100644 --- a/requirements/static/ci/py3.11/freebsd.txt +++ b/requirements/static/ci/py3.11/freebsd.txt @@ -302,7 +302,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.11/linux.txt b/requirements/static/ci/py3.11/linux.txt index f65e23eef63..29d77fbb9c5 100644 --- a/requirements/static/ci/py3.11/linux.txt +++ b/requirements/static/ci/py3.11/linux.txt @@ -319,7 +319,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.11/windows.txt b/requirements/static/ci/py3.11/windows.txt index dd6c569671a..a035acff7ea 100644 --- a/requirements/static/ci/py3.11/windows.txt +++ b/requirements/static/ci/py3.11/windows.txt @@ -306,7 +306,7 @@ pytest-helpers-namespace==2021.12.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.12/cloud.txt b/requirements/static/ci/py3.12/cloud.txt index 8c59f4b425a..40d463d9b2a 100644 --- a/requirements/static/ci/py3.12/cloud.txt +++ b/requirements/static/ci/py3.12/cloud.txt @@ -438,7 +438,7 @@ pytest-httpserver==1.0.8 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via # -c requirements/static/ci/py3.12/linux.txt # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.12/darwin.txt b/requirements/static/ci/py3.12/darwin.txt index 7968842ee75..c5dff6ccbfc 100644 --- a/requirements/static/ci/py3.12/darwin.txt +++ b/requirements/static/ci/py3.12/darwin.txt @@ -303,7 +303,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.12/freebsd.txt b/requirements/static/ci/py3.12/freebsd.txt index 73edffa6cdf..dccb1763f5f 100644 --- a/requirements/static/ci/py3.12/freebsd.txt +++ b/requirements/static/ci/py3.12/freebsd.txt @@ -302,7 +302,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.12/linux.txt b/requirements/static/ci/py3.12/linux.txt index 5f698e3728a..580e5f60ddb 100644 --- a/requirements/static/ci/py3.12/linux.txt +++ b/requirements/static/ci/py3.12/linux.txt @@ -319,7 +319,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.12/windows.txt b/requirements/static/ci/py3.12/windows.txt index b460b78018b..e5949cfd1ed 100644 --- a/requirements/static/ci/py3.12/windows.txt +++ b/requirements/static/ci/py3.12/windows.txt @@ -306,7 +306,7 @@ pytest-helpers-namespace==2021.12.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.7/cloud.txt b/requirements/static/ci/py3.7/cloud.txt index 4eebe8c3fce..49d1316122f 100644 --- a/requirements/static/ci/py3.7/cloud.txt +++ b/requirements/static/ci/py3.7/cloud.txt @@ -521,7 +521,7 @@ pytest-httpserver==1.0.6 # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via # -c requirements/static/ci/py3.7/linux.txt # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.7/freebsd.txt b/requirements/static/ci/py3.7/freebsd.txt index 907bfe38c62..d87fada59cf 100644 --- a/requirements/static/ci/py3.7/freebsd.txt +++ b/requirements/static/ci/py3.7/freebsd.txt @@ -365,7 +365,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.6 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.7/linux.txt b/requirements/static/ci/py3.7/linux.txt index 77044b1661d..20ca93af2bd 100644 --- a/requirements/static/ci/py3.7/linux.txt +++ b/requirements/static/ci/py3.7/linux.txt @@ -377,7 +377,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.6 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.7/windows.txt b/requirements/static/ci/py3.7/windows.txt index f8dce51150f..c708594a9d7 100644 --- a/requirements/static/ci/py3.7/windows.txt +++ b/requirements/static/ci/py3.7/windows.txt @@ -324,7 +324,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.6 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.8/cloud.txt b/requirements/static/ci/py3.8/cloud.txt index f8e34628f78..c52d9b94590 100644 --- a/requirements/static/ci/py3.8/cloud.txt +++ b/requirements/static/ci/py3.8/cloud.txt @@ -508,7 +508,7 @@ pytest-httpserver==1.0.8 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via # -c requirements/static/ci/py3.8/linux.txt # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.8/freebsd.txt b/requirements/static/ci/py3.8/freebsd.txt index e53274c32bd..b4b0596ec19 100644 --- a/requirements/static/ci/py3.8/freebsd.txt +++ b/requirements/static/ci/py3.8/freebsd.txt @@ -352,7 +352,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.8/linux.txt b/requirements/static/ci/py3.8/linux.txt index e9bd555c0f7..b80af4171c7 100644 --- a/requirements/static/ci/py3.8/linux.txt +++ b/requirements/static/ci/py3.8/linux.txt @@ -364,7 +364,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.8/windows.txt b/requirements/static/ci/py3.8/windows.txt index da0991bdb2c..8d57b564593 100644 --- a/requirements/static/ci/py3.8/windows.txt +++ b/requirements/static/ci/py3.8/windows.txt @@ -311,7 +311,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.9/cloud.txt b/requirements/static/ci/py3.9/cloud.txt index 68491d77b5d..452e2242050 100644 --- a/requirements/static/ci/py3.9/cloud.txt +++ b/requirements/static/ci/py3.9/cloud.txt @@ -510,7 +510,7 @@ pytest-httpserver==1.0.8 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via # -c requirements/static/ci/py3.9/linux.txt # -r requirements/pytest.txt diff --git a/requirements/static/ci/py3.9/darwin.txt b/requirements/static/ci/py3.9/darwin.txt index 57ae604f2da..e7b69e46952 100644 --- a/requirements/static/ci/py3.9/darwin.txt +++ b/requirements/static/ci/py3.9/darwin.txt @@ -361,7 +361,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.9/freebsd.txt b/requirements/static/ci/py3.9/freebsd.txt index 722061db973..50569ed6c7d 100644 --- a/requirements/static/ci/py3.9/freebsd.txt +++ b/requirements/static/ci/py3.9/freebsd.txt @@ -354,7 +354,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.9/linux.txt b/requirements/static/ci/py3.9/linux.txt index 593557f9482..f2e57a53ea5 100644 --- a/requirements/static/ci/py3.9/linux.txt +++ b/requirements/static/ci/py3.9/linux.txt @@ -364,7 +364,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories diff --git a/requirements/static/ci/py3.9/windows.txt b/requirements/static/ci/py3.9/windows.txt index bfaefd86fc3..810ac69b451 100644 --- a/requirements/static/ci/py3.9/windows.txt +++ b/requirements/static/ci/py3.9/windows.txt @@ -312,7 +312,7 @@ pytest-helpers-namespace==2021.4.29 # pytest-shell-utilities pytest-httpserver==1.0.8 # via -r requirements/pytest.txt -pytest-salt-factories==1.0.0rc29 +pytest-salt-factories==1.0.0 # via -r requirements/pytest.txt pytest-shell-utilities==1.8.0 # via pytest-salt-factories From b2fe6c45dbe3ba0c8983079c4ed4202affc112ad Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 21 Mar 2024 16:18:34 +0000 Subject: [PATCH 05/32] Bump functional test splits to 4 --- tools/ci.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/ci.py b/tools/ci.py index f2126b7fa9a..192cfee48f1 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -654,7 +654,7 @@ def matrix( """ _matrix = [] _splits = { - "functional": 3, + "functional": 4, "integration": 5, "scenarios": 1, "unit": 4, From 65e5c4f2273322079f08564aaeb0fd1ad2951399 Mon Sep 17 00:00:00 2001 From: Tyler Levy Conde Date: Thu, 21 Mar 2024 12:05:02 -0600 Subject: [PATCH 06/32] Fix: Prevent full system upgrade in pkg.installed for Arch Linux This change modifies the logic in the pacman module to only append the '-u' flag to the pacman command if sysupgrade is explicitly set to True. This prevents the pkg.installed state from triggering a full system upgrade by default on Arch Linux systems. --- changelog/65200.fixed.md | 1 + salt/modules/pacmanpkg.py | 2 +- tests/pytests/unit/modules/test_pacmanpkg.py | 118 ++++--------------- 3 files changed, 24 insertions(+), 97 deletions(-) create mode 100644 changelog/65200.fixed.md diff --git a/changelog/65200.fixed.md b/changelog/65200.fixed.md new file mode 100644 index 00000000000..9da348e5e4e --- /dev/null +++ b/changelog/65200.fixed.md @@ -0,0 +1 @@ +Prevent full system upgrade on single package install for Arch Linux diff --git a/salt/modules/pacmanpkg.py b/salt/modules/pacmanpkg.py index 57df5f72cb8..40e56f93733 100644 --- a/salt/modules/pacmanpkg.py +++ b/salt/modules/pacmanpkg.py @@ -552,7 +552,7 @@ def install( cmd.append("-S") if refresh is True: cmd.append("-y") - if sysupgrade is True or (sysupgrade is None and refresh is True): + if sysupgrade is True: cmd.append("-u") cmd.extend(["--noprogressbar", "--noconfirm", "--needed"]) wildcards = [] diff --git a/tests/pytests/unit/modules/test_pacmanpkg.py b/tests/pytests/unit/modules/test_pacmanpkg.py index 796624dbeb7..0b4d457f4d8 100644 --- a/tests/pytests/unit/modules/test_pacmanpkg.py +++ b/tests/pytests/unit/modules/test_pacmanpkg.py @@ -6,11 +6,14 @@ import pytest import salt.modules.pacmanpkg as pacman from tests.support.mock import MagicMock, patch +import salt.utils.systemd @pytest.fixture def configure_loader_modules(): - return {pacman: {}} + return { + pacman: {}, + } def test_list_pkgs(): @@ -63,106 +66,29 @@ def test_list_pkgs_as_list(): assert stringifymock.call_count == 0 -def test_list_pkgs_no_context(): +def test_pacman_install_sysupgrade_flag(): """ - Test if it list the packages currently installed in a dict + Test if the pacman.install function appends the '-u' flag only when sysupgrade is True """ - cmdmock = MagicMock(return_value="A 1.0\nB 2.0") - sortmock = MagicMock() - stringifymock = MagicMock() - mock_ret = {"A": ["1.0"], "B": ["2.0"]} + mock_parse_targets = MagicMock(return_value=({"somepkg": None}, "repository")) + mock_has_scope = MagicMock(return_value=False) + mock_list_pkgs = MagicMock(return_value={"somepkg": "1.0"}) + mock_run_all = MagicMock(return_value={"retcode": 0, "stderr": ""}) + with patch.dict( pacman.__salt__, { - "cmd.run": cmdmock, - "pkg_resource.add_pkg": lambda pkgs, name, version: pkgs.setdefault( - name, [] - ).append(version), - "pkg_resource.sort_pkglist": sortmock, - "pkg_resource.stringify": stringifymock, + "cmd.run_all": mock_run_all, + "pkg_resource.parse_targets": mock_parse_targets, + "config.get": MagicMock(return_value=True), }, - ), patch.object(pacman, "_list_pkgs_from_context") as list_pkgs_context_mock: - assert pacman.list_pkgs() == mock_ret - - pkgs = pacman.list_pkgs(versions_as_list=True, use_context=False) - list_pkgs_context_mock.assert_not_called() - list_pkgs_context_mock.reset_mock() - - pkgs = pacman.list_pkgs(versions_as_list=True, use_context=False) - list_pkgs_context_mock.assert_not_called() - list_pkgs_context_mock.reset_mock() - - -def test_group_list(): - """ - Test if it lists the available groups - """ - - def cmdlist(cmd, **kwargs): - """ - Handle several different commands being run - """ - if cmd == ["pacman", "-Sgg"]: - return ( - "group-a pkg1\ngroup-a pkg2\ngroup-f pkg9\ngroup-c pkg3\ngroup-b pkg4" - ) - elif cmd == ["pacman", "-Qg"]: - return "group-a pkg1\ngroup-b pkg4" - else: - return f"Untested command ({cmd}, {kwargs})!" - - cmdmock = MagicMock(side_effect=cmdlist) - - sortmock = MagicMock() - with patch.dict( - pacman.__salt__, {"cmd.run": cmdmock, "pkg_resource.sort_pkglist": sortmock} + ), patch.object(salt.utils.systemd, "has_scope", mock_has_scope), patch.object( + pacman, "list_pkgs", mock_list_pkgs ): - assert pacman.group_list() == { - "available": ["group-c", "group-f"], - "installed": ["group-b"], - "partially_installed": ["group-a"], - } + pacman.install(name="somepkg", sysupgrade=True) + args, _ = pacman.__salt__["cmd.run_all"].call_args + assert "-u" in args[0] - -def test_group_info(): - """ - Test if it shows the packages in a group - """ - - def cmdlist(cmd, **kwargs): - """ - Handle several different commands being run - """ - if cmd == ["pacman", "-Sgg", "testgroup"]: - return "testgroup pkg1\ntestgroup pkg2" - else: - return f"Untested command ({cmd}, {kwargs})!" - - cmdmock = MagicMock(side_effect=cmdlist) - - sortmock = MagicMock() - with patch.dict( - pacman.__salt__, {"cmd.run": cmdmock, "pkg_resource.sort_pkglist": sortmock} - ): - assert pacman.group_info("testgroup")["default"] == ["pkg1", "pkg2"] - - -def test_group_diff(): - """ - Test if it shows the difference between installed and target group contents - """ - - listmock = MagicMock(return_value={"A": ["1.0"], "B": ["2.0"]}) - groupmock = MagicMock( - return_value={ - "mandatory": [], - "optional": [], - "default": ["A", "C"], - "conditional": [], - } - ) - with patch.dict( - pacman.__salt__, {"pkg.list_pkgs": listmock, "pkg.group_info": groupmock} - ): - results = pacman.group_diff("testgroup") - assert results["default"] == {"installed": ["A"], "not installed": ["C"]} + pacman.install(name="somepkg", sysupgrade=None, refresh=True) + args, _ = pacman.__salt__["cmd.run_all"].call_args + assert "-u" not in args[0] From 1f08a3c1911310fdbaa601421bd68efc621fabb9 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 21 Mar 2024 16:18:34 +0000 Subject: [PATCH 07/32] Bump functional test splits to 4 --- tests/pytests/unit/modules/test_pacmanpkg.py | 111 ++++++++++++++++++- 1 file changed, 107 insertions(+), 4 deletions(-) diff --git a/tests/pytests/unit/modules/test_pacmanpkg.py b/tests/pytests/unit/modules/test_pacmanpkg.py index 0b4d457f4d8..cf76d83c95d 100644 --- a/tests/pytests/unit/modules/test_pacmanpkg.py +++ b/tests/pytests/unit/modules/test_pacmanpkg.py @@ -5,15 +5,13 @@ import pytest import salt.modules.pacmanpkg as pacman -from tests.support.mock import MagicMock, patch import salt.utils.systemd +from tests.support.mock import MagicMock, patch @pytest.fixture def configure_loader_modules(): - return { - pacman: {}, - } + return {pacman: {}} def test_list_pkgs(): @@ -66,6 +64,111 @@ def test_list_pkgs_as_list(): assert stringifymock.call_count == 0 +def test_list_pkgs_no_context(): + """ + Test if it list the packages currently installed in a dict + """ + cmdmock = MagicMock(return_value="A 1.0\nB 2.0") + sortmock = MagicMock() + stringifymock = MagicMock() + mock_ret = {"A": ["1.0"], "B": ["2.0"]} + with patch.dict( + pacman.__salt__, + { + "cmd.run": cmdmock, + "pkg_resource.add_pkg": lambda pkgs, name, version: pkgs.setdefault( + name, [] + ).append(version), + "pkg_resource.sort_pkglist": sortmock, + "pkg_resource.stringify": stringifymock, + }, + ), patch.object(pacman, "_list_pkgs_from_context") as list_pkgs_context_mock: + assert pacman.list_pkgs() == mock_ret + + pkgs = pacman.list_pkgs(versions_as_list=True, use_context=False) + list_pkgs_context_mock.assert_not_called() + list_pkgs_context_mock.reset_mock() + + pkgs = pacman.list_pkgs(versions_as_list=True, use_context=False) + list_pkgs_context_mock.assert_not_called() + list_pkgs_context_mock.reset_mock() + + +def test_group_list(): + """ + Test if it lists the available groups + """ + + def cmdlist(cmd, **kwargs): + """ + Handle several different commands being run + """ + if cmd == ["pacman", "-Sgg"]: + return ( + "group-a pkg1\ngroup-a pkg2\ngroup-f pkg9\ngroup-c pkg3\ngroup-b pkg4" + ) + elif cmd == ["pacman", "-Qg"]: + return "group-a pkg1\ngroup-b pkg4" + else: + return f"Untested command ({cmd}, {kwargs})!" + + cmdmock = MagicMock(side_effect=cmdlist) + + sortmock = MagicMock() + with patch.dict( + pacman.__salt__, {"cmd.run": cmdmock, "pkg_resource.sort_pkglist": sortmock} + ): + assert pacman.group_list() == { + "available": ["group-c", "group-f"], + "installed": ["group-b"], + "partially_installed": ["group-a"], + } + + +def test_group_info(): + """ + Test if it shows the packages in a group + """ + + def cmdlist(cmd, **kwargs): + """ + Handle several different commands being run + """ + if cmd == ["pacman", "-Sgg", "testgroup"]: + return "testgroup pkg1\ntestgroup pkg2" + else: + return f"Untested command ({cmd}, {kwargs})!" + + cmdmock = MagicMock(side_effect=cmdlist) + + sortmock = MagicMock() + with patch.dict( + pacman.__salt__, {"cmd.run": cmdmock, "pkg_resource.sort_pkglist": sortmock} + ): + assert pacman.group_info("testgroup")["default"] == ["pkg1", "pkg2"] + + +def test_group_diff(): + """ + Test if it shows the difference between installed and target group contents + """ + + listmock = MagicMock(return_value={"A": ["1.0"], "B": ["2.0"]}) + groupmock = MagicMock( + return_value={ + "mandatory": [], + "optional": [], + "default": ["A", "C"], + "conditional": [], + } + ) + with patch.dict( + pacman.__salt__, {"pkg.list_pkgs": listmock, "pkg.group_info": groupmock} + ): + results = pacman.group_diff("testgroup") + assert results["default"] == {"installed": ["A"], "not installed": ["C"]} + + def test_pacman_install_sysupgrade_flag(): """ Test if the pacman.install function appends the '-u' flag only when sysupgrade is True From 52ace3bc346b7740c3a735b779187dd81332436f Mon Sep 17 00:00:00 2001 From: Shane Lee Date: Tue, 19 Mar 2024 12:56:07 -0600 Subject: [PATCH 08/32] Fix issue with win_user.add win_useradd.add now allows you to add new users that have only integers in the username. It also adds tests for the win_useradd module. --- changelog/53363.fixed.md | 2 + salt/modules/win_useradd.py | 125 ++++--- .../pytests/unit/modules/test_win_useradd.py | 344 ++++++++++++++++++ 3 files changed, 419 insertions(+), 52 deletions(-) create mode 100644 changelog/53363.fixed.md create mode 100644 tests/pytests/unit/modules/test_win_useradd.py diff --git a/changelog/53363.fixed.md b/changelog/53363.fixed.md new file mode 100644 index 00000000000..9ab50a6424c --- /dev/null +++ b/changelog/53363.fixed.md @@ -0,0 +1,2 @@ +``user.add`` on Windows now allows you to add user names that contain all +numeric characters diff --git a/salt/modules/win_useradd.py b/salt/modules/win_useradd.py index a9e9b2629b6..7fe48727d08 100644 --- a/salt/modules/win_useradd.py +++ b/salt/modules/win_useradd.py @@ -22,6 +22,7 @@ Module for managing Windows Users. This currently only works with local user accounts, not domain accounts """ +import ctypes import logging import shlex import time @@ -30,6 +31,7 @@ from datetime import datetime import salt.utils.args import salt.utils.dateutils import salt.utils.platform +import salt.utils.win_reg import salt.utils.winapi from salt.exceptions import CommandExecutionError @@ -82,7 +84,7 @@ def add( Add a user to the minion. Args: - name (str): User name + name (str): The username for the new account password (str, optional): User's password in plain text. @@ -106,7 +108,7 @@ def add( logs on. Returns: - bool: True if successful. False is unsuccessful. + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -116,10 +118,10 @@ def add( """ user_info = {} if name: - user_info["name"] = name + user_info["name"] = str(name) else: return False - user_info["password"] = password + user_info["password"] = str(password) user_info["priv"] = win32netcon.USER_PRIV_USER user_info["home_dir"] = home user_info["comment"] = description @@ -160,13 +162,13 @@ def update( ): # pylint: disable=anomalous-backslash-in-string """ - Updates settings for the windows user. Name is the only required parameter. + Updates settings for the Windows user. Name is the only required parameter. Settings will only be changed if the parameter is passed a value. .. versionadded:: 2015.8.0 Args: - name (str): The user name to update. + name (str): The username to update. password (str, optional): New user password in plain text. @@ -206,7 +208,7 @@ def update( changing the password. False allows the user to change the password. Returns: - bool: True if successful. False is unsuccessful. + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -219,7 +221,7 @@ def update( # Make sure the user exists # Return an object containing current settings for the user try: - user_info = win32net.NetUserGetInfo(None, name, 4) + user_info = win32net.NetUserGetInfo(None, str(name), 4) except win32net.error as exc: log.error("Failed to update user %s", name) log.error("nbr: %s", exc.winerror) @@ -230,7 +232,7 @@ def update( # Check parameters to update # Update the user object with new settings if password: - user_info["password"] = password + user_info["password"] = str(password) if home: user_info["home_dir"] = home if homedrive: @@ -251,7 +253,7 @@ def update( dt_obj = salt.utils.dateutils.date_cast(expiration_date) except (ValueError, RuntimeError): return f"Invalid Date/Time Format: {expiration_date}" - user_info["acct_expires"] = time.mktime(dt_obj.timetuple()) + user_info["acct_expires"] = int(dt_obj.timestamp()) if expired is not None: if expired: user_info["password_expired"] = 1 @@ -263,6 +265,7 @@ def update( else: user_info["flags"] &= ~win32netcon.UF_ACCOUNTDISABLE if unlock_account is not None: + # We can only unlock with this flag... we can't unlock if unlock_account: user_info["flags"] &= ~win32netcon.UF_LOCKOUT if password_never_expires is not None: @@ -278,7 +281,7 @@ def update( # Apply new settings try: - win32net.NetUserSetInfo(None, name, 4, user_info) + win32net.NetUserSetInfo(None, str(name), 4, user_info) except win32net.error as exc: log.error("Failed to update user %s", name) log.error("nbr: %s", exc.winerror) @@ -305,7 +308,7 @@ def delete(name, purge=False, force=False): user out and delete user. Returns: - bool: True if successful, otherwise False + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -315,7 +318,7 @@ def delete(name, purge=False, force=False): """ # Check if the user exists try: - user_info = win32net.NetUserGetInfo(None, name, 4) + user_info = win32net.NetUserGetInfo(None, str(name), 4) except win32net.error as exc: log.error("User not found: %s", name) log.error("nbr: %s", exc.winerror) @@ -382,7 +385,7 @@ def delete(name, purge=False, force=False): # And finally remove the user account try: - win32net.NetUserDel(None, name) + win32net.NetUserDel(None, str(name)) except win32net.error as exc: log.error("Failed to delete user %s", name) log.error("nbr: %s", exc.winerror) @@ -398,7 +401,7 @@ def getUserSid(username): Get the Security ID for the user Args: - username (str): The user name for which to look up the SID + username (str): The username for which to look up the SID Returns: str: The user SID @@ -424,12 +427,12 @@ def setpassword(name, password): Set the user's password Args: - name (str): The user name for which to set the password + name (str): The username for which to set the password password (str): The new password Returns: - bool: True if successful, otherwise False + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -445,12 +448,12 @@ def addgroup(name, group): Add user to a group Args: - name (str): The user name to add to the group + name (str): The username to add to the group group (str): The name of the group to which to add the user Returns: - bool: True if successful, otherwise False + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -458,7 +461,7 @@ def addgroup(name, group): salt '*' user.addgroup jsnuffy 'Power Users' """ - name = shlex.quote(name) + name = shlex.quote(str(name)) group = shlex.quote(group).lstrip("'").rstrip("'") user = info(name) @@ -478,12 +481,12 @@ def removegroup(name, group): Remove user from a group Args: - name (str): The user name to remove from the group + name (str): The username to remove from the group group (str): The name of the group from which to remove the user Returns: - bool: True if successful, otherwise False + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -491,7 +494,7 @@ def removegroup(name, group): salt '*' user.removegroup jsnuffy 'Power Users' """ - name = shlex.quote(name) + name = shlex.quote(str(name)) group = shlex.quote(group).lstrip("'").rstrip("'") user = info(name) @@ -519,7 +522,7 @@ def chhome(name, home, **kwargs): home (str): The new location of the home directory Returns: - bool: True if successful, otherwise False + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -562,7 +565,7 @@ def chprofile(name, profile): profile (str): The new location of the profile Returns: - bool: True if successful, otherwise False + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -578,12 +581,12 @@ def chfullname(name, fullname): Change the full name of the user Args: - name (str): The user name for which to change the full name + name (str): The username for which to change the full name fullname (str): The new value for the full name Returns: - bool: True if successful, otherwise False + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -600,7 +603,7 @@ def chgroups(name, groups, append=True): member of only the specified groups Args: - name (str): The user name for which to change groups + name (str): The username for which to change groups groups (str, list): A single group or a list of groups to assign to the user. For multiple groups this can be a comma delimited string or a @@ -611,7 +614,7 @@ def chgroups(name, groups, append=True): only. Default is True. Returns: - bool: True if successful, otherwise False + bool: ``True`` if successful, otherwise ``False``. CLI Example: @@ -623,21 +626,31 @@ def chgroups(name, groups, append=True): groups = groups.split(",") groups = [x.strip(" *") for x in groups] - ugrps = set(list_groups(name)) - if ugrps == set(groups): - return True + current_groups = set(list_groups(name)) + expected_groups = set() - name = shlex.quote(name) + name = shlex.quote(str(name)) if not append: - for group in ugrps: + # We don't want to append to the list, remove groups not in the new set + # of groups + for group in current_groups: group = shlex.quote(group).lstrip("'").rstrip("'") if group not in groups: cmd = f'net localgroup "{group}" {name} /delete' __salt__["cmd.run_all"](cmd, python_shell=True) + else: + expected_groups.add(group) + else: + # We're appending to the current list of groups. If they already match + # then bail + if current_groups == set(groups): + return True + else: + expected_groups = current_groups.union(set(groups)) for group in groups: - if group in ugrps: + if group in current_groups: continue group = shlex.quote(group).lstrip("'").rstrip("'") cmd = f'net localgroup "{group}" {name} /add' @@ -646,8 +659,9 @@ def chgroups(name, groups, append=True): log.error(out["stdout"]) return False - agrps = set(list_groups(name)) - return len(ugrps - agrps) == 0 + new_groups = set(list_groups(name)) + + return len(expected_groups - new_groups) == 0 def info(name): @@ -677,6 +691,7 @@ def info(name): - last_logon - account_disabled - account_locked + - expiration_date - password_never_expires - disallow_change_password - gid @@ -690,14 +705,14 @@ def info(name): ret = {} items = {} try: - items = win32net.NetUserGetInfo(None, name, 4) + items = win32net.NetUserGetInfo(None, str(name), 4) except win32net.error: pass if items: groups = [] try: - groups = win32net.NetUserGetLocalGroups(None, name) + groups = win32net.NetUserGetLocalGroups(None, str(name)) except win32net.error: pass @@ -722,9 +737,15 @@ def info(name): ret["last_logon"] = datetime.fromtimestamp(items["last_logon"]).strftime( "%Y-%m-%d %H:%M:%S" ) - ret["expiration_date"] = datetime.fromtimestamp(items["acct_expires"]).strftime( - "%Y-%m-%d %H:%M:%S" - ) + + # If the value is -1 or 0xFFFFFFFF, it is set to never expire + if items["acct_expires"] == ctypes.c_ulong(win32netcon.TIMEQ_FOREVER).value: + ret["expiration_date"] = "Never" + else: + ret["expiration_date"] = datetime.fromtimestamp( + items["acct_expires"] + ).strftime("%Y-%m-%d %H:%M:%S") + ret["expired"] = items["password_expired"] == 1 if not ret["profile"]: ret["profile"] = _get_userprofile_from_registry(name, ret["uid"]) @@ -765,17 +786,17 @@ def _get_userprofile_from_registry(user, sid): registry Args: - user (str): The user name, used in debug message + user (str): The username, used in debug message sid (str): The sid to lookup in the registry Returns: str: Profile directory """ - profile_dir = __utils__["reg.read_value"]( - "HKEY_LOCAL_MACHINE", - f"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\{sid}", - "ProfileImagePath", + profile_dir = salt.utils.win_reg.read_value( + hive="HKEY_LOCAL_MACHINE", + key=f"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\ProfileList\\{sid}", + vname="ProfileImagePath", )["vdata"] log.debug('user %s with sid=%s profile is located at "%s"', user, sid, profile_dir) return profile_dir @@ -786,7 +807,7 @@ def list_groups(name): Return a list of groups the named user belongs to Args: - name (str): The user name for which to list groups + name (str): The username for which to list groups Returns: list: A list of groups to which the user belongs @@ -829,9 +850,9 @@ def getent(refresh=False): return __context__["user.getent"] ret = [] - for user in __salt__["user.list_users"](): + for user in list_users(): stuff = {} - user_info = __salt__["user.info"](user) + user_info = info(user) stuff["gid"] = "" stuff["groups"] = user_info["groups"] @@ -885,12 +906,12 @@ def rename(name, new_name): Change the username for a named user Args: - name (str): The user name to change + name (str): The username to change new_name (str): The new name for the current user Returns: - bool: True if successful, otherwise False + bool: ``True`` if successful, otherwise ``False``. CLI Example: diff --git a/tests/pytests/unit/modules/test_win_useradd.py b/tests/pytests/unit/modules/test_win_useradd.py new file mode 100644 index 00000000000..6084c5bc566 --- /dev/null +++ b/tests/pytests/unit/modules/test_win_useradd.py @@ -0,0 +1,344 @@ +import pytest +from saltfactories.utils import random_string + +import salt.modules.cmdmod +import salt.modules.win_useradd as user +import salt.utils.data +from salt.exceptions import CommandExecutionError + +pytestmark = [ + pytest.mark.destructive_test, + pytest.mark.skip_unless_on_windows, + pytest.mark.windows_whitelisted, +] + + +@pytest.fixture +def configure_loader_modules(): + return {user: {"__salt__": {"cmd.run_all": salt.modules.cmdmod.run_all}}} + + +@pytest.fixture +def username_str(): + _username = random_string("test-account-", uppercase=False) + try: + yield _username + finally: + try: + user.delete(_username, purge=True, force=True) + except Exception: # pylint: disable=broad-except + # The point here is just system cleanup. It can fail if no account was created + pass + + +@pytest.fixture +def username_int(): + _username = random_string("", uppercase=False, lowercase=False, digits=True) + try: + yield _username + finally: + try: + user.delete(_username, purge=True, force=True) + except Exception: # pylint: disable=broad-except + # The point here is just system cleanup. It can fail if no account was created + pass + + +@pytest.fixture +def account_str(username_str): + with pytest.helpers.create_account(username=username_str) as account: + user.addgroup(account.username, "Users") + yield account + + +@pytest.fixture +def account_int(username_int): + with pytest.helpers.create_account(username=username_int) as account: + user.addgroup(account.username, "Users") + yield account + + +def test_add_str(username_str): + ret = user.add(name=username_str) + assert ret is True + assert username_str in user.list_users() + + +def test_add_int(username_int): + ret = user.add(name=username_int) + assert ret is True + assert username_int in user.list_users() + + +def test_addgroup_str(account_str): + ret = user.addgroup(account_str.username, "Backup Operators") + assert ret is True + ret = user.info(account_str.username) + assert "Backup Operators" in ret["groups"] + + +def test_addgroup_int(account_int): + ret = user.addgroup(account_int.username, "Backup Operators") + assert ret is True + ret = user.info(account_int.username) + assert "Backup Operators" in ret["groups"] + + +def test_chfullname_str(account_str): + ret = user.chfullname(account_str.username, "New Full Name") + assert ret is True + ret = user.info(account_str.username) + assert ret["fullname"] == "New Full Name" + + +def test_chfullname_int(account_int): + ret = user.chfullname(account_int.username, "New Full Name") + assert ret is True + ret = user.info(account_int.username) + assert ret["fullname"] == "New Full Name" + + +def test_chgroups_single_str(account_str): + groups = ["Backup Operators"] + ret = user.chgroups(account_str.username, groups=groups) + assert ret is True + ret = user.info(account_str.username) + groups.append("Users") + assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + + +def test_chgroups_single_int(account_int): + groups = ["Backup Operators"] + ret = user.chgroups(account_int.username, groups=groups) + assert ret is True + ret = user.info(account_int.username) + groups.append("Users") + assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + + +def test_chgroups_list_str(account_str): + groups = ["Backup Operators", "Guests"] + ret = user.chgroups(account_str.username, groups=groups) + assert ret is True + ret = user.info(account_str.username) + groups.append("Users") + assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + + +def test_chgroups_list_int(account_int): + groups = ["Backup Operators", "Guests"] + ret = user.chgroups(account_int.username, groups=groups) + assert ret is True + ret = user.info(account_int.username) + groups.append("Users") + assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + + +def test_chgroups_list_append_false_str(account_str): + groups = ["Backup Operators", "Guests"] + ret = user.chgroups(account_str.username, groups=groups, append=False) + assert ret is True + ret = user.info(account_str.username) + assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + + +def test_chgroups_list_append_false_int(account_int): + groups = ["Backup Operators", "Guests"] + ret = user.chgroups(account_int.username, groups=groups, append=False) + assert ret is True + ret = user.info(account_int.username) + assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + + +def test_chhome_str(account_str): + home = r"C:\spongebob\squarepants" + ret = user.chhome(name=account_str.username, home=home) + assert ret is True + ret = user.info(name=account_str.username) + assert ret["home"] == home + + +def test_chhome_int(account_int): + home = r"C:\spongebob\squarepants" + ret = user.chhome(name=account_int.username, home=home) + assert ret is True + ret = user.info(name=account_int.username) + assert ret["home"] == home + + +def test_chprofile_str(account_str): + profile = r"C:\spongebob\squarepants" + ret = user.chprofile(name=account_str.username, profile=profile) + assert ret is True + ret = user.info(name=account_str.username) + assert ret["profile"] == profile + + +def test_chprofile_int(account_int): + profile = r"C:\spongebob\squarepants" + ret = user.chprofile(name=account_int.username, profile=profile) + assert ret is True + ret = user.info(name=account_int.username) + assert ret["profile"] == profile + + +def test_delete_str(account_str): + ret = user.delete(name=account_str.username) + assert ret is True + assert user.info(name=account_str.username) == {} + + +def test_delete_int(account_int): + ret = user.delete(name=account_int.username) + assert ret is True + assert user.info(name=account_int.username) == {} + + +def test_getUserSig_str(account_str): + ret = user.getUserSid(account_str.username) + assert ret.startswith("S-1-5") + + +def test_getUserSig_int(account_int): + ret = user.getUserSid(account_int.username) + assert ret.startswith("S-1-5") + + +def test_info_str(account_str): + ret = user.info(account_str.username) + assert ret["name"] == account_str.username + assert ret["uid"].startswith("S-1-5") + + +def test_info_int(account_int): + ret = user.info(account_int.username) + assert ret["name"] == account_int.username + assert ret["uid"].startswith("S-1-5") + + +def test_list_groups_str(account_str): + ret = user.list_groups(account_str.username) + assert ret == ["Users"] + + +def test_list_groups_int(account_int): + ret = user.list_groups(account_int.username) + assert ret == ["Users"] + + +def test_list_users(): + ret = user.list_users() + assert "Administrator" in ret + + +def test_removegroup_str(account_str): + ret = user.removegroup(account_str.username, "Users") + assert ret is True + ret = user.info(account_str.username) + assert ret["groups"] == [] + + +def test_removegroup_int(account_int): + ret = user.removegroup(account_int.username, "Users") + assert ret is True + ret = user.info(account_int.username) + assert ret["groups"] == [] + + +def test_rename_str(account_str): + new_name = random_string("test-account-", uppercase=False) + ret = user.rename(name=account_str.username, new_name=new_name) + assert ret is True + assert new_name in user.list_users() + # Let's set it back so that it gets cleaned up... + ret = user.rename(name=new_name, new_name=account_str.username) + assert ret is True + + +def test_rename_str_missing(account_str): + missing = random_string("test-account-", uppercase=False) + with pytest.raises(CommandExecutionError): + user.rename(name=missing, new_name="spongebob") + + +def test_rename_str_existing(account_str): + new_existing = random_string("test-account-", uppercase=False) + ret = user.add(name=new_existing) + assert ret is True + with pytest.raises(CommandExecutionError): + user.rename(name=account_str.username, new_name=new_existing) + # We need to clean this up because it wasn't created in a fixture + ret = user.delete(name=new_existing, purge=True, force=True) + assert ret is True + assert new_existing not in user.list_users() + + +def test_rename_int(account_int): + new_name = random_string("", uppercase=False, lowercase=False, digits=True) + ret = user.rename(name=account_int.username, new_name=new_name) + assert ret is True + assert new_name in user.list_users() + # Let's set it back so that it gets cleaned up... + ret = user.rename(name=new_name, new_name=account_int.username) + assert ret is True + + +def test_rename_int_missing(account_int): + missing = random_string("", uppercase=False, lowercase=False, digits=True) + with pytest.raises(CommandExecutionError): + user.rename(name=missing, new_name="spongebob") + + +def test_rename_int_existing(account_int): + new_existing = random_string("", uppercase=False, lowercase=False, digits=True) + ret = user.add(name=new_existing) + assert ret is True + with pytest.raises(CommandExecutionError): + user.rename(name=account_int.username, new_name=new_existing) + # We need to clean this up because it wasn't created in a fixture + ret = user.delete(name=new_existing, purge=True, force=True) + assert ret is True + assert new_existing not in user.list_users() + + +def test_setpassword_str(account_str): + ret = user.setpassword(account_str.username, password="Sup3rS3cret") + # We have no way of verifying the password was changed on Windows, so the + # best we can do is check that the command completed successfully + assert ret is True + + +def test_setpassword_int(account_int): + ret = user.setpassword(account_int.username, password="Sup3rS3cret") + # We have no way of verifying the password was changed on Windows, so the + # best we can do is check that the command completed successfully + assert ret is True + + +@pytest.mark.parametrize( + "value_name, new_value, info_field, expected", + [ + ("description", "New description", "", None), + ("homedrive", "H:", "", None), + ("logonscript", "\\\\server\\script.cmd", "", None), + ("expiration_date", "3/19/2024", "", "2024-03-19 00:00:00"), + ("expiration_date", "Never", "", None), + ("expired", True, "", None), + ("expired", False, "", None), + ("account_disabled", True, "", None), + ("account_disabled", False, "", None), + ("unlock_account", True, "account_locked", False), + ("password_never_expires", True, "", None), + ("password_never_expires", False, "", None), + ("disallow_change_password", True, "", None), + ("disallow_change_password", False, "", None), + ], +) +def test_update_str(value_name, new_value, info_field, expected, account_str): + setting = {value_name: new_value} + ret = user.update(account_str.username, **setting) + assert ret is True + ret = user.info(account_str.username) + info_field = info_field if info_field else value_name + expected = expected if expected is not None else new_value + assert ret[info_field] == expected From b7dd23ef4ebd8eea98eddb570e57c845d44b0ed4 Mon Sep 17 00:00:00 2001 From: Shane Lee Date: Wed, 20 Mar 2024 08:12:34 -0600 Subject: [PATCH 09/32] Move test_win_useradd.py to functional --- tests/pytests/{unit => functional}/modules/test_win_useradd.py | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/pytests/{unit => functional}/modules/test_win_useradd.py (100%) diff --git a/tests/pytests/unit/modules/test_win_useradd.py b/tests/pytests/functional/modules/test_win_useradd.py similarity index 100% rename from tests/pytests/unit/modules/test_win_useradd.py rename to tests/pytests/functional/modules/test_win_useradd.py From 979457d93519de9c1bbe89c07ad4cc2c59f2b180 Mon Sep 17 00:00:00 2001 From: Shane Lee Date: Wed, 20 Mar 2024 08:39:55 -0600 Subject: [PATCH 10/32] Fix some test issues, use sort --- salt/modules/win_dacl.py | 12 +++++----- salt/modules/win_useradd.py | 22 +++++++++++++++++-- .../functional/modules/test_win_useradd.py | 21 +++++++++--------- 3 files changed, 36 insertions(+), 19 deletions(-) diff --git a/salt/modules/win_dacl.py b/salt/modules/win_dacl.py index b8b5aca3dc3..18dbcdd84f6 100644 --- a/salt/modules/win_dacl.py +++ b/salt/modules/win_dacl.py @@ -329,7 +329,7 @@ class daclConstants: return path -def _getUserSid(user): +def _get_user_sid(user): """ return a state error dictionary, with 'sid' as a field if it could be returned if user is None, sid will also be None @@ -413,7 +413,7 @@ def get(path, objectType, user=None): """ ret = {"Path": path, "ACLs": []} - sidRet = _getUserSid(user) + sidRet = _get_user_sid(user) if path and objectType: dc = daclConstants() @@ -458,7 +458,7 @@ def add_ace(path, objectType, user, permission, acetype, propagation): acetype = acetype.strip().upper() propagation = propagation.strip().upper() - sidRet = _getUserSid(user) + sidRet = _get_user_sid(user) if not sidRet["result"]: return sidRet permissionbit = dc.getPermissionBit(objectTypeBit, permission) @@ -555,7 +555,7 @@ def rm_ace(path, objectType, user, permission=None, acetype=None, propagation=No if check_ace(path, objectType, user, permission, acetype, propagation, True)[ "Exists" ]: - sidRet = _getUserSid(user) + sidRet = _get_user_sid(user) if not sidRet["result"]: return sidRet permissionbit = ( @@ -804,7 +804,7 @@ def check_inheritance(path, objectType, user=None): ret = {"result": False, "Inheritance": False, "comment": ""} - sidRet = _getUserSid(user) + sidRet = _get_user_sid(user) dc = daclConstants() objectType = dc.getObjectTypeBit(objectType) @@ -880,7 +880,7 @@ def check_ace( dc.getPropagationBit(objectTypeBit, propagation) if propagation else None ) - sidRet = _getUserSid(user) + sidRet = _get_user_sid(user) if not sidRet["result"]: return sidRet diff --git a/salt/modules/win_useradd.py b/salt/modules/win_useradd.py index 7fe48727d08..1a667909afd 100644 --- a/salt/modules/win_useradd.py +++ b/salt/modules/win_useradd.py @@ -31,6 +31,7 @@ from datetime import datetime import salt.utils.args import salt.utils.dateutils import salt.utils.platform +import salt.utils.versions import salt.utils.win_reg import salt.utils.winapi from salt.exceptions import CommandExecutionError @@ -370,7 +371,7 @@ def delete(name, purge=False, force=False): # Remove the User Profile directory if purge: try: - sid = getUserSid(name) + sid = get_user_sid(name) win32profile.DeleteProfile(sid) except pywintypes.error as exc: (number, context, message) = exc.args @@ -397,6 +398,23 @@ def delete(name, purge=False, force=False): def getUserSid(username): + """ + Deprecated function. Please use get_user_sid instead + + CLI Example: + + .. code-block:: bash + + salt '*' user.get_user_sid jsnuffy + """ + salt.utils.versions.warn_until( + version=3009, + message="'getUserSid' is being deprecated. Please use get_user_sid instead", + ) + return get_user_sid(username) + + +def get_user_sid(username): """ Get the Security ID for the user @@ -410,7 +428,7 @@ def getUserSid(username): .. code-block:: bash - salt '*' user.getUserSid jsnuffy + salt '*' user.get_user_sid jsnuffy """ domain = win32api.GetComputerName() if username.find("\\") != -1: diff --git a/tests/pytests/functional/modules/test_win_useradd.py b/tests/pytests/functional/modules/test_win_useradd.py index 6084c5bc566..37572676d54 100644 --- a/tests/pytests/functional/modules/test_win_useradd.py +++ b/tests/pytests/functional/modules/test_win_useradd.py @@ -3,7 +3,6 @@ from saltfactories.utils import random_string import salt.modules.cmdmod import salt.modules.win_useradd as user -import salt.utils.data from salt.exceptions import CommandExecutionError pytestmark = [ @@ -104,7 +103,7 @@ def test_chgroups_single_str(account_str): assert ret is True ret = user.info(account_str.username) groups.append("Users") - assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + assert ret["groups"].sort() == groups.sort() def test_chgroups_single_int(account_int): @@ -113,7 +112,7 @@ def test_chgroups_single_int(account_int): assert ret is True ret = user.info(account_int.username) groups.append("Users") - assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + assert ret["groups"].sort() == groups.sort() def test_chgroups_list_str(account_str): @@ -122,7 +121,7 @@ def test_chgroups_list_str(account_str): assert ret is True ret = user.info(account_str.username) groups.append("Users") - assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + assert ret["groups"].sort() == groups.sort() def test_chgroups_list_int(account_int): @@ -131,7 +130,7 @@ def test_chgroups_list_int(account_int): assert ret is True ret = user.info(account_int.username) groups.append("Users") - assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + assert ret["groups"].sort() == groups.sort() def test_chgroups_list_append_false_str(account_str): @@ -139,7 +138,7 @@ def test_chgroups_list_append_false_str(account_str): ret = user.chgroups(account_str.username, groups=groups, append=False) assert ret is True ret = user.info(account_str.username) - assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + assert ret["groups"].sort() == groups.sort() def test_chgroups_list_append_false_int(account_int): @@ -147,7 +146,7 @@ def test_chgroups_list_append_false_int(account_int): ret = user.chgroups(account_int.username, groups=groups, append=False) assert ret is True ret = user.info(account_int.username) - assert salt.utils.data.compare_lists(ret["groups"], groups) == {} + assert ret["groups"].sort() == groups.sort() def test_chhome_str(account_str): @@ -194,13 +193,13 @@ def test_delete_int(account_int): assert user.info(name=account_int.username) == {} -def test_getUserSig_str(account_str): - ret = user.getUserSid(account_str.username) +def test_get_user_sid_str(account_str): + ret = user.get_user_sid(account_str.username) assert ret.startswith("S-1-5") -def test_getUserSig_int(account_int): - ret = user.getUserSid(account_int.username) +def test_get_user_sid_int(account_int): + ret = user.get_user_sid(account_int.username) assert ret.startswith("S-1-5") From 4dcad68d9bc6fd14aa1588a1fb6f17d88d49d044 Mon Sep 17 00:00:00 2001 From: Shane Lee Date: Wed, 20 Mar 2024 10:36:25 -0600 Subject: [PATCH 11/32] Don't use configure_loader_modules --- .../functional/modules/test_win_useradd.py | 88 +++++++++---------- 1 file changed, 43 insertions(+), 45 deletions(-) diff --git a/tests/pytests/functional/modules/test_win_useradd.py b/tests/pytests/functional/modules/test_win_useradd.py index 37572676d54..5396c39bb70 100644 --- a/tests/pytests/functional/modules/test_win_useradd.py +++ b/tests/pytests/functional/modules/test_win_useradd.py @@ -1,8 +1,6 @@ import pytest from saltfactories.utils import random_string -import salt.modules.cmdmod -import salt.modules.win_useradd as user from salt.exceptions import CommandExecutionError pytestmark = [ @@ -12,13 +10,13 @@ pytestmark = [ ] -@pytest.fixture -def configure_loader_modules(): - return {user: {"__salt__": {"cmd.run_all": salt.modules.cmdmod.run_all}}} +@pytest.fixture(scope="module") +def user(modules): + return modules.user @pytest.fixture -def username_str(): +def username_str(user): _username = random_string("test-account-", uppercase=False) try: yield _username @@ -31,7 +29,7 @@ def username_str(): @pytest.fixture -def username_int(): +def username_int(user): _username = random_string("", uppercase=False, lowercase=False, digits=True) try: yield _username @@ -44,60 +42,60 @@ def username_int(): @pytest.fixture -def account_str(username_str): +def account_str(user, username_str): with pytest.helpers.create_account(username=username_str) as account: user.addgroup(account.username, "Users") yield account @pytest.fixture -def account_int(username_int): +def account_int(user, username_int): with pytest.helpers.create_account(username=username_int) as account: user.addgroup(account.username, "Users") yield account -def test_add_str(username_str): +def test_add_str(user, username_str): ret = user.add(name=username_str) assert ret is True assert username_str in user.list_users() -def test_add_int(username_int): +def test_add_int(user, username_int): ret = user.add(name=username_int) assert ret is True assert username_int in user.list_users() -def test_addgroup_str(account_str): +def test_addgroup_str(user, account_str): ret = user.addgroup(account_str.username, "Backup Operators") assert ret is True ret = user.info(account_str.username) assert "Backup Operators" in ret["groups"] -def test_addgroup_int(account_int): +def test_addgroup_int(user, account_int): ret = user.addgroup(account_int.username, "Backup Operators") assert ret is True ret = user.info(account_int.username) assert "Backup Operators" in ret["groups"] -def test_chfullname_str(account_str): +def test_chfullname_str(user, account_str): ret = user.chfullname(account_str.username, "New Full Name") assert ret is True ret = user.info(account_str.username) assert ret["fullname"] == "New Full Name" -def test_chfullname_int(account_int): +def test_chfullname_int(user, account_int): ret = user.chfullname(account_int.username, "New Full Name") assert ret is True ret = user.info(account_int.username) assert ret["fullname"] == "New Full Name" -def test_chgroups_single_str(account_str): +def test_chgroups_single_str(user, account_str): groups = ["Backup Operators"] ret = user.chgroups(account_str.username, groups=groups) assert ret is True @@ -106,7 +104,7 @@ def test_chgroups_single_str(account_str): assert ret["groups"].sort() == groups.sort() -def test_chgroups_single_int(account_int): +def test_chgroups_single_int(user, account_int): groups = ["Backup Operators"] ret = user.chgroups(account_int.username, groups=groups) assert ret is True @@ -115,7 +113,7 @@ def test_chgroups_single_int(account_int): assert ret["groups"].sort() == groups.sort() -def test_chgroups_list_str(account_str): +def test_chgroups_list_str(user, account_str): groups = ["Backup Operators", "Guests"] ret = user.chgroups(account_str.username, groups=groups) assert ret is True @@ -124,7 +122,7 @@ def test_chgroups_list_str(account_str): assert ret["groups"].sort() == groups.sort() -def test_chgroups_list_int(account_int): +def test_chgroups_list_int(user, account_int): groups = ["Backup Operators", "Guests"] ret = user.chgroups(account_int.username, groups=groups) assert ret is True @@ -133,7 +131,7 @@ def test_chgroups_list_int(account_int): assert ret["groups"].sort() == groups.sort() -def test_chgroups_list_append_false_str(account_str): +def test_chgroups_list_append_false_str(user, account_str): groups = ["Backup Operators", "Guests"] ret = user.chgroups(account_str.username, groups=groups, append=False) assert ret is True @@ -141,7 +139,7 @@ def test_chgroups_list_append_false_str(account_str): assert ret["groups"].sort() == groups.sort() -def test_chgroups_list_append_false_int(account_int): +def test_chgroups_list_append_false_int(user, account_int): groups = ["Backup Operators", "Guests"] ret = user.chgroups(account_int.username, groups=groups, append=False) assert ret is True @@ -149,7 +147,7 @@ def test_chgroups_list_append_false_int(account_int): assert ret["groups"].sort() == groups.sort() -def test_chhome_str(account_str): +def test_chhome_str(user, account_str): home = r"C:\spongebob\squarepants" ret = user.chhome(name=account_str.username, home=home) assert ret is True @@ -157,7 +155,7 @@ def test_chhome_str(account_str): assert ret["home"] == home -def test_chhome_int(account_int): +def test_chhome_int(user, account_int): home = r"C:\spongebob\squarepants" ret = user.chhome(name=account_int.username, home=home) assert ret is True @@ -165,7 +163,7 @@ def test_chhome_int(account_int): assert ret["home"] == home -def test_chprofile_str(account_str): +def test_chprofile_str(user, account_str): profile = r"C:\spongebob\squarepants" ret = user.chprofile(name=account_str.username, profile=profile) assert ret is True @@ -173,7 +171,7 @@ def test_chprofile_str(account_str): assert ret["profile"] == profile -def test_chprofile_int(account_int): +def test_chprofile_int(user, account_int): profile = r"C:\spongebob\squarepants" ret = user.chprofile(name=account_int.username, profile=profile) assert ret is True @@ -181,70 +179,70 @@ def test_chprofile_int(account_int): assert ret["profile"] == profile -def test_delete_str(account_str): +def test_delete_str(user, account_str): ret = user.delete(name=account_str.username) assert ret is True assert user.info(name=account_str.username) == {} -def test_delete_int(account_int): +def test_delete_int(user, account_int): ret = user.delete(name=account_int.username) assert ret is True assert user.info(name=account_int.username) == {} -def test_get_user_sid_str(account_str): +def test_get_user_sid_str(user, account_str): ret = user.get_user_sid(account_str.username) assert ret.startswith("S-1-5") -def test_get_user_sid_int(account_int): +def test_get_user_sid_int(user, account_int): ret = user.get_user_sid(account_int.username) assert ret.startswith("S-1-5") -def test_info_str(account_str): +def test_info_str(user, account_str): ret = user.info(account_str.username) assert ret["name"] == account_str.username assert ret["uid"].startswith("S-1-5") -def test_info_int(account_int): +def test_info_int(user, account_int): ret = user.info(account_int.username) assert ret["name"] == account_int.username assert ret["uid"].startswith("S-1-5") -def test_list_groups_str(account_str): +def test_list_groups_str(user, account_str): ret = user.list_groups(account_str.username) assert ret == ["Users"] -def test_list_groups_int(account_int): +def test_list_groups_int(user, account_int): ret = user.list_groups(account_int.username) assert ret == ["Users"] -def test_list_users(): +def test_list_users(user): ret = user.list_users() assert "Administrator" in ret -def test_removegroup_str(account_str): +def test_removegroup_str(user, account_str): ret = user.removegroup(account_str.username, "Users") assert ret is True ret = user.info(account_str.username) assert ret["groups"] == [] -def test_removegroup_int(account_int): +def test_removegroup_int(user, account_int): ret = user.removegroup(account_int.username, "Users") assert ret is True ret = user.info(account_int.username) assert ret["groups"] == [] -def test_rename_str(account_str): +def test_rename_str(user, account_str): new_name = random_string("test-account-", uppercase=False) ret = user.rename(name=account_str.username, new_name=new_name) assert ret is True @@ -254,13 +252,13 @@ def test_rename_str(account_str): assert ret is True -def test_rename_str_missing(account_str): +def test_rename_str_missing(user, account_str): missing = random_string("test-account-", uppercase=False) with pytest.raises(CommandExecutionError): user.rename(name=missing, new_name="spongebob") -def test_rename_str_existing(account_str): +def test_rename_str_existing(user, account_str): new_existing = random_string("test-account-", uppercase=False) ret = user.add(name=new_existing) assert ret is True @@ -272,7 +270,7 @@ def test_rename_str_existing(account_str): assert new_existing not in user.list_users() -def test_rename_int(account_int): +def test_rename_int(user, account_int): new_name = random_string("", uppercase=False, lowercase=False, digits=True) ret = user.rename(name=account_int.username, new_name=new_name) assert ret is True @@ -282,13 +280,13 @@ def test_rename_int(account_int): assert ret is True -def test_rename_int_missing(account_int): +def test_rename_int_missing(user, account_int): missing = random_string("", uppercase=False, lowercase=False, digits=True) with pytest.raises(CommandExecutionError): user.rename(name=missing, new_name="spongebob") -def test_rename_int_existing(account_int): +def test_rename_int_existing(user, account_int): new_existing = random_string("", uppercase=False, lowercase=False, digits=True) ret = user.add(name=new_existing) assert ret is True @@ -300,14 +298,14 @@ def test_rename_int_existing(account_int): assert new_existing not in user.list_users() -def test_setpassword_str(account_str): +def test_setpassword_str(user, account_str): ret = user.setpassword(account_str.username, password="Sup3rS3cret") # We have no way of verifying the password was changed on Windows, so the # best we can do is check that the command completed successfully assert ret is True -def test_setpassword_int(account_int): +def test_setpassword_int(user, account_int): ret = user.setpassword(account_int.username, password="Sup3rS3cret") # We have no way of verifying the password was changed on Windows, so the # best we can do is check that the command completed successfully @@ -333,7 +331,7 @@ def test_setpassword_int(account_int): ("disallow_change_password", False, "", None), ], ) -def test_update_str(value_name, new_value, info_field, expected, account_str): +def test_update_str(user, value_name, new_value, info_field, expected, account_str): setting = {value_name: new_value} ret = user.update(account_str.username, **setting) assert ret is True From 017f714e96dd057c00526a7bbf7029f83cdeb7bb Mon Sep 17 00:00:00 2001 From: Shane Lee Date: Wed, 20 Mar 2024 11:52:12 -0600 Subject: [PATCH 12/32] Use sorted instead of sort --- tests/pytests/functional/modules/test_win_useradd.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/tests/pytests/functional/modules/test_win_useradd.py b/tests/pytests/functional/modules/test_win_useradd.py index 5396c39bb70..01f4a71e349 100644 --- a/tests/pytests/functional/modules/test_win_useradd.py +++ b/tests/pytests/functional/modules/test_win_useradd.py @@ -101,7 +101,7 @@ def test_chgroups_single_str(user, account_str): assert ret is True ret = user.info(account_str.username) groups.append("Users") - assert ret["groups"].sort() == groups.sort() + assert sorted(ret["groups"]) == sorted(groups) def test_chgroups_single_int(user, account_int): @@ -110,7 +110,7 @@ def test_chgroups_single_int(user, account_int): assert ret is True ret = user.info(account_int.username) groups.append("Users") - assert ret["groups"].sort() == groups.sort() + assert sorted(ret["groups"]) == sorted(groups) def test_chgroups_list_str(user, account_str): @@ -119,7 +119,7 @@ def test_chgroups_list_str(user, account_str): assert ret is True ret = user.info(account_str.username) groups.append("Users") - assert ret["groups"].sort() == groups.sort() + assert sorted(ret["groups"]) == sorted(groups) def test_chgroups_list_int(user, account_int): @@ -128,7 +128,7 @@ def test_chgroups_list_int(user, account_int): assert ret is True ret = user.info(account_int.username) groups.append("Users") - assert ret["groups"].sort() == groups.sort() + assert sorted(ret["groups"]) == sorted(groups) def test_chgroups_list_append_false_str(user, account_str): @@ -136,7 +136,7 @@ def test_chgroups_list_append_false_str(user, account_str): ret = user.chgroups(account_str.username, groups=groups, append=False) assert ret is True ret = user.info(account_str.username) - assert ret["groups"].sort() == groups.sort() + assert sorted(ret["groups"]) == sorted(groups) def test_chgroups_list_append_false_int(user, account_int): @@ -144,7 +144,7 @@ def test_chgroups_list_append_false_int(user, account_int): ret = user.chgroups(account_int.username, groups=groups, append=False) assert ret is True ret = user.info(account_int.username) - assert ret["groups"].sort() == groups.sort() + assert sorted(ret["groups"]) == sorted(groups) def test_chhome_str(user, account_str): From 87d3344a7a374c74d6c906423bb32223d9dfcd8c Mon Sep 17 00:00:00 2001 From: Shane Lee Date: Thu, 21 Mar 2024 09:55:48 -0600 Subject: [PATCH 13/32] Fix failing package tests --- salt/modules/win_useradd.py | 7 ++++++- tests/support/pytest/helpers.py | 16 ++++++++-------- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/salt/modules/win_useradd.py b/salt/modules/win_useradd.py index 1a667909afd..b21f5c70812 100644 --- a/salt/modules/win_useradd.py +++ b/salt/modules/win_useradd.py @@ -122,7 +122,10 @@ def add( user_info["name"] = str(name) else: return False - user_info["password"] = str(password) + if password: + user_info["password"] = str(password) + else: + user_info["password"] = None user_info["priv"] = win32netcon.USER_PRIV_USER user_info["home_dir"] = home user_info["comment"] = description @@ -234,6 +237,8 @@ def update( # Update the user object with new settings if password: user_info["password"] = str(password) + else: + user_info["password"] = None if home: user_info["home_dir"] = home if homedrive: diff --git a/tests/support/pytest/helpers.py b/tests/support/pytest/helpers.py index 51c59a54ede..00beffa66a0 100644 --- a/tests/support/pytest/helpers.py +++ b/tests/support/pytest/helpers.py @@ -63,7 +63,7 @@ def temp_state_file(name, contents, saltenv="base", strip_first_newline=True): saltenv(str): The salt env to use. Either ``base`` or ``prod`` strip_first_newline(bool): - Wether to strip the initial first new line char or not. + Whether to strip the initial first new line char or not. """ if saltenv == "base": @@ -109,7 +109,7 @@ def temp_pillar_file(name, contents, saltenv="base", strip_first_newline=True): saltenv(str): The salt env to use. Either ``base`` or ``prod`` strip_first_newline(bool): - Wether to strip the initial first new line char or not. + Whether to strip the initial first new line char or not. """ if saltenv == "base": @@ -236,7 +236,7 @@ class TestGroup: self._delete_group = True log.debug("Created system group: %s", self) else: - log.debug("Reusing exising system group: %s", self) + log.debug("Reusing existing system group: %s", self) if self.members: ret = self.sminion.functions.group.members( self.name, members_list=self.members @@ -325,14 +325,14 @@ class TestAccount: if not self.sminion.functions.user.info(self.username): log.debug("Creating system account: %s", self) ret = self.sminion.functions.user.add(self.username) - assert ret + assert ret is True self._delete_account = True if salt.utils.platform.is_darwin() or salt.utils.platform.is_windows(): password = self.password else: password = self.hashed_password ret = self.sminion.functions.shadow.set_password(self.username, password) - assert ret + assert ret is True assert self.username in self.sminion.functions.user.list_users() if self._group: self.group.__enter__() @@ -344,7 +344,7 @@ class TestAccount: if self._delete_account: log.debug("Created system account: %s", self) else: - log.debug("Reusing exisintg system account: %s", self) + log.debug("Reusing existing system account: %s", self) # Run tests return self @@ -700,7 +700,7 @@ class EntropyGenerator: kernel_entropy_file = pathlib.Path("/proc/sys/kernel/random/entropy_avail") kernel_poolsize_file = pathlib.Path("/proc/sys/kernel/random/poolsize") if not kernel_entropy_file.exists(): - log.info("The '%s' file is not avilable", kernel_entropy_file) + log.info("The '%s' file is not available", kernel_entropy_file) return self.current_entropy = int( @@ -709,7 +709,7 @@ class EntropyGenerator: log.info("Available Entropy: %s", self.current_entropy) if not kernel_poolsize_file.exists(): - log.info("The '%s' file is not avilable", kernel_poolsize_file) + log.info("The '%s' file is not available", kernel_poolsize_file) else: self.current_poolsize = int( kernel_poolsize_file.read_text(encoding="utf-8").strip() From 53fce6957d5582645782bf140ef774c9bd30797d Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Mon, 25 Mar 2024 15:49:38 -0600 Subject: [PATCH 14/32] Fix RedHat family systemd restart on upgrade, and updated tests --- changelog/66143.fixed.md | 1 + pkg/rpm/salt.spec | 8 ++--- .../pkg/downgrade/test_salt_downgrade.py | 33 ++++++++++++------- .../pytests/pkg/upgrade/test_salt_upgrade.py | 33 ++++++++++++------- 4 files changed, 47 insertions(+), 28 deletions(-) create mode 100644 changelog/66143.fixed.md diff --git a/changelog/66143.fixed.md b/changelog/66143.fixed.md new file mode 100644 index 00000000000..58ecbd163c5 --- /dev/null +++ b/changelog/66143.fixed.md @@ -0,0 +1 @@ +Fix systemctl with "try-restart" instead of "retry-restart" within the RPM spec, properly restarting upgraded services diff --git a/pkg/rpm/salt.spec b/pkg/rpm/salt.spec index 2821cfd2f05..540f2fb42fe 100644 --- a/pkg/rpm/salt.spec +++ b/pkg/rpm/salt.spec @@ -475,7 +475,7 @@ ln -s -f /opt/saltstack/salt/salt-cloud %{_bindir}/salt-cloud # %%systemd_post salt-master.service if [ $1 -gt 1 ] ; then # Upgrade - systemctl retry-restart salt-master.service >/dev/null 2>&1 || : + systemctl try-restart salt-master.service >/dev/null 2>&1 || : else # Initial installation systemctl preset salt-master.service >/dev/null 2>&1 || : @@ -503,7 +503,7 @@ fi # %%systemd_post salt-syndic.service if [ $1 -gt 1 ] ; then # Upgrade - systemctl retry-restart salt-syndic.service >/dev/null 2>&1 || : + systemctl try-restart salt-syndic.service >/dev/null 2>&1 || : else # Initial installation systemctl preset salt-syndic.service >/dev/null 2>&1 || : @@ -514,7 +514,7 @@ ln -s -f /opt/saltstack/salt/salt-syndic %{_bindir}/salt-syndic # %%systemd_post salt-minion.service if [ $1 -gt 1 ] ; then # Upgrade - systemctl retry-restart salt-minion.service >/dev/null 2>&1 || : + systemctl try-restart salt-minion.service >/dev/null 2>&1 || : else # Initial installation systemctl preset salt-minion.service >/dev/null 2>&1 || : @@ -543,7 +543,7 @@ ln -s -f /opt/saltstack/salt/salt-ssh %{_bindir}/salt-ssh # %%systemd_post salt-api.service if [ $1 -gt 1 ] ; then # Upgrade - systemctl retry-restart salt-api.service >/dev/null 2>&1 || : + systemctl try-restart salt-api.service >/dev/null 2>&1 || : else # Initial installation systemctl preset salt-api.service >/dev/null 2>&1 || : diff --git a/tests/pytests/pkg/downgrade/test_salt_downgrade.py b/tests/pytests/pkg/downgrade/test_salt_downgrade.py index ec090d17dda..43fe1cc30dd 100644 --- a/tests/pytests/pkg/downgrade/test_salt_downgrade.py +++ b/tests/pytests/pkg/downgrade/test_salt_downgrade.py @@ -36,17 +36,25 @@ def test_salt_downgrade(salt_call_cli, install_salt): assert "Authentication information could" in use_lib.stderr # Verify there is a running minion by getting its PID + salt_name = "salt" if platform.is_windows(): process_name = "salt-minion.exe" else: process_name = "salt-minion" - old_pid = None + + old_pid = [] + + # psutil process name only returning first part of the command '/opt/saltstack/' + # need to check all of command line for salt-minion + # ['/opt/saltstack/salt/bin/python3.10 /usr/bin/salt-minion MultiMinionProcessManager MinionProcessManager'] + # and psutil is only returning the salt-minion once for proc in psutil.process_iter(): - if process_name in proc.name(): - if psutil.Process(proc.ppid()).name() != process_name: - old_pid = proc.pid - break - assert old_pid is not None + if salt_name in proc.name(): + cmdl_strg = " ".join(str(element) for element in proc.cmdline()) + if process_name in cmdl_strg: + old_pid.append(proc.pid) + + assert old_pid # Downgrade Salt to the previous version and test install_salt.install(downgrade=True) @@ -61,13 +69,14 @@ def test_salt_downgrade(salt_call_cli, install_salt): # Verify there is a new running minion by getting its PID and comparing it # with the PID from before the upgrade - new_pid = None + new_pid = [] for proc in psutil.process_iter(): - if process_name in proc.name(): - if psutil.Process(proc.ppid()).name() != process_name: - new_pid = proc.pid - break - assert new_pid is not None + if salt_name in proc.name(): + cmdl_strg = " ".join(str(element) for element in proc.cmdline()) + if process_name in cmdl_strg: + new_pid.append(proc.pid) + + assert new_pid assert new_pid != old_pid ret = install_salt.proc.run(bin_file, "--version") diff --git a/tests/pytests/pkg/upgrade/test_salt_upgrade.py b/tests/pytests/pkg/upgrade/test_salt_upgrade.py index 241a3c63d0f..d376d581adb 100644 --- a/tests/pytests/pkg/upgrade/test_salt_upgrade.py +++ b/tests/pytests/pkg/upgrade/test_salt_upgrade.py @@ -32,17 +32,25 @@ def test_salt_upgrade(salt_call_cli, install_salt): assert "Authentication information could" in use_lib.stderr # Verify there is a running minion by getting its PID + salt_name = "salt" if platform.is_windows(): process_name = "salt-minion.exe" else: process_name = "salt-minion" - old_pid = None + + old_pid = [] + + # psutil process name only returning first part of the command '/opt/saltstack/' + # need to check all of command line for salt-minion + # ['/opt/saltstack/salt/bin/python3.10 /usr/bin/salt-minion MultiMinionProcessManager MinionProcessManager'] + # and psutil is only returning the salt-minion once for proc in psutil.process_iter(): - if process_name in proc.name(): - if psutil.Process(proc.ppid()).name() != process_name: - old_pid = proc.pid - break - assert old_pid is not None + if salt_name in proc.name(): + cmdl_strg = " ".join(str(element) for element in proc.cmdline()) + if process_name in cmdl_strg: + old_pid.append(proc.pid) + + assert old_pid # Upgrade Salt from previous version and test install_salt.install(upgrade=True) @@ -54,13 +62,14 @@ def test_salt_upgrade(salt_call_cli, install_salt): # Verify there is a new running minion by getting its PID and comparing it # with the PID from before the upgrade - new_pid = None + new_pid = [] for proc in psutil.process_iter(): - if process_name in proc.name(): - if psutil.Process(proc.ppid()).name() != process_name: - new_pid = proc.pid - break - assert new_pid is not None + if salt_name in proc.name(): + cmdl_strg = " ".join(str(element) for element in proc.cmdline()) + if process_name in cmdl_strg: + new_pid.append(proc.pid) + + assert new_pid assert new_pid != old_pid if install_salt.relenv: From 61df4d8c869d021e472f1d214dc5831b0da2b73f Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 26 Mar 2024 15:45:24 -0600 Subject: [PATCH 15/32] Ensure path for systemctl to stop spoofing (security fix moved from classic spec) and debug helper scripts --- pkg/rpm/salt.spec | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/pkg/rpm/salt.spec b/pkg/rpm/salt.spec index 540f2fb42fe..53f739f2481 100644 --- a/pkg/rpm/salt.spec +++ b/pkg/rpm/salt.spec @@ -176,7 +176,7 @@ cd $RPM_BUILD_DIR # Fix any hardcoded paths to the relenv python binary on any of the scripts installed in # the /bin directory - find $RPM_BUILD_DIR/build/salt/bin/ -type f -exec sed -i 's:#!/\(.*\)salt/bin/python3:#!/bin/sh\n"exec" "$(dirname $(readlink -f $0))/python3" "$0" "$@":g' {} \; + find $RPM_BUILD_DIR/build/salt/bin/ -type f -exec sed -i 's:#!/\(.*\)salt/bin/python3:#!/bin/sh -x\n"exec" "$(dirname $(readlink -f $0))/python3" "$0" "$@":g' {} \; $RPM_BUILD_DIR/build/venv/bin/tools pkg build salt-onedir . --package-name $RPM_BUILD_DIR/build/salt --platform linux $RPM_BUILD_DIR/build/venv/bin/tools pkg pre-archive-cleanup --pkg $RPM_BUILD_DIR/build/salt @@ -439,16 +439,16 @@ find /etc/salt /opt/saltstack/salt /var/log/salt /var/cache/salt /var/run/salt \ # %%systemd_preun salt-syndic.service > /dev/null 2>&1 if [ $1 -eq 0 ] ; then # Package removal, not upgrade - systemctl --no-reload disable salt-syndic.service > /dev/null 2>&1 || : - systemctl stop salt-syndic.service > /dev/null 2>&1 || : + /bin/systemctl --no-reload disable salt-syndic.service > /dev/null 2>&1 || : + /bin/systemctl stop salt-syndic.service > /dev/null 2>&1 || : fi %preun minion # %%systemd_preun salt-minion.service if [ $1 -eq 0 ] ; then # Package removal, not upgrade - systemctl --no-reload disable salt-minion.service > /dev/null 2>&1 || : - systemctl stop salt-minion.service > /dev/null 2>&1 || : + /bin/systemctl --no-reload disable salt-minion.service > /dev/null 2>&1 || : + /bin/systemctl stop salt-minion.service > /dev/null 2>&1 || : fi @@ -456,8 +456,8 @@ fi # %%systemd_preun salt-api.service if [ $1 -eq 0 ] ; then # Package removal, not upgrade - systemctl --no-reload disable salt-api.service > /dev/null 2>&1 || : - systemctl stop salt-api.service > /dev/null 2>&1 || : + /bin/systemctl --no-reload disable salt-api.service > /dev/null 2>&1 || : + /bin/systemctl stop salt-api.service > /dev/null 2>&1 || : fi @@ -475,10 +475,10 @@ ln -s -f /opt/saltstack/salt/salt-cloud %{_bindir}/salt-cloud # %%systemd_post salt-master.service if [ $1 -gt 1 ] ; then # Upgrade - systemctl try-restart salt-master.service >/dev/null 2>&1 || : + /bin/systemctl try-restart salt-master.service >/dev/null 2>&1 || : else # Initial installation - systemctl preset salt-master.service >/dev/null 2>&1 || : + /bin/systemctl preset salt-master.service >/dev/null 2>&1 || : fi ln -s -f /opt/saltstack/salt/salt %{_bindir}/salt ln -s -f /opt/saltstack/salt/salt-cp %{_bindir}/salt-cp @@ -503,10 +503,10 @@ fi # %%systemd_post salt-syndic.service if [ $1 -gt 1 ] ; then # Upgrade - systemctl try-restart salt-syndic.service >/dev/null 2>&1 || : + /bin/systemctl try-restart salt-syndic.service >/dev/null 2>&1 || : else # Initial installation - systemctl preset salt-syndic.service >/dev/null 2>&1 || : + /bin/systemctl preset salt-syndic.service >/dev/null 2>&1 || : fi ln -s -f /opt/saltstack/salt/salt-syndic %{_bindir}/salt-syndic @@ -514,10 +514,10 @@ ln -s -f /opt/saltstack/salt/salt-syndic %{_bindir}/salt-syndic # %%systemd_post salt-minion.service if [ $1 -gt 1 ] ; then # Upgrade - systemctl try-restart salt-minion.service >/dev/null 2>&1 || : + /bin/systemctl try-restart salt-minion.service >/dev/null 2>&1 || : else # Initial installation - systemctl preset salt-minion.service >/dev/null 2>&1 || : + /bin/systemctl preset salt-minion.service >/dev/null 2>&1 || : fi ln -s -f /opt/saltstack/salt/salt-minion %{_bindir}/salt-minion ln -s -f /opt/saltstack/salt/salt-call %{_bindir}/salt-call @@ -543,10 +543,10 @@ ln -s -f /opt/saltstack/salt/salt-ssh %{_bindir}/salt-ssh # %%systemd_post salt-api.service if [ $1 -gt 1 ] ; then # Upgrade - systemctl try-restart salt-api.service >/dev/null 2>&1 || : + /bin/systemctl try-restart salt-api.service >/dev/null 2>&1 || : else # Initial installation - systemctl preset salt-api.service >/dev/null 2>&1 || : + /bin/systemctl preset salt-api.service >/dev/null 2>&1 || : fi ln -s -f /opt/saltstack/salt/salt-api %{_bindir}/salt-api @@ -589,10 +589,10 @@ fi %postun master # %%systemd_postun_with_restart salt-master.service -systemctl daemon-reload >/dev/null 2>&1 || : +/bin/systemctl daemon-reload >/dev/null 2>&1 || : if [ $1 -ge 1 ] ; then # Package upgrade, not uninstall - systemctl try-restart salt-master.service >/dev/null 2>&1 || : + /bin/systemctl try-restart salt-master.service >/dev/null 2>&1 || : fi if [ $1 -eq 0 ]; then if [ $(cat /etc/os-release | grep VERSION_ID | cut -d '=' -f 2 | sed 's/\"//g' | cut -d '.' -f 1) = "8" ]; then @@ -610,18 +610,18 @@ fi %postun syndic # %%systemd_postun_with_restart salt-syndic.service -systemctl daemon-reload >/dev/null 2>&1 || : +/bin/systemctl daemon-reload >/dev/null 2>&1 || : if [ $1 -ge 1 ] ; then # Package upgrade, not uninstall - systemctl try-restart salt-syndic.service >/dev/null 2>&1 || : + /bin/systemctl try-restart salt-syndic.service >/dev/null 2>&1 || : fi %postun minion # %%systemd_postun_with_restart salt-minion.service -systemctl daemon-reload >/dev/null 2>&1 || : +/bin/systemctl daemon-reload >/dev/null 2>&1 || : if [ $1 -ge 1 ] ; then # Package upgrade, not uninstall - systemctl try-restart salt-minion.service >/dev/null 2>&1 || : + /bin/systemctl try-restart salt-minion.service >/dev/null 2>&1 || : fi if [ $1 -eq 0 ]; then if [ $(cat /etc/os-release | grep VERSION_ID | cut -d '=' -f 2 | sed 's/\"//g' | cut -d '.' -f 1) = "8" ]; then @@ -639,10 +639,10 @@ fi %postun api # %%systemd_postun_with_restart salt-api.service -systemctl daemon-reload >/dev/null 2>&1 || : +/bin/systemctl daemon-reload >/dev/null 2>&1 || : if [ $1 -ge 1 ] ; then # Package upgrade, not uninstall - systemctl try-restart salt-api.service >/dev/null 2>&1 || : + /bin/systemctl try-restart salt-api.service >/dev/null 2>&1 || : fi %changelog From 93dadb211608a52ea52f1fe209a0879bb0cde212 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Tue, 26 Mar 2024 15:53:58 -0600 Subject: [PATCH 16/32] Ensure symbolic links are created before using systemctl --- pkg/rpm/salt.spec | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/pkg/rpm/salt.spec b/pkg/rpm/salt.spec index 53f739f2481..df5730116d5 100644 --- a/pkg/rpm/salt.spec +++ b/pkg/rpm/salt.spec @@ -176,7 +176,7 @@ cd $RPM_BUILD_DIR # Fix any hardcoded paths to the relenv python binary on any of the scripts installed in # the /bin directory - find $RPM_BUILD_DIR/build/salt/bin/ -type f -exec sed -i 's:#!/\(.*\)salt/bin/python3:#!/bin/sh -x\n"exec" "$(dirname $(readlink -f $0))/python3" "$0" "$@":g' {} \; + find $RPM_BUILD_DIR/build/salt/bin/ -type f -exec sed -i 's:#!/\(.*\)salt/bin/python3:#!/bin/sh\n"exec" "$(dirname $(readlink -f $0))/python3" "$0" "$@":g' {} \; $RPM_BUILD_DIR/build/venv/bin/tools pkg build salt-onedir . --package-name $RPM_BUILD_DIR/build/salt --platform linux $RPM_BUILD_DIR/build/venv/bin/tools pkg pre-archive-cleanup --pkg $RPM_BUILD_DIR/build/salt @@ -472,14 +472,6 @@ ln -s -f /opt/saltstack/salt/salt-cloud %{_bindir}/salt-cloud %post master -# %%systemd_post salt-master.service -if [ $1 -gt 1 ] ; then - # Upgrade - /bin/systemctl try-restart salt-master.service >/dev/null 2>&1 || : -else - # Initial installation - /bin/systemctl preset salt-master.service >/dev/null 2>&1 || : -fi ln -s -f /opt/saltstack/salt/salt %{_bindir}/salt ln -s -f /opt/saltstack/salt/salt-cp %{_bindir}/salt-cp ln -s -f /opt/saltstack/salt/salt-key %{_bindir}/salt-key @@ -498,8 +490,17 @@ if [ $1 -lt 2 ]; then fi fi fi +# %%systemd_post salt-master.service +if [ $1 -gt 1 ] ; then + # Upgrade + /bin/systemctl try-restart salt-master.service >/dev/null 2>&1 || : +else + # Initial installation + /bin/systemctl preset salt-master.service >/dev/null 2>&1 || : +fi %post syndic +ln -s -f /opt/saltstack/salt/salt-syndic %{_bindir}/salt-syndic # %%systemd_post salt-syndic.service if [ $1 -gt 1 ] ; then # Upgrade @@ -508,17 +509,8 @@ else # Initial installation /bin/systemctl preset salt-syndic.service >/dev/null 2>&1 || : fi -ln -s -f /opt/saltstack/salt/salt-syndic %{_bindir}/salt-syndic %post minion -# %%systemd_post salt-minion.service -if [ $1 -gt 1 ] ; then - # Upgrade - /bin/systemctl try-restart salt-minion.service >/dev/null 2>&1 || : -else - # Initial installation - /bin/systemctl preset salt-minion.service >/dev/null 2>&1 || : -fi ln -s -f /opt/saltstack/salt/salt-minion %{_bindir}/salt-minion ln -s -f /opt/saltstack/salt/salt-call %{_bindir}/salt-call ln -s -f /opt/saltstack/salt/salt-proxy %{_bindir}/salt-proxy @@ -535,11 +527,20 @@ if [ $1 -lt 2 ]; then fi fi fi +# %%systemd_post salt-minion.service +if [ $1 -gt 1 ] ; then + # Upgrade + /bin/systemctl try-restart salt-minion.service >/dev/null 2>&1 || : +else + # Initial installation + /bin/systemctl preset salt-minion.service >/dev/null 2>&1 || : +fi %post ssh ln -s -f /opt/saltstack/salt/salt-ssh %{_bindir}/salt-ssh %post api +ln -s -f /opt/saltstack/salt/salt-api %{_bindir}/salt-api # %%systemd_post salt-api.service if [ $1 -gt 1 ] ; then # Upgrade @@ -548,7 +549,6 @@ else # Initial installation /bin/systemctl preset salt-api.service >/dev/null 2>&1 || : fi -ln -s -f /opt/saltstack/salt/salt-api %{_bindir}/salt-api %posttrans cloud From 78625d8db7d09053ce12d46c23da410f80d0b912 Mon Sep 17 00:00:00 2001 From: David Murphy < dmurphy@saltstack.com> Date: Wed, 27 Mar 2024 10:36:41 -0600 Subject: [PATCH 17/32] Add leading slash to salt helper file paths as per dh_links requirement --- changelog/66280.fixed.md | 1 + pkg/debian/salt-master.links | 10 +++++----- 2 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 changelog/66280.fixed.md diff --git a/changelog/66280.fixed.md b/changelog/66280.fixed.md new file mode 100644 index 00000000000..dafd798295b --- /dev/null +++ b/changelog/66280.fixed.md @@ -0,0 +1 @@ +Add leading slash to salt helper file paths as per dh_links requirement diff --git a/pkg/debian/salt-master.links b/pkg/debian/salt-master.links index 6e593930462..e6c0ef2446a 100644 --- a/pkg/debian/salt-master.links +++ b/pkg/debian/salt-master.links @@ -1,6 +1,6 @@ opt/saltstack/salt/salt-master /usr/bin/salt-master -opt/saltstack/salt/salt usr/bin/salt -opt/saltstack/salt/salt-cp usr/bin/salt-cp -opt/saltstack/salt/salt-key usr/bin/salt-key -opt/saltstack/salt/salt-run usr/bin/salt-run -opt/saltstack/salt/spm usr/bin/spm +opt/saltstack/salt/salt /usr/bin/salt +opt/saltstack/salt/salt-cp /usr/bin/salt-cp +opt/saltstack/salt/salt-key /usr/bin/salt-key +opt/saltstack/salt/salt-run /usr/bin/salt-run +opt/saltstack/salt/spm /usr/bin/spm From 5c4e810836a3d1437fdaddef44c09580e9060f09 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 27 Mar 2024 14:20:50 +0000 Subject: [PATCH 18/32] Make jinja rendering strict. Undefined variable use throws error. --- .github/workflows/templates/build-packages.yml.jinja | 2 +- .github/workflows/templates/ci.yml.jinja | 2 ++ tools/precommit/workflows.py | 3 ++- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/templates/build-packages.yml.jinja b/.github/workflows/templates/build-packages.yml.jinja index 91adfb1c6e6..745bcc3c9ca 100644 --- a/.github/workflows/templates/build-packages.yml.jinja +++ b/.github/workflows/templates/build-packages.yml.jinja @@ -17,7 +17,7 @@ relenv-version: "<{ relenv_version }>" python-version: "<{ python_version }>" source: "<{ backend }>" - <%- if gh_environment %> + <%- if gh_environment != "ci" %> environment: <{ gh_environment }> sign-macos-packages: true sign-windows-packages: <% if gh_environment == 'nightly' -%> false <%- else -%> ${{ inputs.sign-windows-packages }} <%- endif %> diff --git a/.github/workflows/templates/ci.yml.jinja b/.github/workflows/templates/ci.yml.jinja index ec15f70ca74..0553e799c89 100644 --- a/.github/workflows/templates/ci.yml.jinja +++ b/.github/workflows/templates/ci.yml.jinja @@ -1,3 +1,5 @@ +<%- set gh_environment = gh_environment|default("ci") %> + <%- extends 'layout.yml.jinja' %> <%- set pre_commit_version = "3.0.4" %> diff --git a/tools/precommit/workflows.py b/tools/precommit/workflows.py index d08567dca9c..27219a90749 100644 --- a/tools/precommit/workflows.py +++ b/tools/precommit/workflows.py @@ -11,7 +11,7 @@ import shutil from typing import TYPE_CHECKING, cast import yaml -from jinja2 import Environment, FileSystemLoader +from jinja2 import Environment, FileSystemLoader, StrictUndefined from ptscripts import Context, command_group import tools.utils @@ -292,6 +292,7 @@ def generate_workflows(ctx: Context): "jinja2.ext.do", ], loader=FileSystemLoader(str(TEMPLATES)), + undefined=StrictUndefined, ) for workflow_name, details in workflows.items(): if TYPE_CHECKING: From b5568458504ad8cdd3047651db518230577433cf Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 26 Mar 2024 18:36:20 +0000 Subject: [PATCH 19/32] Bump to ``dorny/paths-filter@v3`` --- .github/workflows/ci.yml | 2 +- .github/workflows/nightly.yml | 2 +- .github/workflows/scheduled.yml | 2 +- .github/workflows/staging.yml | 2 +- .github/workflows/templates/layout.yml.jinja | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 98dd746b9d8..36a4c6f2222 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -59,7 +59,7 @@ jobs: - name: Get Changed Files if: ${{ github.event_name == 'pull_request'}} id: changed-files - uses: dorny/paths-filter@v2 + uses: dorny/paths-filter@v3 with: token: ${{ github.token }} list-files: json diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 8f611d84b08..5d540e60e67 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -103,7 +103,7 @@ jobs: - name: Get Changed Files if: ${{ github.event_name == 'pull_request'}} id: changed-files - uses: dorny/paths-filter@v2 + uses: dorny/paths-filter@v3 with: token: ${{ github.token }} list-files: json diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 35d595505d6..3369ff77ae1 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -93,7 +93,7 @@ jobs: - name: Get Changed Files if: ${{ github.event_name == 'pull_request'}} id: changed-files - uses: dorny/paths-filter@v2 + uses: dorny/paths-filter@v3 with: token: ${{ github.token }} list-files: json diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index de37f95809f..a48504995b7 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -89,7 +89,7 @@ jobs: - name: Get Changed Files if: ${{ github.event_name == 'pull_request'}} id: changed-files - uses: dorny/paths-filter@v2 + uses: dorny/paths-filter@v3 with: token: ${{ github.token }} list-files: json diff --git a/.github/workflows/templates/layout.yml.jinja b/.github/workflows/templates/layout.yml.jinja index fba66a9dc1a..9d65b40d60c 100644 --- a/.github/workflows/templates/layout.yml.jinja +++ b/.github/workflows/templates/layout.yml.jinja @@ -107,7 +107,7 @@ jobs: - name: Get Changed Files if: ${{ github.event_name == 'pull_request'}} id: changed-files - uses: dorny/paths-filter@v2 + uses: dorny/paths-filter@v3 with: token: ${{ github.token }} list-files: json From 62f13b32ecaf45edcb575c5a62f0e3c5f336b9b9 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 27 Mar 2024 08:28:37 +0000 Subject: [PATCH 20/32] Just "grep" what we're after Signed-off-by: Pedro Algarvio --- pkg/windows/build.ps1 | 6 ++---- pkg/windows/build_python.ps1 | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/pkg/windows/build.ps1 b/pkg/windows/build.ps1 index ecd18832786..72e29fc1d13 100644 --- a/pkg/windows/build.ps1 +++ b/pkg/windows/build.ps1 @@ -107,10 +107,8 @@ if ( [String]::IsNullOrEmpty($Version) ) { $yaml = Get-Content -Path "$PROJECT_DIR\cicd\shared-gh-workflows-context.yml" $dict_versions = @{} -$yaml | ForEach-Object { - $val1, $val2 = $_ -split ": " - $dict_versions[$val1] = $val2.Trim("""") -} +$dict_versions["python_version"]=($yaml | Select-String -Pattern "python_version: (.*)").matches.groups[1].Value.Trim("""") +$dict_versions["relenv_version"]=($yaml | Select-String -Pattern "relenv_version: (.*)").matches.groups[1].Value.Trim("""") if ( [String]::IsNullOrEmpty($PythonVersion) ) { $PythonVersion = $dict_versions["python_version"] diff --git a/pkg/windows/build_python.ps1 b/pkg/windows/build_python.ps1 index 28aee58fbd2..9257ae79456 100644 --- a/pkg/windows/build_python.ps1 +++ b/pkg/windows/build_python.ps1 @@ -77,10 +77,8 @@ function Write-Result($result, $ForegroundColor="Green") { $yaml = Get-Content -Path "$PROJECT_DIR\cicd\shared-gh-workflows-context.yml" $dict_versions = @{} -$yaml | ForEach-Object { - $val1, $val2 = $_ -split ": " - $dict_versions[$val1] = $val2.Trim("""") -} +$dict_versions["python_version"]=($yaml | Select-String -Pattern "python_version: (.*)").matches.groups[1].Value.Trim("""") +$dict_versions["relenv_version"]=($yaml | Select-String -Pattern "relenv_version: (.*)").matches.groups[1].Value.Trim("""") if ( [String]::IsNullOrEmpty($Version) ) { $Version = $dict_versions["python_version"] From 0d27cf6c1f089313c279d7e049ef682462200685 Mon Sep 17 00:00:00 2001 From: ScriptAutomate Date: Mon, 25 Mar 2024 12:37:32 -0500 Subject: [PATCH 21/32] Reduce test range in PRs and branch merges --- .github/workflows/ci.yml | 1133 ---------------------------------- tools/precommit/workflows.py | 39 +- 2 files changed, 33 insertions(+), 1139 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 36a4c6f2222..6804a525f66 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -488,48 +488,6 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" - almalinux-8-pkg-tests: - name: Alma Linux 8 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: almalinux-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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - almalinux-8-arm64-pkg-tests: - name: Alma Linux 8 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: almalinux-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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - almalinux-9-pkg-tests: name: Alma Linux 9 Package Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -551,90 +509,6 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - almalinux-9-arm64-pkg-tests: - name: Alma 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: almalinux-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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} @@ -656,283 +530,6 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - centos-7-pkg-tests: - name: CentOS 7 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: centos-7 - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - - debian-10-pkg-tests: - name: Debian 10 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-10 - 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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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: - 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.13 - 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'] }} - 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.13 - 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: - 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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} @@ -954,27 +551,6 @@ jobs: 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 - 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.13 - 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'] }} @@ -996,111 +572,6 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - macos-13-xlarge-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-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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} - 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.13 - 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'] }} @@ -1143,48 +614,6 @@ jobs: 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'] }} - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - windows-2022: name: Windows 2022 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1206,27 +635,6 @@ jobs: workflow-slug: ci default-timeout: 180 - 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 - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - macos-13: name: macOS 13 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} @@ -1248,69 +656,6 @@ jobs: workflow-slug: ci default-timeout: 180 - macos-13-xlarge: - 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-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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - almalinux-8: - name: Alma 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: almalinux-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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - almalinux-8-arm64: - name: Alma 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: almalinux-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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - almalinux-9: name: Alma Linux 9 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -1332,90 +677,6 @@ jobs: workflow-slug: ci default-timeout: 180 - almalinux-9-arm64: - name: Alma 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: almalinux-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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - 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'] }} @@ -1458,325 +719,6 @@ jobs: workflow-slug: ci default-timeout: 180 - centos-7: - name: CentOS 7 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: centos-7 - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - debian-10: - name: Debian 10 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-10 - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - fedora-39: - name: Fedora 39 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-39 - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - fips: true - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - fips: true - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - - 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.13 - skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} - workflow-slug: ci - default-timeout: 180 - 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'] }} @@ -1805,36 +747,11 @@ jobs: needs: - prepare-workflow - build-ci-deps - - windows-2016 - - windows-2019 - windows-2022 - - macos-12 - macos-13 - - macos-13-xlarge - - almalinux-8 - - almalinux-8-arm64 - almalinux-9 - - almalinux-9-arm64 - - amazonlinux-2 - - amazonlinux-2-arm64 - - amazonlinux-2023 - amazonlinux-2023-arm64 - archlinux-lts - - centos-7 - - debian-10 - - debian-11 - - debian-11-arm64 - - debian-12 - - debian-12-arm64 - - fedora-39 - - opensuse-15 - - photonos-4 - - photonos-4-arm64 - - photonos-5 - - photonos-5-arm64 - - ubuntu-2004 - - ubuntu-2004-arm64 - - ubuntu-2204 - ubuntu-2204-arm64 steps: - uses: actions/checkout@v4 @@ -1959,66 +876,16 @@ jobs: - build-pkgs-src - combine-all-code-coverage - build-ci-deps - - windows-2016 - - windows-2019 - windows-2022 - - macos-12 - macos-13 - - macos-13-xlarge - - almalinux-8 - - almalinux-8-arm64 - almalinux-9 - - almalinux-9-arm64 - - amazonlinux-2 - - amazonlinux-2-arm64 - - amazonlinux-2023 - amazonlinux-2023-arm64 - archlinux-lts - - centos-7 - - debian-10 - - debian-11 - - debian-11-arm64 - - debian-12 - - debian-12-arm64 - - fedora-39 - - opensuse-15 - - photonos-4 - - photonos-4-arm64 - - photonos-5 - - photonos-5-arm64 - - ubuntu-2004 - - ubuntu-2004-arm64 - - ubuntu-2204 - ubuntu-2204-arm64 - - almalinux-8-pkg-tests - - almalinux-8-arm64-pkg-tests - almalinux-9-pkg-tests - - almalinux-9-arm64-pkg-tests - - amazonlinux-2-pkg-tests - - amazonlinux-2-arm64-pkg-tests - - amazonlinux-2023-pkg-tests - amazonlinux-2023-arm64-pkg-tests - - centos-7-pkg-tests - - debian-10-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-5-pkg-tests - - photonos-5-arm64-pkg-tests - - ubuntu-2004-pkg-tests - - ubuntu-2004-arm64-pkg-tests - - ubuntu-2204-pkg-tests - ubuntu-2204-arm64-pkg-tests - - macos-12-pkg-tests - macos-13-pkg-tests - - macos-13-xlarge-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 steps: diff --git a/tools/precommit/workflows.py b/tools/precommit/workflows.py index 27219a90749..40490229f4b 100644 --- a/tools/precommit/workflows.py +++ b/tools/precommit/workflows.py @@ -305,12 +305,11 @@ def generate_workflows(ctx: Context): f"Generating '{workflow_path.relative_to(tools.utils.REPO_ROOT)}' from " f"template '{template_path.relative_to(tools.utils.REPO_ROOT)}' ..." ) + workflow_slug = details.get("slug") or workflow_name.lower().replace(" ", "-") context = { "template": template_path.relative_to(tools.utils.REPO_ROOT), "workflow_name": workflow_name, - "workflow_slug": ( - details.get("slug") or workflow_name.lower().replace(" ", "-") - ), + "workflow_slug": workflow_slug, "includes": includes, "conclusion_needs": NeedsTracker(), "test_salt_needs": NeedsTracker(), @@ -318,10 +317,16 @@ def generate_workflows(ctx: Context): "test_repo_needs": NeedsTracker(), "prepare_workflow_needs": NeedsTracker(), "build_repo_needs": NeedsTracker(), - "test_salt_listing": test_salt_listing, - "test_salt_pkg_listing": test_salt_pkg_listing, + "test_salt_listing": _filter_jobs_by_workflow( + workflow_slug, test_salt_listing + ), + "test_salt_pkg_listing": _filter_jobs_by_workflow( + workflow_slug, test_salt_pkg_listing + ), "build_ci_deps_listing": build_ci_deps_listing, - "test_salt_pkg_downloads_listing": test_salt_pkg_downloads_listing, + "test_salt_pkg_downloads_listing": _filter_jobs_by_workflow( + workflow_slug, test_salt_pkg_downloads_listing + ), "test_salt_pkg_downloads_needs_slugs": sorted( test_salt_pkg_downloads_needs_slugs ), @@ -339,6 +344,28 @@ def generate_workflows(ctx: Context): workflow_path.write_text(rendered_template.rstrip() + "\n") +def _filter_jobs_by_workflow( + workflow_slug: str, jobs: dict +) -> dict[str, list[tuple[str, str, str]]]: + short_worflow_os = ( + "almalinux-9", + "amazonlinux-2023-arm64", + "ubuntu-22.04-arm64", + "windows-2022", + "macos-13", + "archlinux-lts", + ) + if workflow_slug != "ci": + return jobs + + selected: dict[str, list[tuple[str, str, str]]] = {} + for platform in jobs: + for entry in jobs[platform]: + if entry[0] in short_worflow_os: + selected.setdefault(platform, []).append(entry) + return selected + + @cgroup.command( name="actionlint", arguments={ From fb58df01f4b1fd5d224c6e5ef7aa127d06bcd12c Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 26 Mar 2024 08:55:37 +0000 Subject: [PATCH 22/32] Allow choosing which OS to run tests against using labels --- .github/workflows/ci.yml | 1136 ++++++++++++++++- .github/workflows/nightly.yml | 3 +- .github/workflows/scheduled.yml | 3 +- .github/workflows/staging.yml | 3 +- .github/workflows/templates/layout.yml.jinja | 3 +- .../templates/test-salt-pkg.yml.jinja | 12 + .../workflows/templates/test-salt.yml.jinja | 12 + tools/ci.py | 10 +- tools/precommit/workflows.py | 42 +- 9 files changed, 1186 insertions(+), 38 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6804a525f66..35ba2f32933 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -43,7 +43,8 @@ jobs: jobs: ${{ steps.define-jobs.outputs.jobs }} runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - pull-labels: ${{ steps.get-pull-labels.outputs.labels }} + 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 }} @@ -488,6 +489,48 @@ jobs: cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.13 nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}" + almalinux-8-pkg-tests: + name: Alma Linux 8 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-8", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-pkgs-onedir + - build-ci-deps + uses: ./.github/workflows/test-packages-action-linux.yml + with: + distro-slug: almalinux-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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + + almalinux-8-arm64-pkg-tests: + name: Alma Linux 8 Arm64 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-8-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-pkgs-onedir + - build-ci-deps + uses: ./.github/workflows/test-packages-action-linux.yml + with: + distro-slug: almalinux-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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + almalinux-9-pkg-tests: name: Alma Linux 9 Package Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -509,6 +552,90 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + almalinux-9-arm64-pkg-tests: + name: Alma Linux 9 Arm64 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-9-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-pkgs-onedir + - build-ci-deps + uses: ./.github/workflows/test-packages-action-linux.yml + with: + distro-slug: almalinux-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.13 + 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('["amazonlinux-2", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["amazonlinux-2-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["amazonlinux-2023", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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'] }} @@ -530,6 +657,283 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + centos-7-pkg-tests: + name: CentOS 7 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["centos-7", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-pkgs-onedir + - build-ci-deps + uses: ./.github/workflows/test-packages-action-linux.yml + with: + distro-slug: centos-7 + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + + debian-10-pkg-tests: + name: Debian 10 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["debian-10", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-pkgs-onedir + - build-ci-deps + uses: ./.github/workflows/test-packages-action-linux.yml + with: + distro-slug: debian-10 + 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.13 + 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('["debian-11", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["debian-11-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["debian-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["debian-12-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["photonos-4", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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: + 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('["photonos-4-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["photonos-5", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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: + name: Photon OS 5 Arm64 Package Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["photonos-5-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["ubuntu-20.04", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["ubuntu-20.04-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["ubuntu-22.04", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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'] }} @@ -551,6 +955,27 @@ jobs: 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'] && contains(fromJSON('["macos-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-pkgs-onedir + - build-ci-deps + uses: ./.github/workflows/test-packages-action-macos.yml + with: + distro-slug: 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.13 + 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'] }} @@ -572,6 +997,111 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} + macos-13-xlarge-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('["macos-13-xlarge", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-pkgs-onedir + - build-ci-deps + uses: ./.github/workflows/test-packages-action-macos.yml + with: + distro-slug: 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.13 + 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('["windows-2016", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["windows-2016", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["windows-2019", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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('["windows-2019", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + 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'] }} @@ -614,6 +1144,48 @@ jobs: 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('["windows-2016", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + windows-2019: + name: Windows 2019 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["windows-2019", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + windows-2022: name: Windows 2022 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -635,6 +1207,27 @@ jobs: workflow-slug: ci default-timeout: 180 + macos-12: + name: macOS 12 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-ci-deps + uses: ./.github/workflows/test-action-macos.yml + with: + distro-slug: 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + macos-13: name: macOS 13 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} @@ -656,6 +1249,69 @@ jobs: workflow-slug: ci default-timeout: 180 + macos-13-xlarge: + name: macOS 13 Arm64 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13-xlarge", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-ci-deps + uses: ./.github/workflows/test-action-macos.yml + with: + distro-slug: 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + almalinux-8: + name: Alma Linux 8 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-8", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-ci-deps + uses: ./.github/workflows/test-action-linux.yml + with: + distro-slug: almalinux-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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + almalinux-8-arm64: + name: Alma Linux 8 Arm64 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-8-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-ci-deps + uses: ./.github/workflows/test-action-linux.yml + with: + distro-slug: almalinux-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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + almalinux-9: name: Alma Linux 9 Test if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} @@ -677,6 +1333,90 @@ jobs: workflow-slug: ci default-timeout: 180 + almalinux-9-arm64: + name: Alma Linux 9 Arm64 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-9-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-ci-deps + uses: ./.github/workflows/test-action-linux.yml + with: + distro-slug: almalinux-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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + 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('["amazonlinux-2", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + 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('["amazonlinux-2-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + 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('["amazonlinux-2023", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + 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'] }} @@ -719,6 +1459,325 @@ jobs: workflow-slug: ci default-timeout: 180 + centos-7: + name: CentOS 7 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["centos-7", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-ci-deps + uses: ./.github/workflows/test-action-linux.yml + with: + distro-slug: centos-7 + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + debian-10: + name: Debian 10 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["debian-10", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-ci-deps + uses: ./.github/workflows/test-action-linux.yml + with: + distro-slug: debian-10 + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + debian-11: + name: Debian 11 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["debian-11", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + 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('["debian-11-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + debian-12: + name: Debian 12 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["debian-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + 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('["debian-12-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + fedora-39: + name: Fedora 39 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["fedora-39", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + needs: + - prepare-workflow + - build-ci-deps + uses: ./.github/workflows/test-action-linux.yml + with: + distro-slug: fedora-39 + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + opensuse-15: + name: Opensuse 15 Test + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["opensuse-15", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + 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('["photonos-4", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + fips: true + + 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('["photonos-4-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + 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('["photonos-5", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + fips: true + + 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'] && contains(fromJSON('["photonos-5-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + 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('["ubuntu-20.04", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + 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('["ubuntu-20.04-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + + 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('["ubuntu-22.04", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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.13 + skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} + workflow-slug: ci + default-timeout: 180 + 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'] }} @@ -747,11 +1806,36 @@ jobs: needs: - prepare-workflow - build-ci-deps + - windows-2016 + - windows-2019 - windows-2022 + - macos-12 - macos-13 + - macos-13-xlarge + - almalinux-8 + - almalinux-8-arm64 - almalinux-9 + - almalinux-9-arm64 + - amazonlinux-2 + - amazonlinux-2-arm64 + - amazonlinux-2023 - amazonlinux-2023-arm64 - archlinux-lts + - centos-7 + - debian-10 + - debian-11 + - debian-11-arm64 + - debian-12 + - debian-12-arm64 + - fedora-39 + - opensuse-15 + - photonos-4 + - photonos-4-arm64 + - photonos-5 + - photonos-5-arm64 + - ubuntu-2004 + - ubuntu-2004-arm64 + - ubuntu-2204 - ubuntu-2204-arm64 steps: - uses: actions/checkout@v4 @@ -876,16 +1960,66 @@ jobs: - build-pkgs-src - combine-all-code-coverage - build-ci-deps + - windows-2016 + - windows-2019 - windows-2022 + - macos-12 - macos-13 + - macos-13-xlarge + - almalinux-8 + - almalinux-8-arm64 - almalinux-9 + - almalinux-9-arm64 + - amazonlinux-2 + - amazonlinux-2-arm64 + - amazonlinux-2023 - amazonlinux-2023-arm64 - archlinux-lts + - centos-7 + - debian-10 + - debian-11 + - debian-11-arm64 + - debian-12 + - debian-12-arm64 + - fedora-39 + - opensuse-15 + - photonos-4 + - photonos-4-arm64 + - photonos-5 + - photonos-5-arm64 + - ubuntu-2004 + - ubuntu-2004-arm64 + - ubuntu-2204 - ubuntu-2204-arm64 + - almalinux-8-pkg-tests + - almalinux-8-arm64-pkg-tests - almalinux-9-pkg-tests + - almalinux-9-arm64-pkg-tests + - amazonlinux-2-pkg-tests + - amazonlinux-2-arm64-pkg-tests + - amazonlinux-2023-pkg-tests - amazonlinux-2023-arm64-pkg-tests + - centos-7-pkg-tests + - debian-10-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-5-pkg-tests + - photonos-5-arm64-pkg-tests + - ubuntu-2004-pkg-tests + - ubuntu-2004-arm64-pkg-tests + - ubuntu-2204-pkg-tests - ubuntu-2204-arm64-pkg-tests + - macos-12-pkg-tests - macos-13-pkg-tests + - macos-13-xlarge-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 steps: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 5d540e60e67..95c0332458e 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -87,7 +87,8 @@ jobs: jobs: ${{ steps.define-jobs.outputs.jobs }} runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - pull-labels: ${{ steps.get-pull-labels.outputs.labels }} + 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 }} diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 3369ff77ae1..c1108976d7b 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -77,7 +77,8 @@ jobs: jobs: ${{ steps.define-jobs.outputs.jobs }} runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - pull-labels: ${{ steps.get-pull-labels.outputs.labels }} + 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 }} diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index a48504995b7..0961f55aa8c 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -73,7 +73,8 @@ jobs: jobs: ${{ steps.define-jobs.outputs.jobs }} runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - pull-labels: ${{ steps.get-pull-labels.outputs.labels }} + 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 }} diff --git a/.github/workflows/templates/layout.yml.jinja b/.github/workflows/templates/layout.yml.jinja index 9d65b40d60c..211828c4386 100644 --- a/.github/workflows/templates/layout.yml.jinja +++ b/.github/workflows/templates/layout.yml.jinja @@ -91,7 +91,8 @@ jobs: jobs: ${{ steps.define-jobs.outputs.jobs }} runners: ${{ steps.runner-types.outputs.runners }} changed-files: ${{ steps.process-changed-files.outputs.changed-files }} - pull-labels: ${{ steps.get-pull-labels.outputs.labels }} + 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 }} diff --git a/.github/workflows/templates/test-salt-pkg.yml.jinja b/.github/workflows/templates/test-salt-pkg.yml.jinja index be07a1e6bca..7c37e539d75 100644 --- a/.github/workflows/templates/test-salt-pkg.yml.jinja +++ b/.github/workflows/templates/test-salt-pkg.yml.jinja @@ -4,7 +4,11 @@ <{ job_name }>: <%- do test_salt_pkg_needs.append(job_name) %> name: <{ display_name }> Package Test + <%- if workflow_slug != "ci" or slug in mandatory_os %> 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + <%- endif %> needs: - prepare-workflow - build-pkgs-onedir @@ -36,7 +40,11 @@ <{ job_name }>: <%- do test_salt_pkg_needs.append(job_name) %> name: <{ display_name }> Package Test + <%- if workflow_slug != "ci" or slug in mandatory_os %> 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + <%- endif %> needs: - prepare-workflow - build-pkgs-onedir @@ -65,7 +73,11 @@ <{ job_name }>: <%- do test_salt_pkg_needs.append(job_name) %> name: <{ display_name }> <{ pkg_type }> Package Test + <%- if workflow_slug != "ci" or slug in mandatory_os %> 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + <%- endif %> needs: - prepare-workflow - build-pkgs-onedir diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index e35e363156a..349438c362a 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -9,7 +9,11 @@ <{ slug.replace(".", "") }>: <%- do test_salt_needs.append(slug.replace(".", "")) %> name: <{ display_name }> Test + <%- if workflow_slug != "ci" or slug in mandatory_os %> 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + <%- endif %> needs: - prepare-workflow - build-ci-deps @@ -36,7 +40,11 @@ <{ slug.replace(".", "") }>: <%- do test_salt_needs.append(slug.replace(".", "")) %> name: <{ display_name }> Test + <%- if workflow_slug != "ci" or slug in mandatory_os %> 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + <%- endif %> needs: - prepare-workflow - build-ci-deps @@ -62,7 +70,11 @@ <{ slug.replace(".", "") }>: <%- do test_salt_needs.append(slug.replace(".", "")) %> name: <{ display_name }> Test + <%- if workflow_slug != "ci" or slug in mandatory_os %> 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + <%- endif %> needs: - prepare-workflow - build-ci-deps diff --git a/tools/ci.py b/tools/ci.py index 192cfee48f1..491df8019ed 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -949,10 +949,15 @@ def get_pr_test_labels( pr = gh_event["pull_request"]["number"] labels = _get_pr_test_labels_from_event_payload(gh_event) + os_labels = [] + test_labels = [] if labels: ctx.info(f"Test labels for pull-request #{pr} on {repository}:") - for name, description in labels: + for name, description in sorted(labels): ctx.info(f" * [yellow]{name}[/yellow]: {description}") + test_labels.append(name) + if name.startswith("test:os:"): + os_labels.append(name.split("test:os:", 1)[-1]) else: ctx.info(f"No test labels for pull-request #{pr} on {repository}") @@ -965,7 +970,8 @@ def get_pr_test_labels( ctx.info("Writing 'labels' to the github outputs file") with open(github_output, "a", encoding="utf-8") as wfh: - wfh.write(f"labels={json.dumps([label[0] for label in labels])}\n") + wfh.write(f"os-labels={json.dumps([label for label in os_labels])}\n") + wfh.write(f"test-labels={json.dumps([label for label in test_labels])}\n") ctx.exit(0) diff --git a/tools/precommit/workflows.py b/tools/precommit/workflows.py index 40490229f4b..e2748a06512 100644 --- a/tools/precommit/workflows.py +++ b/tools/precommit/workflows.py @@ -317,21 +317,23 @@ def generate_workflows(ctx: Context): "test_repo_needs": NeedsTracker(), "prepare_workflow_needs": NeedsTracker(), "build_repo_needs": NeedsTracker(), - "test_salt_listing": _filter_jobs_by_workflow( - workflow_slug, test_salt_listing - ), - "test_salt_pkg_listing": _filter_jobs_by_workflow( - workflow_slug, test_salt_pkg_listing - ), + "test_salt_listing": test_salt_listing, + "test_salt_pkg_listing": test_salt_pkg_listing, "build_ci_deps_listing": build_ci_deps_listing, - "test_salt_pkg_downloads_listing": _filter_jobs_by_workflow( - workflow_slug, test_salt_pkg_downloads_listing - ), + "test_salt_pkg_downloads_listing": test_salt_pkg_downloads_listing, "test_salt_pkg_downloads_needs_slugs": sorted( test_salt_pkg_downloads_needs_slugs ), "build_rpms_listing": build_rpms_listing, "build_debs_listing": build_debs_listing, + "mandatory_os": ( + "almalinux-9", + "amazonlinux-2023-arm64", + "archlinux-lts", + "macos-13", + "ubuntu-22.04-arm64", + "windows-2022", + ), } shared_context_file = ( tools.utils.REPO_ROOT / "cicd" / "shared-gh-workflows-context.yml" @@ -344,28 +346,6 @@ def generate_workflows(ctx: Context): workflow_path.write_text(rendered_template.rstrip() + "\n") -def _filter_jobs_by_workflow( - workflow_slug: str, jobs: dict -) -> dict[str, list[tuple[str, str, str]]]: - short_worflow_os = ( - "almalinux-9", - "amazonlinux-2023-arm64", - "ubuntu-22.04-arm64", - "windows-2022", - "macos-13", - "archlinux-lts", - ) - if workflow_slug != "ci": - return jobs - - selected: dict[str, list[tuple[str, str, str]]] = {} - for platform in jobs: - for entry in jobs[platform]: - if entry[0] in short_worflow_os: - selected.setdefault(platform, []).append(entry) - return selected - - @cgroup.command( name="actionlint", arguments={ From 6592ccba523f71b3d5618bb604520fb46872db33 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 27 Mar 2024 14:21:56 +0000 Subject: [PATCH 23/32] Create `get_cicd_shared_context()` and `get_golden_images()` --- tools/pkg/build.py | 20 ++++++-------------- tools/precommit/workflows.py | 17 ++++------------- tools/testsuite/__init__.py | 8 +------- tools/testsuite/download.py | 8 +------- tools/utils/__init__.py | 29 ++++++++++++++++++++++------- tools/vm.py | 9 +++------ 6 files changed, 37 insertions(+), 54 deletions(-) diff --git a/tools/pkg/build.py b/tools/pkg/build.py index b6b18ba09a6..75173ac4898 100644 --- a/tools/pkg/build.py +++ b/tools/pkg/build.py @@ -14,7 +14,6 @@ import tarfile import zipfile from typing import TYPE_CHECKING -import yaml from ptscripts import Context, command_group import tools.utils @@ -30,13 +29,6 @@ build = command_group( ) -def _get_shared_constants(): - shared_constants = ( - tools.utils.REPO_ROOT / "cicd" / "shared-gh-workflows-context.yml" - ) - return yaml.safe_load(shared_constants.read_text()) - - @build.command( name="deb", arguments={ @@ -80,7 +72,7 @@ def debian( ) ctx.exit(1) ctx.info("Building the package from the source files") - shared_constants = _get_shared_constants() + shared_constants = tools.utils.get_cicd_shared_context() if not python_version: python_version = shared_constants["python_version"] if not relenv_version: @@ -152,7 +144,7 @@ def rpm( ) ctx.exit(1) ctx.info("Building the package from the source files") - shared_constants = _get_shared_constants() + shared_constants = tools.utils.get_cicd_shared_context() if not python_version: python_version = shared_constants["python_version"] if not relenv_version: @@ -237,7 +229,7 @@ def macos( if not onedir: # Prep the salt onedir if not building from an existing one - shared_constants = _get_shared_constants() + shared_constants = tools.utils.get_cicd_shared_context() if not python_version: python_version = shared_constants["python_version"] if not relenv_version: @@ -326,7 +318,7 @@ def windows( assert salt_version is not None assert arch is not None - shared_constants = _get_shared_constants() + shared_constants = tools.utils.get_cicd_shared_context() if not python_version: python_version = shared_constants["python_version"] if not relenv_version: @@ -493,7 +485,7 @@ def onedir_dependencies( if platform != "macos" and arch == "arm64": arch = "aarch64" - shared_constants = _get_shared_constants() + shared_constants = tools.utils.get_cicd_shared_context() if not python_version: python_version = shared_constants["python_version"] if not relenv_version: @@ -632,7 +624,7 @@ def salt_onedir( if platform == "darwin": platform = "macos" - shared_constants = _get_shared_constants() + shared_constants = tools.utils.get_cicd_shared_context() if not relenv_version: relenv_version = shared_constants["relenv_version"] if TYPE_CHECKING: diff --git a/tools/precommit/workflows.py b/tools/precommit/workflows.py index e2748a06512..27bbac95ca5 100644 --- a/tools/precommit/workflows.py +++ b/tools/precommit/workflows.py @@ -5,12 +5,10 @@ These commands are used for our GitHub Actions workflows. # pylint: disable=resource-leakage,broad-except,3rd-party-module-not-gated from __future__ import annotations -import json import logging import shutil from typing import TYPE_CHECKING, cast -import yaml from jinja2 import Environment, FileSystemLoader, StrictUndefined from ptscripts import Context, command_group @@ -20,10 +18,6 @@ log = logging.getLogger(__name__) WORKFLOWS = tools.utils.REPO_ROOT / ".github" / "workflows" TEMPLATES = WORKFLOWS / "templates" -with tools.utils.REPO_ROOT.joinpath("cicd", "golden-images.json").open( - "r", encoding="utf-8" -) as rfh: - AMIS = json.load(rfh) # Define the command group @@ -216,7 +210,7 @@ def generate_workflows(ctx: Context): "opensuse-15", "windows", ) - for slug in sorted(AMIS): + for slug in sorted(tools.utils.get_golden_images()): if slug.startswith(linux_skip_pkg_download_tests): continue if "arm64" in slug: @@ -251,7 +245,7 @@ def generate_workflows(ctx: Context): "photon": [], "redhat": [], } - for slug in sorted(AMIS): + for slug in sorted(tools.utils.get_golden_images()): if slug.endswith("-arm64"): continue if not slug.startswith( @@ -274,7 +268,7 @@ def generate_workflows(ctx: Context): build_rpms_listing.append((distro, release, arch)) build_debs_listing = [] - for slug in sorted(AMIS): + for slug in sorted(tools.utils.get_golden_images()): if not slug.startswith(("debian-", "ubuntu-")): continue if slug.endswith("-arm64"): @@ -335,10 +329,7 @@ def generate_workflows(ctx: Context): "windows-2022", ), } - shared_context_file = ( - tools.utils.REPO_ROOT / "cicd" / "shared-gh-workflows-context.yml" - ) - shared_context = yaml.safe_load(shared_context_file.read_text()) + shared_context = tools.utils.get_cicd_shared_context() for key, value in shared_context.items(): context[key] = value loaded_template = env.get_template(template_path.name) diff --git a/tools/testsuite/__init__.py b/tools/testsuite/__init__.py index 27ebe572465..f8928f68931 100644 --- a/tools/testsuite/__init__.py +++ b/tools/testsuite/__init__.py @@ -5,7 +5,6 @@ These commands are related to the test suite. # pylint: disable=resource-leakage,broad-except,3rd-party-module-not-gated from __future__ import annotations -import json import logging from typing import TYPE_CHECKING @@ -15,11 +14,6 @@ import tools.utils import tools.utils.gh from tools.utils import ExitCode -with tools.utils.REPO_ROOT.joinpath("cicd", "golden-images.json").open( - "r", encoding="utf-8" -) as rfh: - OS_SLUGS = sorted(json.load(rfh)) - log = logging.getLogger(__name__) # Define the command group @@ -57,7 +51,7 @@ ts = command_group(name="ts", help="Test Suite Related Commands", description=__ "slug": { "help": "The OS slug", "required": True, - "choices": OS_SLUGS, + "choices": sorted(tools.utils.get_golden_images()), }, "pkg": { "help": "Also download package test artifacts", diff --git a/tools/testsuite/download.py b/tools/testsuite/download.py index 8c5572b07e2..7626c5d10d0 100644 --- a/tools/testsuite/download.py +++ b/tools/testsuite/download.py @@ -5,7 +5,6 @@ These commands are related to downloading test suite CI artifacts. # pylint: disable=resource-leakage,broad-except,3rd-party-module-not-gated from __future__ import annotations -import json import logging import pathlib from typing import TYPE_CHECKING @@ -15,11 +14,6 @@ from ptscripts import Context, command_group import tools.utils import tools.utils.gh -with tools.utils.REPO_ROOT.joinpath("cicd", "golden-images.json").open( - "r", encoding="utf-8" -) as rfh: - OS_SLUGS = sorted(json.load(rfh)) - log = logging.getLogger(__name__) @@ -135,7 +129,7 @@ def download_nox_artifact( "slug": { "help": "The OS slug", "required": True, - "choices": OS_SLUGS, + "choices": sorted(tools.utils.get_golden_images()), }, "repository": { "help": "The repository to query, e.g. saltstack/salt", diff --git a/tools/utils/__init__.py b/tools/utils/__init__.py index 721b7670e17..3cac1a88876 100644 --- a/tools/utils/__init__.py +++ b/tools/utils/__init__.py @@ -1,22 +1,17 @@ # pylint: disable=resource-leakage,broad-except,3rd-party-module-not-gated,bad-whitespace from __future__ import annotations -import fnmatch import hashlib import json import os import pathlib import shutil import sys -import tempfile -import zipfile -from datetime import datetime from enum import IntEnum -from typing import Any +from functools import cache -import boto3 import packaging.version -from botocore.exceptions import ClientError +import yaml from ptscripts import Context from rich.progress import ( BarColumn, @@ -284,3 +279,23 @@ def get_platform_and_arch_from_slug(slug: str) -> tuple[str, str]: else: arch = "x86_64" return platform, arch + + +@cache +def get_cicd_shared_context(): + """ + Return the CI/CD shared context file contents. + """ + shared_context_file = REPO_ROOT / "cicd" / "shared-gh-workflows-context.yml" + return yaml.safe_load(shared_context_file.read_text()) + + +@cache +def get_golden_images(): + """ + Return the golden images information stored on file. + """ + with REPO_ROOT.joinpath("cicd", "golden-images.json").open( + "r", encoding="utf-8" + ) as rfh: + return json.load(rfh) diff --git a/tools/vm.py b/tools/vm.py index 85aed8e0afd..b320cd10e36 100644 --- a/tools/vm.py +++ b/tools/vm.py @@ -47,10 +47,6 @@ if TYPE_CHECKING: log = logging.getLogger(__name__) STATE_DIR = tools.utils.REPO_ROOT / ".vms-state" -with tools.utils.REPO_ROOT.joinpath("cicd", "golden-images.json").open( - "r", encoding="utf-8" -) as rfh: - AMIS = json.load(rfh) REPO_CHECKOUT_ID = hashlib.sha256( "|".join(list(platform.uname()) + [str(tools.utils.REPO_ROOT)]).encode() ).hexdigest() @@ -67,7 +63,7 @@ vm.add_argument("--region", help="The AWS region.", default=AWS_REGION) "name": { "help": "The VM Name", "metavar": "VM_NAME", - "choices": list(AMIS), + "choices": sorted(tools.utils.get_golden_images()), }, "key_name": { "help": "The SSH key name. Will default to TOOLS_KEY_NAME in environment", @@ -791,10 +787,11 @@ class VM: @config.default def _config_default(self): + golden_images = tools.utils.get_golden_images() config = AMIConfig( **{ key: value - for (key, value) in AMIS[self.name].items() + for (key, value) in golden_images[self.name].items() if key in AMIConfig.__annotations__ } ) From 7cc7595167df429b73428987e8a7cad4d1b9bcef Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 26 Mar 2024 11:56:41 +0000 Subject: [PATCH 24/32] Mandatory OS slugs are now defined in ``cicd/shared-gh-workflows-context.yml`` --- .github/workflows/ci.yml | 24 ++++++++++++------------ cicd/shared-gh-workflows-context.yml | 7 +++++++ tools/precommit/workflows.py | 8 -------- 3 files changed, 19 insertions(+), 20 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 35ba2f32933..59d15389a09 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -533,7 +533,7 @@ jobs: almalinux-9-pkg-tests: name: Alma Linux 9 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-9", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -638,7 +638,7 @@ jobs: 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'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["amazonlinux-2023-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -936,7 +936,7 @@ jobs: 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'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["ubuntu-22.04-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -978,7 +978,7 @@ jobs: 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'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -1104,7 +1104,7 @@ jobs: 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'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["windows-2022", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -1125,7 +1125,7 @@ jobs: 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'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["windows-2022", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -1188,7 +1188,7 @@ jobs: windows-2022: name: Windows 2022 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["windows-2022", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1230,7 +1230,7 @@ jobs: macos-13: name: macOS 13 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1314,7 +1314,7 @@ jobs: almalinux-9: name: Alma Linux 9 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-9", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1419,7 +1419,7 @@ jobs: 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'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["amazonlinux-2023-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1440,7 +1440,7 @@ jobs: archlinux-lts: name: Arch Linux LTS Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["archlinux-lts", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1780,7 +1780,7 @@ jobs: 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'] }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["ubuntu-22.04-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps diff --git a/cicd/shared-gh-workflows-context.yml b/cicd/shared-gh-workflows-context.yml index 42dc9883c7c..7c562fc0891 100644 --- a/cicd/shared-gh-workflows-context.yml +++ b/cicd/shared-gh-workflows-context.yml @@ -1,3 +1,10 @@ nox_version: "2022.8.7" python_version: "3.10.13" relenv_version: "0.15.1" +mandatory_os_slugs: + - almalinux-9 + - amazonlinux-2023-arm64 + - archlinux-lts + - macos-13 + - ubuntu-22.04-arm64 + - windows-2022 diff --git a/tools/precommit/workflows.py b/tools/precommit/workflows.py index 27bbac95ca5..14cc98022b6 100644 --- a/tools/precommit/workflows.py +++ b/tools/precommit/workflows.py @@ -320,14 +320,6 @@ def generate_workflows(ctx: Context): ), "build_rpms_listing": build_rpms_listing, "build_debs_listing": build_debs_listing, - "mandatory_os": ( - "almalinux-9", - "amazonlinux-2023-arm64", - "archlinux-lts", - "macos-13", - "ubuntu-22.04-arm64", - "windows-2022", - ), } shared_context = tools.utils.get_cicd_shared_context() for key, value in shared_context.items(): From 8d51ca91f2d01e98e65c0137bb3fc7532b6d3004 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 26 Mar 2024 11:55:58 +0000 Subject: [PATCH 25/32] Add tools command to sync known OS'es with GH test labels --- .github/workflows/ci.yml | 12 +- .../templates/test-salt-pkg.yml.jinja | 2 +- .../workflows/templates/test-salt.yml.jinja | 2 +- tools/__init__.py | 1 + tools/gh.py | 190 ++++++++++++++++++ 5 files changed, 199 insertions(+), 8 deletions(-) create mode 100644 tools/gh.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 59d15389a09..4afcf1c8041 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -957,7 +957,7 @@ jobs: 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'] && contains(fromJSON('["macos-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-12", "macos-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -978,7 +978,7 @@ jobs: 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('["macos-13", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13", "macos-13", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -999,7 +999,7 @@ jobs: macos-13-xlarge-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('["macos-13-xlarge", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13-xlarge", "macos-13-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -1209,7 +1209,7 @@ jobs: macos-12: name: macOS 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-12", "macos-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1230,7 +1230,7 @@ jobs: macos-13: name: macOS 13 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13", "macos-13", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1251,7 +1251,7 @@ jobs: macos-13-xlarge: name: macOS 13 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13-xlarge", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13-xlarge", "macos-13-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps diff --git a/.github/workflows/templates/test-salt-pkg.yml.jinja b/.github/workflows/templates/test-salt-pkg.yml.jinja index 7c37e539d75..124beaab517 100644 --- a/.github/workflows/templates/test-salt-pkg.yml.jinja +++ b/.github/workflows/templates/test-salt-pkg.yml.jinja @@ -43,7 +43,7 @@ <%- if workflow_slug != "ci" or slug in mandatory_os %> 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["<{ slug }>", "<{ slug.replace('xlarge', 'arm64') }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} <%- endif %> needs: - prepare-workflow diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index 349438c362a..1f3bbf7960a 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -43,7 +43,7 @@ <%- if workflow_slug != "ci" or slug in mandatory_os %> 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["<{ slug }>", "<{ slug.replace('xlarge', 'arm64') }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} <%- endif %> needs: - prepare-workflow diff --git a/tools/__init__.py b/tools/__init__.py index f5131d0e7f9..af50a06ef47 100644 --- a/tools/__init__.py +++ b/tools/__init__.py @@ -32,6 +32,7 @@ ptscripts.set_default_config(DEFAULT_REQS_CONFIG) ptscripts.register_tools_module("tools.changelog") ptscripts.register_tools_module("tools.ci") ptscripts.register_tools_module("tools.docs") +ptscripts.register_tools_module("tools.gh") ptscripts.register_tools_module("tools.pkg") ptscripts.register_tools_module("tools.pkg.repo") ptscripts.register_tools_module("tools.pkg.build") diff --git a/tools/gh.py b/tools/gh.py new file mode 100644 index 00000000000..fa32942263e --- /dev/null +++ b/tools/gh.py @@ -0,0 +1,190 @@ +""" +These commands are used to interact and make changes to GitHub. +""" + +# pylint: disable=resource-leakage,broad-except,3rd-party-module-not-gated +from __future__ import annotations + +import logging + +from ptscripts import Context, command_group + +import tools.utils +import tools.utils.gh + +log = logging.getLogger(__name__) + +WORKFLOWS = tools.utils.REPO_ROOT / ".github" / "workflows" +TEMPLATES = WORKFLOWS / "templates" + +# Define the command group +cgroup = command_group( + name="gh", + help="GitHub Related Commands", + description=__doc__, +) + + +@cgroup.command( + name="sync-os-labels", + arguments={ + "repository": { + "help": "Github repository.", + }, + }, +) +def sync_os_labels( + ctx: Context, repository: str = "saltstack/salt", color: str = "C2E0C6" +): + """ + Synchronize the GitHub labels to the OS known to be tested. + """ + description_prefix = "Run Tests Against" + known_os = { + "test:os:all": { + "name": "test:os:all", + "color": color, + "description": f"{description_prefix} ALL OS'es", + }, + "test:os:macos-12": { + "name": "test:os:macos-12", + "color": color, + "description": f"{description_prefix} MacOS 12", + }, + "test:os:macos-13": { + "name": "test:os:macos-13", + "color": color, + "description": f"{description_prefix} MacOS 13", + }, + "test:os:macos-13-arm64": { + "name": "test:os:macos-13-arm64", + "color": color, + "description": f"{description_prefix} MacOS 13 Arm64", + }, + } + for slug, details in tools.utils.get_golden_images().items(): + name = f"test:os:{slug}" + ami_description = ( + details["ami_description"] + .replace("CI Image of ", "") + .replace("arm64", "Arm64") + ) + known_os[name] = { + "name": name, + "color": color, + "description": f"{description_prefix} {ami_description}", + } + + ctx.info(known_os) + + github_token = tools.utils.gh.get_github_token(ctx) + if github_token is None: + ctx.error("Querying labels requires being authenticated to GitHub.") + ctx.info( + "Either set 'GITHUB_TOKEN' to a valid token, or configure the 'gh' tool such that " + "'gh auth token' returns a token." + ) + ctx.exit(1) + + existing_labels = set() + labels_to_update = [] + labels_to_delete = set() + shared_context = tools.utils.get_cicd_shared_context() + for slug in shared_context["mandatory_os_slugs"]: + label = f"test:os:{slug}" + labels_to_delete.add(label) + + headers = { + "Accept": "application/vnd.github+json", + "Authorization": f"Bearer {github_token}", + "X-GitHub-Api-Version": "2022-11-28", + } + with ctx.web as web: + web.headers.update(headers) + page = 0 + while True: + page += 1 + params = { + "per_page": 100, + "page": page, + } + ret = web.get( + f"https://api.github.com/repos/{repository}/labels", + params=params, + ) + if ret.status_code != 200: + ctx.error( + f"Failed to get the labels for repository {repository!r}: {ret.reason}" + ) + ctx.exit(1) + data = ret.json() + if not data: + break + for details in data: + label = details["name"] + if not label.startswith("test:os:"): + continue + + existing_labels.add(label) + + if label not in known_os: + labels_to_delete.add(details["name"]) + continue + + if label in known_os: + update_details = known_os.pop(label) + if label in labels_to_delete: + continue + for key, value in update_details.items(): + if details[key] != value: + labels_to_update.append(update_details) + break + continue + + for slug in shared_context["mandatory_os_slugs"]: + label = f"test:os:{slug}" + if label in known_os: + labels_to_delete.add(label) + known_os.pop(label) + + if label in labels_to_update: + labels_to_delete.add(label) + known_os.pop(label) + + for label in labels_to_delete: + if label not in existing_labels: + continue + ctx.info(f"Deleting label '{label}' ...") + ret = web.delete( + f"https://api.github.com/repos/{repository}/labels/{label}", + ) + if ret.status_code != 204: + ctx.error( + f"Failed to delete label '{label}' for repository {repository!r}: {ret.reason}" + ) + + ctx.info("Updating OS Labels in GitHub...") + for details in labels_to_update: + label = details["name"] + ctx.info(f"Updating label '{label}' ...") + ret = web.patch( + f"https://api.github.com/repos/{repository}/labels/{label}", + params=details, + ) + if ret.status_code != 200: + ctx.error( + f"Failed to update label '{details['name']}' for repository {repository!r}: {ret.reason}" + ) + + for label, details in known_os.items(): + details["name"] = label + ctx.info(f"Creating label: {details} ...") + ret = web.post( + f"https://api.github.com/repos/{repository}/labels", + json=details, + ) + if ret.status_code != 201: + ctx.error( + f"Failed to create label '{details['name']}' for repository {repository!r}: {ret.reason}" + ) + print(ret.content) From d6ff5005da97f619eb60c20db53db8a67e54173e Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Tue, 26 Mar 2024 18:07:35 +0000 Subject: [PATCH 26/32] Use ``attrs`` to simplify OS definitions --- .github/workflows/build-deps-ci-action.yml | 4 +- .github/workflows/ci.yml | 144 +++--- .github/workflows/nightly.yml | 20 +- .github/workflows/scheduled.yml | 20 +- .github/workflows/staging.yml | 18 +- .../templates/build-deps-ci-action.yml.jinja | 2 +- .../test-package-downloads-action.yml.jinja | 26 +- .../templates/test-salt-pkg.yml.jinja | 51 +- .../workflows/templates/test-salt.yml.jinja | 49 +- .github/workflows/test-action-macos.yml | 6 +- .../test-package-downloads-action.yml | 6 +- .../workflows/test-packages-action-macos.yml | 6 +- .pre-commit-config.yaml | 2 +- cicd/shared-gh-workflows-context.yml | 2 +- tools/ci.py | 8 +- tools/precommit/workflows.py | 471 ++++++++++++++---- tools/utils/__init__.py | 31 ++ 17 files changed, 597 insertions(+), 269 deletions(-) diff --git a/.github/workflows/build-deps-ci-action.yml b/.github/workflows/build-deps-ci-action.yml index b16ec5e6ee8..58ef83be4f1 100644 --- a/.github/workflows/build-deps-ci-action.yml +++ b/.github/workflows/build-deps-ci-action.yml @@ -163,7 +163,7 @@ jobs: macos-dependencies: name: MacOS - runs-on: ${{ matrix.distro-slug }} + runs-on: ${{ matrix.distro-slug == 'macos-13-arm64' && 'macos-13-xlarge' || matrix.distro-slug }} timeout-minutes: 90 strategy: fail-fast: false @@ -171,7 +171,7 @@ jobs: include: - distro-slug: macos-12 arch: x86_64 - - distro-slug: macos-13-xlarge + - distro-slug: macos-13-arm64 arch: arm64 steps: diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4afcf1c8041..0b5b9a5f8bc 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -491,7 +491,7 @@ jobs: almalinux-8-pkg-tests: name: Alma Linux 8 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-8", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-8"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -512,7 +512,7 @@ jobs: almalinux-8-arm64-pkg-tests: name: Alma Linux 8 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-8-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-8-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -533,7 +533,7 @@ jobs: almalinux-9-pkg-tests: name: Alma Linux 9 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-9", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-pkgs-onedir @@ -554,7 +554,7 @@ jobs: almalinux-9-arm64-pkg-tests: name: Alma Linux 9 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-9-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-9-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -575,7 +575,7 @@ jobs: 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('["amazonlinux-2", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "amazonlinux-2"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -596,7 +596,7 @@ jobs: 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('["amazonlinux-2-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "amazonlinux-2-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -617,7 +617,7 @@ jobs: 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('["amazonlinux-2023", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "amazonlinux-2023"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -638,7 +638,7 @@ jobs: 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'] && contains(fromJSON('["amazonlinux-2023-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-pkgs-onedir @@ -659,7 +659,7 @@ jobs: centos-7-pkg-tests: name: CentOS 7 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["centos-7", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "centos-7"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -680,7 +680,7 @@ jobs: debian-10-pkg-tests: name: Debian 10 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["debian-10", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-10"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -701,7 +701,7 @@ jobs: 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('["debian-11", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-11"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -722,7 +722,7 @@ jobs: 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('["debian-11-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-11-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -743,7 +743,7 @@ jobs: 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('["debian-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-12"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -764,7 +764,7 @@ jobs: 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('["debian-12-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-12-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -785,7 +785,7 @@ jobs: 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('["photonos-4", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "photonos-4"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -807,7 +807,7 @@ jobs: 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('["photonos-4-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "photonos-4-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -829,7 +829,7 @@ jobs: 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('["photonos-5", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "photonos-5"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -851,7 +851,7 @@ jobs: 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'] && contains(fromJSON('["photonos-5-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "photonos-5-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -873,7 +873,7 @@ jobs: 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('["ubuntu-20.04", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "ubuntu-20.04"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -894,7 +894,7 @@ jobs: 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('["ubuntu-20.04-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "ubuntu-20.04-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -915,7 +915,7 @@ jobs: 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('["ubuntu-22.04", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "ubuntu-22.04"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -936,7 +936,7 @@ jobs: 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('["ubuntu-22.04-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-pkgs-onedir @@ -957,7 +957,7 @@ jobs: 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'] && contains(fromJSON('["macos-12", "macos-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["all", "macos-12"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -965,6 +965,7 @@ jobs: 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 @@ -978,7 +979,7 @@ jobs: 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('["macos-13", "macos-13", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["all", "macos-13"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -986,6 +987,7 @@ jobs: 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 @@ -997,16 +999,17 @@ jobs: skip-code-coverage: ${{ fromJSON(needs.prepare-workflow.outputs.testrun)['skip_code_coverage'] }} testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - macos-13-xlarge-pkg-tests: + 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('["macos-13-xlarge", "macos-13-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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-xlarge + distro-slug: macos-13-arm64 + runner: macos-13-xlarge nox-session: ci-test-onedir platform: macos arch: arm64 @@ -1020,7 +1023,7 @@ jobs: 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('["windows-2016", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "windows-2016"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -1041,7 +1044,7 @@ jobs: 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('["windows-2016", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "windows-2016"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -1062,7 +1065,7 @@ jobs: 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('["windows-2019", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "windows-2019"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -1083,7 +1086,7 @@ jobs: 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('["windows-2019", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "windows-2019"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-pkgs-onedir @@ -1104,7 +1107,7 @@ jobs: 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'] && contains(fromJSON('["windows-2022", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-pkgs-onedir @@ -1125,7 +1128,7 @@ jobs: 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'] && contains(fromJSON('["windows-2022", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-pkgs-onedir @@ -1146,7 +1149,7 @@ jobs: windows-2016: name: Windows 2016 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["windows-2016", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "windows-2016"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1167,7 +1170,7 @@ jobs: windows-2019: name: Windows 2019 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["windows-2019", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "windows-2019"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1188,7 +1191,7 @@ jobs: windows-2022: name: Windows 2022 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["windows-2022", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-ci-deps @@ -1209,13 +1212,14 @@ jobs: macos-12: name: macOS 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-12", "macos-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["all", "macos-12"]'), needs.prepare-workflow.outputs.os-labels) }} 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 @@ -1230,13 +1234,14 @@ jobs: macos-13: name: macOS 13 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["macos-13", "macos-13", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["all", "macos-13"]'), needs.prepare-workflow.outputs.os-labels) }} 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 @@ -1249,15 +1254,16 @@ jobs: workflow-slug: ci default-timeout: 180 - macos-13-xlarge: + 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('["macos-13-xlarge", "macos-13-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + 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-xlarge + distro-slug: macos-13-arm64 + runner: macos-13-xlarge nox-session: ci-test-onedir platform: macos arch: arm64 @@ -1272,7 +1278,7 @@ jobs: almalinux-8: name: Alma Linux 8 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-8", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-8"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1293,7 +1299,7 @@ jobs: almalinux-8-arm64: name: Alma Linux 8 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-8-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-8-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1314,7 +1320,7 @@ jobs: almalinux-9: name: Alma Linux 9 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-9", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-ci-deps @@ -1335,7 +1341,7 @@ jobs: almalinux-9-arm64: name: Alma Linux 9 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["almalinux-9-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-9-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1356,7 +1362,7 @@ jobs: 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('["amazonlinux-2", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "amazonlinux-2"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1377,7 +1383,7 @@ jobs: 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('["amazonlinux-2-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "amazonlinux-2-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1398,7 +1404,7 @@ jobs: 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('["amazonlinux-2023", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "amazonlinux-2023"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1419,7 +1425,7 @@ jobs: 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'] && contains(fromJSON('["amazonlinux-2023-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-ci-deps @@ -1440,7 +1446,7 @@ jobs: archlinux-lts: name: Arch Linux LTS Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["archlinux-lts", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-ci-deps @@ -1461,7 +1467,7 @@ jobs: centos-7: name: CentOS 7 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["centos-7", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "centos-7"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1482,7 +1488,7 @@ jobs: debian-10: name: Debian 10 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["debian-10", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-10"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1503,7 +1509,7 @@ jobs: debian-11: name: Debian 11 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["debian-11", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-11"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1524,7 +1530,7 @@ jobs: 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('["debian-11-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-11-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1545,7 +1551,7 @@ jobs: debian-12: name: Debian 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["debian-12", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-12"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1566,7 +1572,7 @@ jobs: 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('["debian-12-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-12-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1587,7 +1593,7 @@ jobs: fedora-39: name: Fedora 39 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["fedora-39", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "fedora-39"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1608,7 +1614,7 @@ jobs: opensuse-15: name: Opensuse 15 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["opensuse-15", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "opensuse-15"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1629,7 +1635,7 @@ jobs: 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('["photonos-4", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "photonos-4"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1651,7 +1657,7 @@ jobs: 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('["photonos-4-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "photonos-4-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1673,7 +1679,7 @@ jobs: 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('["photonos-5", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "photonos-5"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1695,7 +1701,7 @@ jobs: 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'] && contains(fromJSON('["photonos-5-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "photonos-5-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1717,7 +1723,7 @@ jobs: 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('["ubuntu-20.04", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "ubuntu-20.04"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1738,7 +1744,7 @@ jobs: 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('["ubuntu-20.04-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "ubuntu-20.04-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1759,7 +1765,7 @@ jobs: 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('["ubuntu-22.04", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "ubuntu-22.04"]'), needs.prepare-workflow.outputs.os-labels) }} needs: - prepare-workflow - build-ci-deps @@ -1780,7 +1786,7 @@ jobs: 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('["ubuntu-22.04-arm64", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] }} needs: - prepare-workflow - build-ci-deps @@ -1811,7 +1817,7 @@ jobs: - windows-2022 - macos-12 - macos-13 - - macos-13-xlarge + - macos-13-arm64 - almalinux-8 - almalinux-8-arm64 - almalinux-9 @@ -1965,7 +1971,7 @@ jobs: - windows-2022 - macos-12 - macos-13 - - macos-13-xlarge + - macos-13-arm64 - almalinux-8 - almalinux-8-arm64 - almalinux-9 @@ -2015,7 +2021,7 @@ jobs: - ubuntu-2204-arm64-pkg-tests - macos-12-pkg-tests - macos-13-pkg-tests - - macos-13-xlarge-pkg-tests + - macos-13-arm64-pkg-tests - windows-2016-nsis-pkg-tests - windows-2016-msi-pkg-tests - windows-2019-nsis-pkg-tests diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 95c0332458e..1ff3ccb7db5 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -1022,6 +1022,7 @@ jobs: 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 @@ -1043,6 +1044,7 @@ jobs: 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 @@ -1054,7 +1056,7 @@ jobs: skip-code-coverage: false testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - macos-13-xlarge-pkg-tests: + 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: @@ -1063,7 +1065,8 @@ jobs: - build-ci-deps uses: ./.github/workflows/test-packages-action-macos.yml with: - distro-slug: macos-13-xlarge + distro-slug: macos-13-arm64 + runner: macos-13-xlarge nox-session: ci-test-onedir platform: macos arch: arm64 @@ -1273,6 +1276,7 @@ jobs: 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 @@ -1294,6 +1298,7 @@ jobs: 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 @@ -1306,7 +1311,7 @@ jobs: workflow-slug: nightly default-timeout: 360 - macos-13-xlarge: + 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: @@ -1314,7 +1319,8 @@ jobs: - build-ci-deps uses: ./.github/workflows/test-action-macos.yml with: - distro-slug: macos-13-xlarge + distro-slug: macos-13-arm64 + runner: macos-13-xlarge nox-session: ci-test-onedir platform: macos arch: arm64 @@ -1868,7 +1874,7 @@ jobs: - windows-2022 - macos-12 - macos-13 - - macos-13-xlarge + - macos-13-arm64 - almalinux-8 - almalinux-8-arm64 - almalinux-9 @@ -2778,7 +2784,7 @@ jobs: - windows-2022 - macos-12 - macos-13 - - macos-13-xlarge + - macos-13-arm64 - almalinux-8 - almalinux-8-arm64 - almalinux-9 @@ -2886,7 +2892,7 @@ jobs: - ubuntu-2204-arm64-pkg-tests - macos-12-pkg-tests - macos-13-pkg-tests - - macos-13-xlarge-pkg-tests + - macos-13-arm64-pkg-tests - windows-2016-nsis-pkg-tests - windows-2016-msi-pkg-tests - windows-2019-nsis-pkg-tests diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index c1108976d7b..524ffc4613b 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -999,6 +999,7 @@ jobs: 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 @@ -1020,6 +1021,7 @@ jobs: 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 @@ -1031,7 +1033,7 @@ jobs: skip-code-coverage: false testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - macos-13-xlarge-pkg-tests: + 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: @@ -1040,7 +1042,8 @@ jobs: - build-ci-deps uses: ./.github/workflows/test-packages-action-macos.yml with: - distro-slug: macos-13-xlarge + distro-slug: macos-13-arm64 + runner: macos-13-xlarge nox-session: ci-test-onedir platform: macos arch: arm64 @@ -1250,6 +1253,7 @@ jobs: 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 @@ -1271,6 +1275,7 @@ jobs: 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 @@ -1283,7 +1288,7 @@ jobs: workflow-slug: scheduled default-timeout: 360 - macos-13-xlarge: + 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: @@ -1291,7 +1296,8 @@ jobs: - build-ci-deps uses: ./.github/workflows/test-action-macos.yml with: - distro-slug: macos-13-xlarge + distro-slug: macos-13-arm64 + runner: macos-13-xlarge nox-session: ci-test-onedir platform: macos arch: arm64 @@ -1845,7 +1851,7 @@ jobs: - windows-2022 - macos-12 - macos-13 - - macos-13-xlarge + - macos-13-arm64 - almalinux-8 - almalinux-8-arm64 - almalinux-9 @@ -2001,7 +2007,7 @@ jobs: - windows-2022 - macos-12 - macos-13 - - macos-13-xlarge + - macos-13-arm64 - almalinux-8 - almalinux-8-arm64 - almalinux-9 @@ -2051,7 +2057,7 @@ jobs: - ubuntu-2204-arm64-pkg-tests - macos-12-pkg-tests - macos-13-pkg-tests - - macos-13-xlarge-pkg-tests + - macos-13-arm64-pkg-tests - windows-2016-nsis-pkg-tests - windows-2016-msi-pkg-tests - windows-2019-nsis-pkg-tests diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 0961f55aa8c..3812b70ea9e 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -1012,6 +1012,7 @@ jobs: 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 @@ -1033,6 +1034,7 @@ jobs: 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 @@ -1044,7 +1046,7 @@ jobs: skip-code-coverage: true testing-releases: ${{ needs.prepare-workflow.outputs.testing-releases }} - macos-13-xlarge-pkg-tests: + 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: @@ -1053,7 +1055,8 @@ jobs: - build-ci-deps uses: ./.github/workflows/test-packages-action-macos.yml with: - distro-slug: macos-13-xlarge + distro-slug: macos-13-arm64 + runner: macos-13-xlarge nox-session: ci-test-onedir platform: macos arch: arm64 @@ -1263,6 +1266,7 @@ jobs: 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 @@ -1284,6 +1288,7 @@ jobs: 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 @@ -1296,7 +1301,7 @@ jobs: workflow-slug: staging default-timeout: 180 - macos-13-xlarge: + 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: @@ -1304,7 +1309,8 @@ jobs: - build-ci-deps uses: ./.github/workflows/test-action-macos.yml with: - distro-slug: macos-13-xlarge + distro-slug: macos-13-arm64 + runner: macos-13-xlarge nox-session: ci-test-onedir platform: macos arch: arm64 @@ -2757,7 +2763,7 @@ jobs: - windows-2022 - macos-12 - macos-13 - - macos-13-xlarge + - macos-13-arm64 - almalinux-8 - almalinux-8-arm64 - almalinux-9 @@ -2807,7 +2813,7 @@ jobs: - ubuntu-2204-arm64-pkg-tests - macos-12-pkg-tests - macos-13-pkg-tests - - macos-13-xlarge-pkg-tests + - macos-13-arm64-pkg-tests - windows-2016-nsis-pkg-tests - windows-2016-msi-pkg-tests - windows-2019-nsis-pkg-tests diff --git a/.github/workflows/templates/build-deps-ci-action.yml.jinja b/.github/workflows/templates/build-deps-ci-action.yml.jinja index de6dc03ba3c..a08f02b0d3d 100644 --- a/.github/workflows/templates/build-deps-ci-action.yml.jinja +++ b/.github/workflows/templates/build-deps-ci-action.yml.jinja @@ -163,7 +163,7 @@ jobs: macos-dependencies: name: MacOS - runs-on: ${{ matrix.distro-slug }} + runs-on: ${{ matrix.distro-slug == 'macos-13-arm64' && 'macos-13-xlarge' || matrix.distro-slug }} timeout-minutes: 90 strategy: fail-fast: false diff --git a/.github/workflows/templates/test-package-downloads-action.yml.jinja b/.github/workflows/templates/test-package-downloads-action.yml.jinja index ee5f5fbfc1b..469509e979f 100644 --- a/.github/workflows/templates/test-package-downloads-action.yml.jinja +++ b/.github/workflows/templates/test-package-downloads-action.yml.jinja @@ -69,10 +69,10 @@ jobs: fail-fast: false matrix: include: - <%- for slug, arch, pkg_type in test_salt_pkg_downloads_listing["linux"] %> - - distro-slug: <{ slug }> - arch: <{ arch }> - pkg-type: <{ pkg_type }> + <%- for os in test_salt_pkg_downloads_listing["linux"] %> + - distro-slug: <{ os.slug }> + arch: <{ os.arch }> + pkg-type: <{ os.pkg_type }> <%- endfor %> steps: @@ -271,7 +271,7 @@ jobs: macos: name: MacOS - runs-on: ${{ matrix.distro-slug }} + runs-on: ${{ matrix.distro-slug == 'macos-13-arm64' && 'macos-13-xlarge' || matrix.distro-slug }} env: USE_S3_CACHE: 'false' environment: ${{ inputs.environment }} @@ -280,10 +280,10 @@ jobs: fail-fast: false matrix: include: - <%- for slug, arch, pkg_type in test_salt_pkg_downloads_listing["macos"] %> - - distro-slug: <{ slug }> - arch: <{ arch }> - pkg-type: <{ pkg_type }> + <%- for os in test_salt_pkg_downloads_listing["macos"] %> + - distro-slug: <{ os.slug }> + arch: <{ os.arch }> + pkg-type: <{ os.pkg_type }> <%- endfor %> steps: @@ -485,10 +485,10 @@ jobs: fail-fast: false matrix: include: - <%- for slug, arch, pkg_type in test_salt_pkg_downloads_listing["windows"] %> - - distro-slug: <{ slug }> - arch: <{ arch }> - pkg-type: <{ pkg_type }> + <%- for os in test_salt_pkg_downloads_listing["windows"] %> + - distro-slug: <{ os.slug }> + arch: <{ os.arch }> + pkg-type: <{ os.pkg_type }> <%- endfor %> steps: diff --git a/.github/workflows/templates/test-salt-pkg.yml.jinja b/.github/workflows/templates/test-salt-pkg.yml.jinja index 124beaab517..d42155e552f 100644 --- a/.github/workflows/templates/test-salt-pkg.yml.jinja +++ b/.github/workflows/templates/test-salt-pkg.yml.jinja @@ -1,13 +1,13 @@ - <%- for slug, display_name, arch, pkg_type, fips in test_salt_pkg_listing["linux"] %> - <%- set job_name = "{}-pkg-tests".format(slug.replace(".", "")) %> + <%- for os in test_salt_pkg_listing["linux"] %> + <%- set job_name = "{}-pkg-tests".format(os.slug.replace(".", "")) %> <{ job_name }>: <%- do test_salt_pkg_needs.append(job_name) %> - name: <{ display_name }> Package Test - <%- if workflow_slug != "ci" or slug in mandatory_os %> + 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)['self-hosted'] }} <%- else %> - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} <%- endif %> needs: - prepare-workflow @@ -15,18 +15,18 @@ - build-ci-deps uses: ./.github/workflows/test-packages-action-linux.yml with: - distro-slug: <{ slug }> + distro-slug: <{ os.slug }> nox-session: ci-test-onedir platform: linux - arch: <{ arch }> + arch: <{ os.arch }> salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: <{ pkg_type }> + 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 fips == "fips" %> + <%- if os.fips %> fips: true <%- endif %> @@ -34,16 +34,16 @@ - <%- for slug, display_name, arch in test_salt_pkg_listing["macos"] %> - <%- set job_name = "{}-pkg-tests".format(slug.replace(".", "")) %> + <%- 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: <{ display_name }> Package Test - <%- if workflow_slug != "ci" or slug in mandatory_os %> + 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('["<{ slug }>", "<{ slug.replace('xlarge', 'arm64') }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} <%- endif %> needs: - prepare-workflow @@ -51,10 +51,11 @@ - build-ci-deps uses: ./.github/workflows/test-packages-action-macos.yml with: - distro-slug: <{ slug }> + distro-slug: <{ os.slug }> + runner: <{ os.runner }> nox-session: ci-test-onedir platform: macos - arch: <{ arch }> + arch: <{ os.arch }> salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" pkg-type: macos nox-version: <{ nox_version }> @@ -66,17 +67,16 @@ <%- endfor %> - <%- for slug, display_name, arch in test_salt_pkg_listing["windows"] %> - <%- for pkg_type in ("NSIS", "MSI") %> - <%- set job_name = "{}-{}-pkg-tests".format(slug.replace(".", ""), pkg_type.lower()) %> + <%- 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: <{ display_name }> <{ pkg_type }> Package Test - <%- if workflow_slug != "ci" or slug in mandatory_os %> + 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} <%- endif %> needs: - prepare-workflow @@ -84,17 +84,16 @@ - build-ci-deps uses: ./.github/workflows/test-packages-action-windows.yml with: - distro-slug: <{ slug }> + distro-slug: <{ os.slug }> nox-session: ci-test-onedir platform: windows - arch: <{ arch }> + arch: <{ os.arch }> salt-version: "${{ needs.prepare-workflow.outputs.salt-version }}" - pkg-type: <{ pkg_type }> + 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 %> <%- endfor %> diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index 1f3bbf7960a..c3ea4eee146 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -4,22 +4,22 @@ <%- set timeout_value = 180 %> <%- endif %> - <%- for slug, display_name, arch in test_salt_listing["windows"] %> + <%- for os in test_salt_listing["windows"] %> - <{ slug.replace(".", "") }>: - <%- do test_salt_needs.append(slug.replace(".", "")) %> - name: <{ display_name }> Test - <%- if workflow_slug != "ci" or slug in mandatory_os %> + <{ 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} <%- endif %> needs: - prepare-workflow - build-ci-deps uses: ./.github/workflows/test-action-windows.yml with: - distro-slug: <{ slug }> + distro-slug: <{ os.slug }> nox-session: ci-test-onedir platform: windows arch: amd64 @@ -35,25 +35,26 @@ <%- endfor %> - <%- for slug, display_name, arch in test_salt_listing["macos"] %> + <%- for os in test_salt_listing["macos"] %> - <{ slug.replace(".", "") }>: - <%- do test_salt_needs.append(slug.replace(".", "")) %> - name: <{ display_name }> Test - <%- if workflow_slug != "ci" or slug in mandatory_os %> + <{ 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('["<{ slug }>", "<{ slug.replace('xlarge', 'arm64') }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} <%- endif %> needs: - prepare-workflow - build-ci-deps uses: ./.github/workflows/test-action-macos.yml with: - distro-slug: <{ slug }> + distro-slug: <{ os.slug }> + runner: <{ os.runner }> nox-session: ci-test-onedir platform: macos - arch: <{ arch }> + arch: <{ os.arch }> nox-version: <{ nox_version }> gh-actions-python-version: "<{ gh_actions_workflows_python_version }>" testrun: ${{ needs.prepare-workflow.outputs.testrun }} @@ -65,25 +66,25 @@ <%- endfor %> - <%- for slug, display_name, arch, fips in test_salt_listing["linux"] %> + <%- for os in test_salt_listing["linux"] %> - <{ slug.replace(".", "") }>: - <%- do test_salt_needs.append(slug.replace(".", "")) %> - name: <{ display_name }> Test - <%- if workflow_slug != "ci" or slug in mandatory_os %> + <{ 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('["<{ slug }>", "all"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} <%- endif %> needs: - prepare-workflow - build-ci-deps uses: ./.github/workflows/test-action-linux.yml with: - distro-slug: <{ slug }> + distro-slug: <{ os.slug }> nox-session: ci-test-onedir platform: linux - arch: <{ arch }> + arch: <{ os.arch }> nox-version: <{ nox_version }> gh-actions-python-version: "<{ gh_actions_workflows_python_version }>" testrun: ${{ needs.prepare-workflow.outputs.testrun }} @@ -92,7 +93,7 @@ skip-code-coverage: <{ skip_test_coverage_check }> workflow-slug: <{ workflow_slug }> default-timeout: <{ timeout_value }> - <%- if fips == "fips" %> + <%- if os.fips %> fips: true <%- endif %> diff --git a/.github/workflows/test-action-macos.yml b/.github/workflows/test-action-macos.yml index 24465a724c0..6b03a6cb558 100644 --- a/.github/workflows/test-action-macos.yml +++ b/.github/workflows/test-action-macos.yml @@ -8,6 +8,10 @@ on: 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 @@ -98,7 +102,7 @@ jobs: test: name: Test - runs-on: ${{ inputs.distro-slug }} + runs-on: ${{ inputs.runner }} # 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 }} diff --git a/.github/workflows/test-package-downloads-action.yml b/.github/workflows/test-package-downloads-action.yml index dc3fb12a661..e4bd6af0fd8 100644 --- a/.github/workflows/test-package-downloads-action.yml +++ b/.github/workflows/test-package-downloads-action.yml @@ -380,7 +380,7 @@ jobs: macos: name: MacOS - runs-on: ${{ matrix.distro-slug }} + runs-on: ${{ matrix.distro-slug == 'macos-13-arm64' && 'macos-13-xlarge' || matrix.distro-slug }} env: USE_S3_CACHE: 'false' environment: ${{ inputs.environment }} @@ -395,10 +395,10 @@ jobs: - distro-slug: macos-13 arch: x86_64 pkg-type: package - - distro-slug: macos-13-xlarge + - distro-slug: macos-13-arm64 arch: arm64 pkg-type: package - - distro-slug: macos-13-xlarge + - distro-slug: macos-13-arm64 arch: arm64 pkg-type: onedir diff --git a/.github/workflows/test-packages-action-macos.yml b/.github/workflows/test-packages-action-macos.yml index 2b6b2e9ca90..611d84e22e7 100644 --- a/.github/workflows/test-packages-action-macos.yml +++ b/.github/workflows/test-packages-action-macos.yml @@ -7,6 +7,10 @@ on: 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 @@ -98,7 +102,7 @@ jobs: test: name: Test - runs-on: ${{ inputs.distro-slug }} + runs-on: ${{ inputs.runner }} timeout-minutes: 120 # 2 Hours - More than this and something is wrong needs: - generate-matrix diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 5d338177f40..68821fd8ba5 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/templates/.*)$ + files: ^(cicd/shared-gh-workflows-context\.yml|tools/precommit/workflows\.py|.github/workflows/.*)$ pass_filenames: false args: - pre-commit diff --git a/cicd/shared-gh-workflows-context.yml b/cicd/shared-gh-workflows-context.yml index 7c562fc0891..2966a250604 100644 --- a/cicd/shared-gh-workflows-context.yml +++ b/cicd/shared-gh-workflows-context.yml @@ -5,6 +5,6 @@ mandatory_os_slugs: - almalinux-9 - amazonlinux-2023-arm64 - archlinux-lts - - macos-13 + - macos-13-arm64 - ubuntu-22.04-arm64 - windows-2022 diff --git a/tools/ci.py b/tools/ci.py index 491df8019ed..ed1c0416630 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -968,7 +968,13 @@ def get_pr_test_labels( if TYPE_CHECKING: assert github_output is not None - ctx.info("Writing 'labels' to the github outputs file") + ctx.info("Writing 'labels' to the github outputs file...") + ctx.info("Test Labels:") + for label in sorted(test_labels): + ctx.info(f" * [yellow]{label}[/yellow]") + ctx.info("* OS Labels:") + for slug in sorted(selected): + ctx.info(f" * [yellow]{slug}[/yellow]") with open(github_output, "a", encoding="utf-8") as wfh: wfh.write(f"os-labels={json.dumps([label for label in os_labels])}\n") wfh.write(f"test-labels={json.dumps([label for label in test_labels])}\n") diff --git a/tools/precommit/workflows.py b/tools/precommit/workflows.py index 14cc98022b6..3c8b032ad05 100644 --- a/tools/precommit/workflows.py +++ b/tools/precommit/workflows.py @@ -7,12 +7,19 @@ from __future__ import annotations import logging import shutil +import sys from typing import TYPE_CHECKING, cast from jinja2 import Environment, FileSystemLoader, StrictUndefined from ptscripts import Context, command_group import tools.utils +from tools.utils import Linux, MacOS, Windows + +if sys.version_info < (3, 11): + from typing_extensions import TypedDict +else: + from typing import TypedDict # pylint: disable=no-name-in-module log = logging.getLogger(__name__) @@ -20,6 +27,12 @@ WORKFLOWS = tools.utils.REPO_ROOT / ".github" / "workflows" TEMPLATES = WORKFLOWS / "templates" +class PlatformDefinitions(TypedDict): + linux: list[Linux] + macos: list[MacOS] + windows: list[Windows] + + # Define the command group cgroup = command_group( name="workflows", @@ -91,94 +104,299 @@ def generate_workflows(ctx: Context): "template": "build-deps-ci-action.yml", }, } - test_salt_listing: dict[str, list[tuple[str, ...]]] = { - "linux": [ - ("almalinux-8", "Alma Linux 8", "x86_64", "no-fips"), - ("almalinux-8-arm64", "Alma Linux 8 Arm64", "arm64", "no-fips"), - ("almalinux-9", "Alma Linux 9", "x86_64", "no-fips"), - ("almalinux-9-arm64", "Alma Linux 9 Arm64", "arm64", "no-fips"), - ("amazonlinux-2", "Amazon Linux 2", "x86_64", "no-fips"), - ("amazonlinux-2-arm64", "Amazon Linux 2 Arm64", "arm64", "no-fips"), - ("amazonlinux-2023", "Amazon Linux 2023", "x86_64", "no-fips"), - ("amazonlinux-2023-arm64", "Amazon Linux 2023 Arm64", "arm64", "no-fips"), - ("archlinux-lts", "Arch Linux LTS", "x86_64", "no-fips"), - ("centos-7", "CentOS 7", "x86_64", "no-fips"), - ("debian-10", "Debian 10", "x86_64", "no-fips"), - ("debian-11", "Debian 11", "x86_64", "no-fips"), - ("debian-11-arm64", "Debian 11 Arm64", "arm64", "no-fips"), - ("debian-12", "Debian 12", "x86_64", "no-fips"), - ("debian-12-arm64", "Debian 12 Arm64", "arm64", "no-fips"), - ("fedora-39", "Fedora 39", "x86_64", "no-fips"), - ("opensuse-15", "Opensuse 15", "x86_64", "no-fips"), - ("photonos-4", "Photon OS 4", "x86_64", "fips"), - ("photonos-4-arm64", "Photon OS 4 Arm64", "arm64", "fips"), - ("photonos-5", "Photon OS 5", "x86_64", "fips"), - ("photonos-5-arm64", "Photon OS 5 Arm64", "arm64", "fips"), - ("ubuntu-20.04", "Ubuntu 20.04", "x86_64", "no-fips"), - ("ubuntu-20.04-arm64", "Ubuntu 20.04 Arm64", "arm64", "no-fips"), - ("ubuntu-22.04", "Ubuntu 22.04", "x86_64", "no-fips"), - ("ubuntu-22.04-arm64", "Ubuntu 22.04 Arm64", "arm64", "no-fips"), - ], - "macos": [ - ("macos-12", "macOS 12", "x86_64"), - ("macos-13", "macOS 13", "x86_64"), - ("macos-13-xlarge", "macOS 13 Arm64", "arm64"), - ], - "windows": [ - ("windows-2016", "Windows 2016", "amd64"), - ("windows-2019", "Windows 2019", "amd64"), - ("windows-2022", "Windows 2022", "amd64"), - ], - } + test_salt_listing = PlatformDefinitions( + { + "linux": [ + Linux(slug="almalinux-8", display_name="Alma Linux 8", arch="x86_64"), + Linux( + slug="almalinux-8-arm64", + display_name="Alma Linux 8 Arm64", + arch="arm64", + ), + Linux(slug="almalinux-9", display_name="Alma Linux 9", arch="x86_64"), + Linux( + slug="almalinux-9-arm64", + display_name="Alma 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="archlinux-lts", display_name="Arch Linux LTS", arch="x86_64" + ), + Linux(slug="centos-7", display_name="CentOS 7", arch="x86_64"), + Linux(slug="debian-10", display_name="Debian 10", arch="x86_64"), + 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-39", display_name="Fedora 39", 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", + 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", + 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", + ), + ], + "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"), + ], + } + ) - test_salt_pkg_listing = { - "linux": [ - ("almalinux-8", "Alma Linux 8", "x86_64", "rpm", "no-fips"), - ("almalinux-8-arm64", "Alma Linux 8 Arm64", "arm64", "rpm", "no-fips"), - ("almalinux-9", "Alma Linux 9", "x86_64", "rpm", "no-fips"), - ("almalinux-9-arm64", "Alma Linux 9 Arm64", "arm64", "rpm", "no-fips"), - ("amazonlinux-2", "Amazon Linux 2", "x86_64", "rpm", "no-fips"), - ( - "amazonlinux-2-arm64", - "Amazon Linux 2 Arm64", - "arm64", - "rpm", - "no-fips", - ), - ("amazonlinux-2023", "Amazon Linux 2023", "x86_64", "rpm", "no-fips"), - ( - "amazonlinux-2023-arm64", - "Amazon Linux 2023 Arm64", - "arm64", - "rpm", - "no-fips", - ), - ("centos-7", "CentOS 7", "x86_64", "rpm", "no-fips"), - ("debian-10", "Debian 10", "x86_64", "deb", "no-fips"), - ("debian-11", "Debian 11", "x86_64", "deb", "no-fips"), - ("debian-11-arm64", "Debian 11 Arm64", "arm64", "deb", "no-fips"), - ("debian-12", "Debian 12", "x86_64", "deb", "no-fips"), - ("debian-12-arm64", "Debian 12 Arm64", "arm64", "deb", "no-fips"), - ("photonos-4", "Photon OS 4", "x86_64", "rpm", "fips"), - ("photonos-4-arm64", "Photon OS 4 Arm64", "arm64", "rpm", "fips"), - ("photonos-5", "Photon OS 5", "x86_64", "rpm", "fips"), - ("photonos-5-arm64", "Photon OS 5 Arm64", "arm64", "rpm", "fips"), - ("ubuntu-20.04", "Ubuntu 20.04", "x86_64", "deb", "no-fips"), - ("ubuntu-20.04-arm64", "Ubuntu 20.04 Arm64", "arm64", "deb", "no-fips"), - ("ubuntu-22.04", "Ubuntu 22.04", "x86_64", "deb", "no-fips"), - ("ubuntu-22.04-arm64", "Ubuntu 22.04 Arm64", "arm64", "deb", "no-fips"), - ], - "macos": [ - ("macos-12", "macOS 12", "x86_64"), - ("macos-13", "macOS 13", "x86_64"), - ("macos-13-xlarge", "macOS 13 Arm64", "arm64"), - ], - "windows": [ - ("windows-2016", "Windows 2016", "amd64"), - ("windows-2019", "Windows 2019", "amd64"), - ("windows-2022", "Windows 2022", "amd64"), - ], - } + test_salt_pkg_listing = PlatformDefinitions( + { + "linux": [ + Linux( + slug="almalinux-8", + display_name="Alma Linux 8", + arch="x86_64", + pkg_type="rpm", + ), + Linux( + slug="almalinux-8-arm64", + display_name="Alma Linux 8 Arm64", + arch="arm64", + pkg_type="rpm", + ), + Linux( + slug="almalinux-9", + display_name="Alma Linux 9", + arch="x86_64", + pkg_type="rpm", + ), + Linux( + slug="almalinux-9-arm64", + display_name="Alma 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="centos-7", + display_name="CentOS 7", + arch="x86_64", + pkg_type="rpm", + ), + Linux( + slug="debian-10", + display_name="Debian 10", + arch="x86_64", + pkg_type="deb", + ), + 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", + 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", + 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", + ), + ], + "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", + ), + ], + } + ) build_ci_deps_listing = { "linux": [ @@ -187,17 +405,19 @@ def generate_workflows(ctx: Context): ], "macos": [ ("x86_64", "macos-12"), - ("arm64", "macos-13-xlarge"), + ("arm64", "macos-13-arm64"), ], "windows": [ ("amd64", "windows-2022"), ], } - test_salt_pkg_downloads_listing: dict[str, list[tuple[str, str, str]]] = { - "linux": [], - "macos": [], - "windows": [], - } + test_salt_pkg_downloads_listing = PlatformDefinitions( + { + "linux": [], + "macos": [], + "windows": [], + } + ) rpm_slugs = ( "almalinux", "amazonlinux", @@ -220,23 +440,62 @@ def generate_workflows(ctx: Context): if slug.startswith(rpm_slugs) and arch == "arm64": # While we maintain backwards compatible urls test_salt_pkg_downloads_listing["linux"].append( - (slug, "aarch64", "package") + Linux( + slug=slug, + arch="aarch64", + pkg_type="package", + ) ) - test_salt_pkg_downloads_listing["linux"].append((slug, arch, "package")) + test_salt_pkg_downloads_listing["linux"].append( + Linux( + slug=slug, + arch=arch, + pkg_type="package", + ) + ) if slug.startswith("ubuntu-22"): - test_salt_pkg_downloads_listing["linux"].append((slug, arch, "onedir")) - for slug, display_name, arch in test_salt_listing["macos"]: - test_salt_pkg_downloads_listing["macos"].append((slug, arch, "package")) - for slug, display_name, arch in test_salt_listing["macos"][-1:]: - test_salt_pkg_downloads_listing["macos"].append((slug, arch, "onedir")) - for slug, display_name, arch in test_salt_listing["windows"][-1:]: + test_salt_pkg_downloads_listing["linux"].append( + Linux( + slug=slug, + arch=arch, + pkg_type="onedir", + ) + ) + for mac in test_salt_listing["macos"]: + test_salt_pkg_downloads_listing["macos"].append( + MacOS( + slug=mac.slug, + arch=mac.arch, + display_name=mac.display_name, + pkg_type="package", + runner=mac.runner, + ) + ) + for mac in test_salt_listing["macos"][-1:]: + test_salt_pkg_downloads_listing["macos"].append( + MacOS( + slug=mac.slug, + arch=mac.arch, + display_name=mac.display_name, + pkg_type="onedir", + runner=mac.runner, + ) + ) + for win in test_salt_listing["windows"][-1:]: for pkg_type in ("nsis", "msi", "onedir"): - test_salt_pkg_downloads_listing["windows"].append((slug, arch, pkg_type)) + test_salt_pkg_downloads_listing["windows"].append( + Windows( + slug=win.slug, + arch=win.arch, + display_name=win.display_name, + pkg_type=pkg_type, + ) + ) - test_salt_pkg_downloads_needs_slugs = set() - for platform in test_salt_pkg_downloads_listing: - for _, arch, _ in test_salt_pkg_downloads_listing[platform]: - test_salt_pkg_downloads_needs_slugs.add("build-ci-deps") + test_salt_pkg_downloads_needs_slugs = {"build-ci-deps"} + # for platform in test_salt_pkg_downloads_listing: + # for _, arch, _ in test_salt_pkg_downloads_listing[platform]: + # test_salt_pkg_downloads_needs_slugs.add("build-ci-deps") build_rpms_listing = [] rpm_os_versions: dict[str, list[str]] = { diff --git a/tools/utils/__init__.py b/tools/utils/__init__.py index 3cac1a88876..3635c82d05b 100644 --- a/tools/utils/__init__.py +++ b/tools/utils/__init__.py @@ -10,6 +10,7 @@ import sys from enum import IntEnum from functools import cache +import attr import packaging.version import yaml from ptscripts import Context @@ -37,6 +38,36 @@ class ExitCode(IntEnum): SOFT_FAIL = 2 +@attr.s(frozen=True, slots=True) +class OS: + platform: str = attr.ib() + slug: str = attr.ib() + display_name: str = attr.ib(default=None) + arch: str = attr.ib(default=None) + pkg_type: str = attr.ib(default=None) + + +@attr.s(frozen=True, slots=True) +class Linux(OS): + platform: str = attr.ib(default="linux") + fips: bool = attr.ib(default=False) + + +@attr.s(frozen=True, slots=True) +class MacOS(OS): + runner: str = attr.ib() + platform: str = attr.ib(default="macos") + + @runner.default + def _default_runner(self): + return self.slug + + +@attr.s(frozen=True, slots=True) +class Windows(OS): + platform: str = attr.ib(default="windows") + + def create_progress_bar(file_progress: bool = False, **kwargs): if file_progress: return Progress( From 7c5125a8e3760426992ca56b8ed3f9fe6af130fe Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 27 Mar 2024 16:50:05 +0000 Subject: [PATCH 27/32] Add what OS'es run tests as a step summary --- .github/workflows/ci.yml | 100 +++++++++--------- .../templates/test-salt-pkg.yml.jinja | 6 +- .../workflows/templates/test-salt.yml.jinja | 6 +- tools/ci.py | 65 ++++++++++-- 4 files changed, 113 insertions(+), 64 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0b5b9a5f8bc..4765edb40d5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -491,7 +491,7 @@ jobs: almalinux-8-pkg-tests: name: Alma Linux 8 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-8"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-8') }} needs: - prepare-workflow - build-pkgs-onedir @@ -512,7 +512,7 @@ jobs: almalinux-8-arm64-pkg-tests: name: Alma Linux 8 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-8-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-8-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -554,7 +554,7 @@ jobs: almalinux-9-arm64-pkg-tests: name: Alma Linux 9 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-9-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-9-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -575,7 +575,7 @@ jobs: 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('["all", "amazonlinux-2"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2') }} needs: - prepare-workflow - build-pkgs-onedir @@ -596,7 +596,7 @@ jobs: 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('["all", "amazonlinux-2-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -617,7 +617,7 @@ jobs: 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('["all", "amazonlinux-2023"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2023') }} needs: - prepare-workflow - build-pkgs-onedir @@ -659,7 +659,7 @@ jobs: centos-7-pkg-tests: name: CentOS 7 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "centos-7"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'centos-7') }} needs: - prepare-workflow - build-pkgs-onedir @@ -680,7 +680,7 @@ jobs: debian-10-pkg-tests: name: Debian 10 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-10"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-10') }} needs: - prepare-workflow - build-pkgs-onedir @@ -701,7 +701,7 @@ jobs: 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('["all", "debian-11"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-11') }} needs: - prepare-workflow - build-pkgs-onedir @@ -722,7 +722,7 @@ jobs: 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('["all", "debian-11-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-11-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -743,7 +743,7 @@ jobs: 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('["all", "debian-12"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-12') }} needs: - prepare-workflow - build-pkgs-onedir @@ -764,7 +764,7 @@ jobs: 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('["all", "debian-12-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-12-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -785,7 +785,7 @@ jobs: 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('["all", "photonos-4"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-4') }} needs: - prepare-workflow - build-pkgs-onedir @@ -807,7 +807,7 @@ jobs: 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('["all", "photonos-4-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-4-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -829,7 +829,7 @@ jobs: 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('["all", "photonos-5"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-5') }} needs: - prepare-workflow - build-pkgs-onedir @@ -851,7 +851,7 @@ jobs: 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'] && contains(fromJSON('["all", "photonos-5-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-5-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -873,7 +873,7 @@ jobs: 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('["all", "ubuntu-20.04"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'ubuntu-20.04') }} needs: - prepare-workflow - build-pkgs-onedir @@ -894,7 +894,7 @@ jobs: 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('["all", "ubuntu-20.04-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'ubuntu-20.04-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -915,7 +915,7 @@ jobs: 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('["all", "ubuntu-22.04"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'ubuntu-22.04') }} needs: - prepare-workflow - build-pkgs-onedir @@ -957,7 +957,7 @@ jobs: 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'] && contains(fromJSON('["all", "macos-12"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'macos-12') }} needs: - prepare-workflow - build-pkgs-onedir @@ -979,7 +979,7 @@ jobs: 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('["all", "macos-13"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'macos-13') }} needs: - prepare-workflow - build-pkgs-onedir @@ -1023,7 +1023,7 @@ jobs: 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('["all", "windows-2016"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'windows-2016') }} needs: - prepare-workflow - build-pkgs-onedir @@ -1044,7 +1044,7 @@ jobs: 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('["all", "windows-2016"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'windows-2016') }} needs: - prepare-workflow - build-pkgs-onedir @@ -1065,7 +1065,7 @@ jobs: 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('["all", "windows-2019"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'windows-2019') }} needs: - prepare-workflow - build-pkgs-onedir @@ -1086,7 +1086,7 @@ jobs: 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('["all", "windows-2019"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'windows-2019') }} needs: - prepare-workflow - build-pkgs-onedir @@ -1149,7 +1149,7 @@ jobs: windows-2016: name: Windows 2016 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "windows-2016"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'windows-2016') }} needs: - prepare-workflow - build-ci-deps @@ -1170,7 +1170,7 @@ jobs: windows-2019: name: Windows 2019 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "windows-2019"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'windows-2019') }} needs: - prepare-workflow - build-ci-deps @@ -1212,7 +1212,7 @@ jobs: macos-12: name: macOS 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["all", "macos-12"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'macos-12') }} needs: - prepare-workflow - build-ci-deps @@ -1234,7 +1234,7 @@ jobs: macos-13: name: macOS 13 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(fromJSON('["all", "macos-13"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'macos-13') }} needs: - prepare-workflow - build-ci-deps @@ -1278,7 +1278,7 @@ jobs: almalinux-8: name: Alma Linux 8 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-8"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-8') }} needs: - prepare-workflow - build-ci-deps @@ -1299,7 +1299,7 @@ jobs: almalinux-8-arm64: name: Alma Linux 8 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-8-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-8-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1341,7 +1341,7 @@ jobs: almalinux-9-arm64: name: Alma Linux 9 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "almalinux-9-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-9-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1362,7 +1362,7 @@ jobs: 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('["all", "amazonlinux-2"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2') }} needs: - prepare-workflow - build-ci-deps @@ -1383,7 +1383,7 @@ jobs: 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('["all", "amazonlinux-2-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1404,7 +1404,7 @@ jobs: 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('["all", "amazonlinux-2023"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2023') }} needs: - prepare-workflow - build-ci-deps @@ -1467,7 +1467,7 @@ jobs: centos-7: name: CentOS 7 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "centos-7"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'centos-7') }} needs: - prepare-workflow - build-ci-deps @@ -1488,7 +1488,7 @@ jobs: debian-10: name: Debian 10 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-10"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-10') }} needs: - prepare-workflow - build-ci-deps @@ -1509,7 +1509,7 @@ jobs: debian-11: name: Debian 11 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-11"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-11') }} needs: - prepare-workflow - build-ci-deps @@ -1530,7 +1530,7 @@ jobs: 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('["all", "debian-11-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-11-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1551,7 +1551,7 @@ jobs: debian-12: name: Debian 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "debian-12"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-12') }} needs: - prepare-workflow - build-ci-deps @@ -1572,7 +1572,7 @@ jobs: 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('["all", "debian-12-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-12-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1593,7 +1593,7 @@ jobs: fedora-39: name: Fedora 39 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "fedora-39"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'fedora-39') }} needs: - prepare-workflow - build-ci-deps @@ -1614,7 +1614,7 @@ jobs: opensuse-15: name: Opensuse 15 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON('["all", "opensuse-15"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'opensuse-15') }} needs: - prepare-workflow - build-ci-deps @@ -1635,7 +1635,7 @@ jobs: 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('["all", "photonos-4"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-4') }} needs: - prepare-workflow - build-ci-deps @@ -1657,7 +1657,7 @@ jobs: 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('["all", "photonos-4-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-4-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1679,7 +1679,7 @@ jobs: 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('["all", "photonos-5"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-5') }} needs: - prepare-workflow - build-ci-deps @@ -1701,7 +1701,7 @@ jobs: 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'] && contains(fromJSON('["all", "photonos-5-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-5-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1723,7 +1723,7 @@ jobs: 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('["all", "ubuntu-20.04"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'ubuntu-20.04') }} needs: - prepare-workflow - build-ci-deps @@ -1744,7 +1744,7 @@ jobs: 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('["all", "ubuntu-20.04-arm64"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'ubuntu-20.04-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1765,7 +1765,7 @@ jobs: 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('["all", "ubuntu-22.04"]'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'ubuntu-22.04') }} needs: - prepare-workflow - build-ci-deps diff --git a/.github/workflows/templates/test-salt-pkg.yml.jinja b/.github/workflows/templates/test-salt-pkg.yml.jinja index d42155e552f..971ebadf51d 100644 --- a/.github/workflows/templates/test-salt-pkg.yml.jinja +++ b/.github/workflows/templates/test-salt-pkg.yml.jinja @@ -7,7 +7,7 @@ <%- 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('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} <%- endif %> needs: - prepare-workflow @@ -43,7 +43,7 @@ <%- 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('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} <%- endif %> needs: - prepare-workflow @@ -76,7 +76,7 @@ <%- 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('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} <%- endif %> needs: - prepare-workflow diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index c3ea4eee146..65583ec9f72 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -12,7 +12,7 @@ <%- 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('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} <%- endif %> needs: - prepare-workflow @@ -43,7 +43,7 @@ <%- 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('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} <%- endif %> needs: - prepare-workflow @@ -74,7 +74,7 @@ <%- 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('<{ os.os_labels_json() }>'), needs.prepare-workflow.outputs.os-labels) }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} <%- endif %> needs: - prepare-workflow diff --git a/tools/ci.py b/tools/ci.py index ed1c0416630..e470fd666d0 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -949,18 +949,39 @@ def get_pr_test_labels( pr = gh_event["pull_request"]["number"] labels = _get_pr_test_labels_from_event_payload(gh_event) - os_labels = [] + shared_context = tools.utils.get_cicd_shared_context() + mandatory_os_slugs = set(shared_context["mandatory_os_slugs"]) + available = set(tools.utils.get_golden_images()) + # Add MacOS provided by GitHub + available.update({"macos-12", "macos-13", "macos-13-arm64"}) + # Remove mandatory OS'ss + available.difference_update(mandatory_os_slugs) + select_all = set(available) + selected = set() test_labels = [] if labels: ctx.info(f"Test labels for pull-request #{pr} on {repository}:") for name, description in sorted(labels): ctx.info(f" * [yellow]{name}[/yellow]: {description}") - test_labels.append(name) if name.startswith("test:os:"): - os_labels.append(name.split("test:os:", 1)[-1]) + slug = name.split("test:os:", 1)[-1] + if slug not in available and name != "test:os:all": + ctx.warn( + f"The '{slug}' slug exists as a label but not as an available OS." + ) + selected.add(slug) + if slug != "all": + available.remove(slug) + continue + test_labels.append(name) + else: ctx.info(f"No test labels for pull-request #{pr} on {repository}") + if "all" in selected: + selected = select_all + available.clear() + github_output = os.environ.get("GITHUB_OUTPUT") if github_output is None: ctx.exit(0) @@ -970,14 +991,42 @@ def get_pr_test_labels( ctx.info("Writing 'labels' to the github outputs file...") ctx.info("Test Labels:") - for label in sorted(test_labels): - ctx.info(f" * [yellow]{label}[/yellow]") + if not test_labels: + ctx.info(" * None") + else: + for label in sorted(test_labels): + ctx.info(f" * [yellow]{label}[/yellow]") ctx.info("* OS Labels:") - for slug in sorted(selected): - ctx.info(f" * [yellow]{slug}[/yellow]") + if not selected: + ctx.info(" * None") + else: + for slug in sorted(selected): + ctx.info(f" * [yellow]{slug}[/yellow]") with open(github_output, "a", encoding="utf-8") as wfh: - wfh.write(f"os-labels={json.dumps([label for label in os_labels])}\n") + wfh.write(f"os-labels={json.dumps([label for label in selected])}\n") wfh.write(f"test-labels={json.dumps([label for label in test_labels])}\n") + + 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("Mandatory OS Test Runs:\n") + for slug in sorted(mandatory_os_slugs): + wfh.write(f"* `{slug}`\n") + + wfh.write("\nOptional OS Test Runs(selected by label):\n") + if not selected: + wfh.write("* None\n") + else: + for slug in sorted(selected): + wfh.write(f"* `{slug}`\n") + + wfh.write("\nSkipped OS Tests Runs(NOT selected by label):\n") + if not available: + wfh.write("* None\n") + else: + for slug in sorted(available): + wfh.write(f"* `{slug}`\n") + ctx.exit(0) From b62203973cad900e51885aab3ffcaef40f514b04 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 27 Mar 2024 09:18:23 +0000 Subject: [PATCH 28/32] Always print out the list of jobs to run --- .github/workflows/ci.yml | 6 +----- .github/workflows/nightly.yml | 6 +----- .github/workflows/scheduled.yml | 6 +----- .github/workflows/staging.yml | 6 +----- .github/workflows/templates/layout.yml.jinja | 6 +----- tools/ci.py | 7 ++++++- 6 files changed, 11 insertions(+), 26 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4765edb40d5..05f3b003960 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -202,15 +202,11 @@ jobs: run: | echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs + - name: Define Jobs To Run id: define-jobs run: | tools ci define-jobs ${{ github.event_name }} changed-files.json - - name: Check Defined Jobs - run: | - echo '${{ steps.define-jobs.outputs.jobs }}' | jq -C '.' - - name: Get Salt Releases id: get-salt-releases env: diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 1ff3ccb7db5..2055c3cf41f 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -246,15 +246,11 @@ jobs: run: | echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs + - name: Define Jobs To Run id: define-jobs run: | tools ci define-jobs${{ inputs.skip-salt-test-suite && ' --skip-tests' || '' }}${{ inputs.skip-salt-pkg-test-suite && ' --skip-pkg-tests' || '' }} ${{ github.event_name }} changed-files.json - - name: Check Defined Jobs - run: | - echo '${{ steps.define-jobs.outputs.jobs }}' | jq -C '.' - - name: Get Salt Releases id: get-salt-releases env: diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 524ffc4613b..584bdc3739e 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -236,15 +236,11 @@ jobs: run: | echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs + - name: Define Jobs To Run id: define-jobs run: | tools ci define-jobs ${{ github.event_name }} changed-files.json - - name: Check Defined Jobs - run: | - echo '${{ steps.define-jobs.outputs.jobs }}' | jq -C '.' - - name: Get Salt Releases id: get-salt-releases env: diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 3812b70ea9e..bf66b82a99f 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -241,15 +241,11 @@ jobs: run: | echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs + - name: Define Jobs To Run id: define-jobs run: | tools ci define-jobs${{ 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' || '' }} ${{ github.event_name }} changed-files.json - - name: Check Defined Jobs - run: | - echo '${{ steps.define-jobs.outputs.jobs }}' | jq -C '.' - - name: Get Salt Releases id: get-salt-releases env: diff --git a/.github/workflows/templates/layout.yml.jinja b/.github/workflows/templates/layout.yml.jinja index 211828c4386..5bc899f9902 100644 --- a/.github/workflows/templates/layout.yml.jinja +++ b/.github/workflows/templates/layout.yml.jinja @@ -264,17 +264,13 @@ jobs: run: | echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs + - name: Define Jobs To Run id: define-jobs run: | tools ci define-jobs<{ prepare_workflow_skip_test_suite }><{ prepare_workflow_skip_pkg_test_suite }><{ prepare_workflow_skip_pkg_download_test_suite }> ${{ github.event_name }} changed-files.json - - name: Check Defined Jobs - run: | - echo '${{ steps.define-jobs.outputs.jobs }}' | jq -C '.' - - name: Get Salt Releases id: get-salt-releases env: diff --git a/tools/ci.py b/tools/ci.py index e470fd666d0..c9e516f8bd8 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -311,6 +311,11 @@ def define_jobs( if event_name != "pull_request": # In this case, all defined jobs should run + 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") + ctx.info("Writing 'jobs' to the github outputs file") with open(github_output, "a", encoding="utf-8") as wfh: wfh.write(f"jobs={json.dumps(jobs)}\n") @@ -422,7 +427,7 @@ def define_jobs( 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") + wfh.write(f" - `{name}`: {value}\n") ctx.info("Writing 'jobs' to the github outputs file") with open(github_output, "a", encoding="utf-8") as wfh: From fd82bcab9cb29b577ec39eb477988e9b2e8234f3 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 27 Mar 2024 09:21:54 +0000 Subject: [PATCH 29/32] Always print out the defined testrun --- .github/workflows/ci.yml | 4 ---- .github/workflows/nightly.yml | 4 ---- .github/workflows/scheduled.yml | 4 ---- .github/workflows/staging.yml | 4 ---- .github/workflows/templates/layout.yml.jinja | 4 ---- tools/ci.py | 2 +- 6 files changed, 1 insertion(+), 21 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 05f3b003960..0c62780cdcf 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -226,10 +226,6 @@ jobs: 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: | diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 2055c3cf41f..2517b9bcb3e 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -270,10 +270,6 @@ jobs: 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: | diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 584bdc3739e..012a99b8d00 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -260,10 +260,6 @@ jobs: 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: | diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index bf66b82a99f..584cd06797c 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -265,10 +265,6 @@ jobs: 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: | diff --git a/.github/workflows/templates/layout.yml.jinja b/.github/workflows/templates/layout.yml.jinja index 5bc899f9902..fd738b7b4a4 100644 --- a/.github/workflows/templates/layout.yml.jinja +++ b/.github/workflows/templates/layout.yml.jinja @@ -290,10 +290,6 @@ jobs: 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: | diff --git a/tools/ci.py b/tools/ci.py index c9e516f8bd8..f4be8586340 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -626,7 +626,7 @@ def define_testrun(ctx: Context, event_name: str, changed_files: pathlib.Path): wfh.write(f"{path}\n") wfh.write("\n\n") - ctx.info("Writing 'testrun' to the github outputs file") + ctx.info("Writing 'testrun' to the github outputs file:\n", testrun) with open(github_output, "a", encoding="utf-8") as wfh: wfh.write(f"testrun={json.dumps(testrun)}\n") From 895b761592ef187de6f2225b42ddc2e86e01f6cd Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 27 Mar 2024 09:24:35 +0000 Subject: [PATCH 30/32] Always print the collected runners --- .github/workflows/ci.yml | 4 ---- .github/workflows/nightly.yml | 4 ---- .github/workflows/scheduled.yml | 4 ---- .github/workflows/staging.yml | 4 ---- .github/workflows/templates/layout.yml.jinja | 4 ---- tools/ci.py | 8 ++++---- 6 files changed, 4 insertions(+), 24 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c62780cdcf..55b612aa9ff 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -198,10 +198,6 @@ jobs: run: | tools ci runner-types ${{ github.event_name }} - - name: Check Defined Runners - run: | - echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs To Run id: define-jobs run: | diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 2517b9bcb3e..67b658a81cb 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -242,10 +242,6 @@ jobs: run: | tools ci runner-types ${{ github.event_name }} - - name: Check Defined Runners - run: | - echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs To Run id: define-jobs run: | diff --git a/.github/workflows/scheduled.yml b/.github/workflows/scheduled.yml index 012a99b8d00..e92b3eecc57 100644 --- a/.github/workflows/scheduled.yml +++ b/.github/workflows/scheduled.yml @@ -232,10 +232,6 @@ jobs: run: | tools ci runner-types ${{ github.event_name }} - - name: Check Defined Runners - run: | - echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs To Run id: define-jobs run: | diff --git a/.github/workflows/staging.yml b/.github/workflows/staging.yml index 584cd06797c..d3ed1920952 100644 --- a/.github/workflows/staging.yml +++ b/.github/workflows/staging.yml @@ -237,10 +237,6 @@ jobs: run: | tools ci runner-types ${{ github.event_name }} - - name: Check Defined Runners - run: | - echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs To Run id: define-jobs run: | diff --git a/.github/workflows/templates/layout.yml.jinja b/.github/workflows/templates/layout.yml.jinja index fd738b7b4a4..244877ec68b 100644 --- a/.github/workflows/templates/layout.yml.jinja +++ b/.github/workflows/templates/layout.yml.jinja @@ -260,10 +260,6 @@ jobs: run: | tools ci runner-types ${{ github.event_name }} - - name: Check Defined Runners - run: | - echo '${{ steps.runner-types.outputs.runners }}' | jq -C '.' - - name: Define Jobs To Run id: define-jobs run: | diff --git a/tools/ci.py b/tools/ci.py index f4be8586340..1f0ca25f810 100644 --- a/tools/ci.py +++ b/tools/ci.py @@ -202,7 +202,7 @@ def runner_types(ctx: Context, event_name: str): # 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") + 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) @@ -210,7 +210,7 @@ def runner_types(ctx: Context, event_name: str): # 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") + 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) @@ -224,7 +224,7 @@ def runner_types(ctx: Context, event_name: str): # 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") + 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) @@ -232,7 +232,7 @@ def runner_types(ctx: Context, event_name: str): # 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") + 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) From 027d95a3bca688bc3ee488e5e1f06158cccbcc49 Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Wed, 27 Mar 2024 22:54:39 +0000 Subject: [PATCH 31/32] Fix cache prefixes --- .github/workflows/build-deps-onedir.yml | 6 +++--- .github/workflows/build-salt-onedir.yml | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/build-deps-onedir.yml b/.github/workflows/build-deps-onedir.yml index 8a13c7e3777..df4d699a87c 100644 --- a/.github/workflows/build-deps-onedir.yml +++ b/.github/workflows/build-deps-onedir.yml @@ -65,7 +65,7 @@ jobs: - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: - cache-prefix: ${{ inputs.cache-seed }}-build-deps-linux-${{ matrix.arch }} + cache-prefix: ${{ inputs.cache-seed }}|build-deps|linux|${{ matrix.arch }} - name: Setup Relenv id: setup-relenv @@ -116,7 +116,7 @@ jobs: - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: - cache-prefix: ${{ inputs.cache-seed }}-build-deps-macos + cache-prefix: ${{ inputs.cache-seed }}|build-deps|macos - name: Setup Relenv id: setup-relenv @@ -166,7 +166,7 @@ jobs: - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: - cache-prefix: ${{ inputs.cache-seed }}-build-deps-windows-${{ matrix.arch }} + cache-prefix: ${{ inputs.cache-seed }}|build-deps|windows|${{ matrix.arch }} - name: Setup Relenv id: setup-relenv diff --git a/.github/workflows/build-salt-onedir.yml b/.github/workflows/build-salt-onedir.yml index 7913860cf7d..ff4b7a3857f 100644 --- a/.github/workflows/build-salt-onedir.yml +++ b/.github/workflows/build-salt-onedir.yml @@ -65,7 +65,7 @@ jobs: - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: - cache-prefix: ${{ inputs.cache-seed }}-build-salt-onedir-windows + cache-prefix: ${{ inputs.cache-seed }}|build-salt-onedir|linux - name: Setup Salt Version id: setup-salt-version @@ -130,7 +130,7 @@ jobs: - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: - cache-prefix: ${{ inputs.cache-seed }}-build-salt-onedir-macos + cache-prefix: ${{ inputs.cache-seed }}|build-salt-onedir|macos - name: Setup Salt Version id: setup-salt-version @@ -185,7 +185,7 @@ jobs: - name: Setup Python Tools Scripts uses: ./.github/actions/setup-python-tools-scripts with: - cache-prefix: ${{ inputs.cache-seed }}-build-salt-onedir-macos + cache-prefix: ${{ inputs.cache-seed }}|build-salt-onedir|windows - name: Setup Salt Version id: setup-salt-version From 4eccba4f2dcd9c8b2972dddbb49e433fb608a65c Mon Sep 17 00:00:00 2001 From: Pedro Algarvio Date: Thu, 28 Mar 2024 11:27:48 +0000 Subject: [PATCH 32/32] Check against an array, not a string --- .github/workflows/ci.yml | 100 +++++++++--------- .../templates/test-salt-pkg.yml.jinja | 6 +- .../workflows/templates/test-salt.yml.jinja | 6 +- 3 files changed, 56 insertions(+), 56 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 55b612aa9ff..8b86865fd21 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -479,7 +479,7 @@ jobs: almalinux-8-pkg-tests: name: Alma Linux 8 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-8') }} + 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), 'almalinux-8') }} needs: - prepare-workflow - build-pkgs-onedir @@ -500,7 +500,7 @@ jobs: almalinux-8-arm64-pkg-tests: name: Alma Linux 8 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-8-arm64') }} + 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), 'almalinux-8-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -542,7 +542,7 @@ jobs: almalinux-9-arm64-pkg-tests: name: Alma Linux 9 Arm64 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-9-arm64') }} + 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), 'almalinux-9-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -563,7 +563,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2') }} + 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 @@ -584,7 +584,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2-arm64') }} + 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 @@ -605,7 +605,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2023') }} + 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 @@ -647,7 +647,7 @@ jobs: centos-7-pkg-tests: name: CentOS 7 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'centos-7') }} + 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), 'centos-7') }} needs: - prepare-workflow - build-pkgs-onedir @@ -668,7 +668,7 @@ jobs: debian-10-pkg-tests: name: Debian 10 Package Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test-pkg'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-10') }} + 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-10') }} needs: - prepare-workflow - build-pkgs-onedir @@ -689,7 +689,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'debian-11') }} + 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 @@ -710,7 +710,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'debian-11-arm64') }} + 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 @@ -731,7 +731,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'debian-12') }} + 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 @@ -752,7 +752,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'debian-12-arm64') }} + 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 @@ -773,7 +773,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'photonos-4') }} + 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 @@ -795,7 +795,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'photonos-4-arm64') }} + 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 @@ -817,7 +817,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'photonos-5') }} + 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 @@ -839,7 +839,7 @@ jobs: 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'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-5-arm64') }} + 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-arm64') }} needs: - prepare-workflow - build-pkgs-onedir @@ -861,7 +861,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'ubuntu-20.04') }} + 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 @@ -882,7 +882,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'ubuntu-20.04-arm64') }} + 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 @@ -903,7 +903,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'ubuntu-22.04') }} + 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 @@ -945,7 +945,7 @@ jobs: 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'] && contains(needs.prepare-workflow.outputs.os-labels, 'macos-12') }} + 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-12') }} needs: - prepare-workflow - build-pkgs-onedir @@ -967,7 +967,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'macos-13') }} + 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 @@ -1011,7 +1011,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'windows-2016') }} + 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 @@ -1032,7 +1032,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'windows-2016') }} + 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 @@ -1053,7 +1053,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'windows-2019') }} + 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 @@ -1074,7 +1074,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'windows-2019') }} + 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 @@ -1137,7 +1137,7 @@ jobs: windows-2016: name: Windows 2016 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'windows-2016') }} + 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 @@ -1158,7 +1158,7 @@ jobs: windows-2019: name: Windows 2019 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'windows-2019') }} + 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 @@ -1200,7 +1200,7 @@ jobs: macos-12: name: macOS 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'macos-12') }} + 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-12') }} needs: - prepare-workflow - build-ci-deps @@ -1222,7 +1222,7 @@ jobs: macos-13: name: macOS 13 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['github-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'macos-13') }} + 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 @@ -1266,7 +1266,7 @@ jobs: almalinux-8: name: Alma Linux 8 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-8') }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'almalinux-8') }} needs: - prepare-workflow - build-ci-deps @@ -1287,7 +1287,7 @@ jobs: almalinux-8-arm64: name: Alma Linux 8 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-8-arm64') }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'almalinux-8-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1329,7 +1329,7 @@ jobs: almalinux-9-arm64: name: Alma Linux 9 Arm64 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'almalinux-9-arm64') }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'almalinux-9-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1350,7 +1350,7 @@ jobs: amazonlinux-2: name: Amazon Linux 2 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2') }} + 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 @@ -1371,7 +1371,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2-arm64') }} + 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 @@ -1392,7 +1392,7 @@ jobs: amazonlinux-2023: name: Amazon Linux 2023 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'amazonlinux-2023') }} + 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 @@ -1455,7 +1455,7 @@ jobs: centos-7: name: CentOS 7 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'centos-7') }} + if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(fromJSON(needs.prepare-workflow.outputs.os-labels), 'centos-7') }} needs: - prepare-workflow - build-ci-deps @@ -1476,7 +1476,7 @@ jobs: debian-10: name: Debian 10 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-10') }} + 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-10') }} needs: - prepare-workflow - build-ci-deps @@ -1497,7 +1497,7 @@ jobs: debian-11: name: Debian 11 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-11') }} + 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 @@ -1518,7 +1518,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'debian-11-arm64') }} + 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 @@ -1539,7 +1539,7 @@ jobs: debian-12: name: Debian 12 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'debian-12') }} + 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 @@ -1560,7 +1560,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'debian-12-arm64') }} + 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 @@ -1581,7 +1581,7 @@ jobs: fedora-39: name: Fedora 39 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'fedora-39') }} + 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-39') }} needs: - prepare-workflow - build-ci-deps @@ -1602,7 +1602,7 @@ jobs: opensuse-15: name: Opensuse 15 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'opensuse-15') }} + 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 @@ -1623,7 +1623,7 @@ jobs: photonos-4: name: Photon OS 4 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-4') }} + 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 @@ -1645,7 +1645,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'photonos-4-arm64') }} + 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 @@ -1667,7 +1667,7 @@ jobs: photonos-5: name: Photon OS 5 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-5') }} + 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 @@ -1689,7 +1689,7 @@ jobs: 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'] && contains(needs.prepare-workflow.outputs.os-labels, 'photonos-5-arm64') }} + 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-arm64') }} needs: - prepare-workflow - build-ci-deps @@ -1711,7 +1711,7 @@ jobs: ubuntu-2004: name: Ubuntu 20.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'ubuntu-20.04') }} + 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 @@ -1732,7 +1732,7 @@ jobs: 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(needs.prepare-workflow.outputs.os-labels, 'ubuntu-20.04-arm64') }} + 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 @@ -1753,7 +1753,7 @@ jobs: ubuntu-2204: name: Ubuntu 22.04 Test - if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['test'] && fromJSON(needs.prepare-workflow.outputs.runners)['self-hosted'] && contains(needs.prepare-workflow.outputs.os-labels, 'ubuntu-22.04') }} + 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 diff --git a/.github/workflows/templates/test-salt-pkg.yml.jinja b/.github/workflows/templates/test-salt-pkg.yml.jinja index 971ebadf51d..1a34ad8e7fd 100644 --- a/.github/workflows/templates/test-salt-pkg.yml.jinja +++ b/.github/workflows/templates/test-salt-pkg.yml.jinja @@ -7,7 +7,7 @@ <%- 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(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} + 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 @@ -43,7 +43,7 @@ <%- 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(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} + 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 @@ -76,7 +76,7 @@ <%- 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(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} + 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 diff --git a/.github/workflows/templates/test-salt.yml.jinja b/.github/workflows/templates/test-salt.yml.jinja index 65583ec9f72..7e89bf57994 100644 --- a/.github/workflows/templates/test-salt.yml.jinja +++ b/.github/workflows/templates/test-salt.yml.jinja @@ -12,7 +12,7 @@ <%- 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(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} + 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 @@ -43,7 +43,7 @@ <%- 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(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} + 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 @@ -74,7 +74,7 @@ <%- 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(needs.prepare-workflow.outputs.os-labels, '<{ os.slug }>') }} + 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