Public repositores can use github's arm runners

This commit is contained in:
Daniel A. Wozniak 2025-01-20 18:00:49 -07:00 committed by Daniel Wozniak
parent b6a92f693d
commit ac8d40735e
15 changed files with 79 additions and 14 deletions

View file

@ -38,6 +38,11 @@ on:
required: true
type: string
description: Json job matrix config
linux_arm_runner:
required: false
default: ""
type: string
description: Json job matrix config
env:
@ -56,7 +61,7 @@ jobs:
name: Linux
if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }}
runs-on:
- ${{ matrix.arch == 'x86_64' && 'ubuntu-latest' || 'linux-arm64' }}
- ${{ matrix.arch == 'x86_64' && 'ubuntu-latest' || inputs.linux_arm_runner }}
env:
USE_S3_CACHE: 'false'
timeout-minutes: 90

View file

@ -24,6 +24,11 @@ on:
required: true
type: string
description: Json job matrix config
linux_arm_runner:
required: false
default: ""
type: string
description: Json job matrix config
env:
RELENV_DATA: "${{ github.workspace }}/.relenv"
@ -41,7 +46,7 @@ jobs:
name: Linux
if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }}
runs-on:
- ${{ matrix.arch == 'x86_64' && 'ubuntu-22.04' || 'linux-arm64' }}
- ${{ matrix.arch == 'x86_64' && 'ubuntu-22.04' || inputs.linux_arm_runner }}
strategy:
fail-fast: false
matrix:

View file

@ -40,6 +40,11 @@ on:
required: true
type: string
description: Json job matrix config
linux_arm_runner:
required: false
default: ""
type: string
description: Json job matrix config
env:
COLUMNS: 190
@ -54,7 +59,7 @@ jobs:
name: DEB
if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }}
runs-on:
- ${{ matrix.arch == 'x86_64' && 'ubuntu-22.04' || 'linux-arm64' }}
- ${{ matrix.arch == 'x86_64' && 'ubuntu-22.04' || inputs.linux_arm_runner }}
strategy:
fail-fast: false
matrix:

View file

@ -24,6 +24,11 @@ on:
type: string
required: true
description: Json config for build matrix
linux_arm_runner:
required: false
default: ""
type: string
description: Json job matrix config
env:
RELENV_DATA: "${{ github.workspace }}/.relenv"
@ -44,7 +49,7 @@ jobs:
env:
USE_S3_CACHE: 'false'
runs-on:
- ${{ matrix.arch == 'x86_64' && 'ubuntu-22.04' || 'linux-arm64' }}
- ${{ matrix.arch == 'x86_64' && 'ubuntu-22.04' || inputs.linux_arm_runner }}
strategy:
fail-fast: false
matrix:

View file

@ -420,6 +420,7 @@ jobs:
relenv-version: "0.18.0"
python-version: "3.10.15"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-salt-onedir:
name: Build Salt Onedir
@ -435,6 +436,7 @@ jobs:
relenv-version: "0.18.0"
python-version: "3.10.15"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-pkgs-onedir:
name: Build Packages
@ -450,6 +452,7 @@ jobs:
python-version: "3.10.15"
source: "onedir"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-ci-deps:
name: CI Deps
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] }}
@ -465,6 +468,7 @@ jobs:
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15
nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
test-packages:
name: Test Package
if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test-pkg'] }}
@ -500,6 +504,7 @@ jobs:
workflow-slug: ci
default-timeout: 180
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
combine-all-code-coverage:
name: Combine Code Coverage

View file

@ -474,6 +474,7 @@ jobs:
relenv-version: "0.18.0"
python-version: "3.10.15"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-salt-onedir:
name: Build Salt Onedir
@ -489,6 +490,7 @@ jobs:
relenv-version: "0.18.0"
python-version: "3.10.15"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-pkgs-onedir:
name: Build Packages
@ -504,6 +506,7 @@ jobs:
python-version: "3.10.15"
source: "onedir"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
environment: nightly
sign-macos-packages: false
sign-windows-packages: false
@ -523,6 +526,7 @@ jobs:
python-version: "3.10.15"
source: "src"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
environment: nightly
sign-macos-packages: false
sign-windows-packages: false
@ -542,6 +546,7 @@ jobs:
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15
nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
test-packages:
name: Test Package
if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test-pkg'] }}
@ -577,6 +582,7 @@ jobs:
workflow-slug: nightly
default-timeout: 360
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
set-pipeline-exit-status:
# This step is just so we can make github require this step, to pass checks

View file

@ -189,6 +189,7 @@ jobs:
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15
nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
backup:
name: Backup

View file

@ -459,6 +459,7 @@ jobs:
relenv-version: "0.18.0"
python-version: "3.10.15"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-salt-onedir:
name: Build Salt Onedir
@ -474,6 +475,7 @@ jobs:
relenv-version: "0.18.0"
python-version: "3.10.15"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-pkgs-onedir:
name: Build Packages
@ -489,6 +491,7 @@ jobs:
python-version: "3.10.15"
source: "onedir"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-ci-deps:
name: CI Deps
if: ${{ fromJSON(needs.prepare-workflow.outputs.jobs)['build-deps-ci'] }}
@ -504,6 +507,7 @@ jobs:
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15
nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
test-packages:
name: Test Package
if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test-pkg'] }}
@ -539,6 +543,7 @@ jobs:
workflow-slug: scheduled
default-timeout: 360
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
set-pipeline-exit-status:
# This step is just so we can make github require this step, to pass checks

View file

@ -460,6 +460,7 @@ jobs:
relenv-version: "0.18.0"
python-version: "3.10.15"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-salt-onedir:
name: Build Salt Onedir
@ -475,6 +476,7 @@ jobs:
relenv-version: "0.18.0"
python-version: "3.10.15"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
build-pkgs-onedir:
name: Build Packages
@ -490,6 +492,7 @@ jobs:
python-version: "3.10.15"
source: "onedir"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
environment: staging
sign-macos-packages: false
sign-windows-packages: ${{ inputs.sign-windows-packages }}
@ -509,6 +512,7 @@ jobs:
python-version: "3.10.15"
source: "src"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
environment: staging
sign-macos-packages: false
sign-windows-packages: ${{ inputs.sign-windows-packages }}
@ -528,6 +532,7 @@ jobs:
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|3.10.15
nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
test-packages:
name: Test Package
if: ${{ fromJSON(needs.prepare-workflow.outputs.config)['jobs']['test-pkg'] }}
@ -563,6 +568,7 @@ jobs:
workflow-slug: staging
default-timeout: 180
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
upload-release-artifacts:
name: Upload Release Artifacts

View file

@ -22,3 +22,4 @@
cache-prefix: ${{ needs.prepare-workflow.outputs.cache-seed }}|<{ python_version }>
nox-archive-hash: "${{ needs.prepare-workflow.outputs.nox-archive-hash }}"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}

View file

@ -23,6 +23,7 @@
python-version: "<{ python_version }>"
source: "<{ backend }>"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
<%- if gh_environment != "ci" %>
environment: <{ gh_environment }>
sign-macos-packages: false

View file

@ -250,6 +250,7 @@
relenv-version: "<{ relenv_version }>"
python-version: "<{ python_version }>"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
<%- endif %>
@ -271,6 +272,7 @@
relenv-version: "<{ relenv_version }>"
python-version: "<{ python_version }>"
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['build-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}
<%- endif %>

View file

@ -21,3 +21,4 @@
workflow-slug: <{ workflow_slug }>
default-timeout: <{ timeout_value }>
matrix: ${{ toJSON(fromJSON(needs.prepare-workflow.outputs.config)['test-matrix']) }}
linux_arm_runner: ${{ fromJSON(needs.prepare-workflow.outputs.config)['linux_arm_runner'] }}

View file

@ -53,7 +53,11 @@ on:
required: true
type: string
description: Json job matrix config
linux_arm_runner:
required: false
default: ""
type: string
description: Json job matrix config
env:
COLUMNS: 190
@ -70,7 +74,7 @@ jobs:
if: ${{ toJSON(fromJSON(inputs.matrix)['linux']) != '[]' }}
runs-on:
- ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || 'linux-arm64' }}
- ${{ matrix.arch == 'x86_64' && 'ubuntu-24.04' || inputs.linux_arm_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 }}

View file

@ -540,7 +540,7 @@ def define_testrun(ctx: Context, event_name: str, changed_files: pathlib.Path):
wfh.write(f"testrun={json.dumps(testrun)}\n")
def _build_matrix(os_kind):
def _build_matrix(os_kind, linux_arm_runner):
"""
Generate matrix for build ci/cd steps.
"""
@ -552,10 +552,7 @@ def _build_matrix(os_kind):
]
elif os_kind == "macos":
_matrix.append({"arch": "arm64"})
elif os_kind == "linux" and os.environ.get("LINUX_ARM_RUNNER", "0") not in (
"0",
"",
):
elif os_kind == "linux" and linux_arm_runner:
_matrix.append({"arch": "arm64"})
return _matrix
@ -1538,6 +1535,8 @@ def workflow_config(
full = False
gh_event_path = os.environ.get("GITHUB_EVENT_PATH") or None
gh_event = None
config: dict[str, Any] = {}
ctx.info(f"{'==== environment ====':^80s}")
ctx.info(f"{pprint.pformat(dict(os.environ))}")
ctx.info(f"{'==== end environment ====':^80s}")
@ -1548,6 +1547,7 @@ def workflow_config(
if gh_event_path is None:
labels = []
config["linux_arm_runner"] = ""
else:
try:
gh_event = json.loads(open(gh_event_path, encoding="utf-8").read())
@ -1564,6 +1564,17 @@ def workflow_config(
labels = []
ctx.warn("The 'pull_request' key was not found on the event payload.")
if gh_event["repository"]["private"]:
# Private repositories need arm runner configuration environment
# variable.
if os.environ.get("LINUX_ARM_RUNNER", "0") in ("0", ""):
config["linux_arm_runner"] = ""
else:
config["linux_arm_runner"] = os.environ["LINUX_ARM_RUNNER"]
else:
# Public repositories can use github's arm64 runners.
config["linux_arm_runner"] = "ubuntu-24.04-arm"
ctx.info(f"{'==== labels ====':^80s}")
ctx.info(f"{pprint.pformat(labels)}")
ctx.info(f"{'==== end labels ====':^80s}")
@ -1572,7 +1583,6 @@ def workflow_config(
ctx.info(f"{pprint.pformat(gh_event)}")
ctx.info(f"{'==== end github event ====':^80s}")
config: dict[str, Any] = {}
jobs = {
"lint": True,
"test": True,
@ -1598,7 +1608,8 @@ def workflow_config(
config["jobs"] = jobs
config["build-matrix"] = {
platform: _build_matrix(platform) for platform in platforms
platform: _build_matrix(platform, config["linux_arm_runner"])
for platform in platforms
}
ctx.info(f"{'==== build matrix ====':^80s}")
ctx.info(f"{pprint.pformat(config['build-matrix'])}")
@ -1644,7 +1655,9 @@ def workflow_config(
pkg_test_matrix: dict[str, list] = {_: [] for _ in platforms}
if os.environ.get("LINUX_ARM_RUNNER", "0") in ("0", ""):
if not config["linux_arm_runner"]:
# Filter out linux arm tests because we are on a private repository and
# no arm64 runner is defined.
TEST_SALT_LISTING["linux"] = list(
filter(lambda x: x.arch != "arm64", TEST_SALT_LISTING["linux"])
)