Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
65 commits
Select commit Hold shift + click to select a range
3067c25
tests: convert test_cc_rsyslog.py to pytest (#6622)
MoeSalah1999 Dec 19, 2025
07922ae
chore: add scheduled job for py3-fast (#6634)
holmanb Dec 19, 2025
0717357
chore: Remove multiple entries in spec file (#6599)
ani-sinha Jan 5, 2026
9813bb8
fix(distros/freebsd): set home_dir to /home (#6637)
svmhdvn Jan 5, 2026
85c4638
chore: use curl instead of wget (#6610)
AndreiCherniaev Jan 5, 2026
fad68ab
chore: enable type checking cloudinit/distros/__init__.py (#6646)
holmanb Jan 5, 2026
a19f958
chore: drop dscheck maas (#6638)
blackboxsw Jan 6, 2026
ec44db2
fix(azure): ensure ephemeral networking uses primary NIC (#6556)
cadejacobson Jan 6, 2026
70b8771
fix: don't traceback when using BSD date
TheRealFalcon Sep 11, 2025
1ae2027
test: ensure TMPDIR parents exist
TheRealFalcon Sep 11, 2025
3d7b545
fix: ensure timestamp timezone encoded correctly in status.py
TheRealFalcon Sep 11, 2025
c3bf207
test: ensure we don't actually rename ntp.conf in test
TheRealFalcon Sep 11, 2025
2024036
test: bring back fake tmpdir creation
TheRealFalcon Sep 11, 2025
45c7555
test: mock chown to account for distro grp differences
TheRealFalcon Sep 11, 2025
ec10d36
test: hardcode passlib usage in Azure test
TheRealFalcon Sep 11, 2025
528a712
test: add a socket fixtures and mocks
TheRealFalcon Sep 11, 2025
d8d5a47
test: ensure symlinks are resolved in certain tests
TheRealFalcon Sep 11, 2025
818a261
test: Replace 'echo -n' with 'printf'
TheRealFalcon Sep 11, 2025
4e45baa
fix: ensure mount type is used if passed
TheRealFalcon Sep 11, 2025
e346b51
test: use realpath for tmp directories
TheRealFalcon Sep 11, 2025
3139e94
test: skip Linux-specific test on non-Linux
TheRealFalcon Sep 11, 2025
b5080b9
test: Skip Azure openssl tests on non-Linux
TheRealFalcon Jan 5, 2026
e02b739
fix: Pass interface string to get_newest_lease() (#6648)
goldberl Jan 6, 2026
78da9db
ci: add Python 3.15
holmanb Jan 6, 2026
6880d34
ci: reword action and workflow names for clarity
holmanb Jan 6, 2026
7cc31f5
chore: rename workflow files for organization
holmanb Jan 6, 2026
4810cc6
ci: exercise TMPDIR now that it works (#6652)
holmanb Jan 6, 2026
974646e
feat(azure): add vm_id to KVP telemetry event keys (#6551)
peytonr18 Jan 6, 2026
7af9d0a
fix(ec2): check elastic NICs for metadata server first (#6651)
raineszm Jan 7, 2026
4495525
chore: type cloudinit/sources/__init__.py (#6647)
holmanb Jan 9, 2026
064019e
test: add gh workflow for tiobe TICS static analysis reporting (#6654)
blackboxsw Jan 9, 2026
6901be5
ci: quote workflow names to avoid invalid YAML (#6659)
blackboxsw Jan 9, 2026
9934bbe
ci: typo duplicated run declaration in tics workflow (#6661)
blackboxsw Jan 9, 2026
5803e84
docs: fix broken documentation links (#6660)
ayushigithub12 Jan 9, 2026
2d4519d
feat: support Tilaa cloud (#6658)
holmanb Jan 9, 2026
f8a7c8c
ci: fix cross-distro test failures, various maintenance (#6663)
holmanb Jan 9, 2026
fb44d8d
docs: fix broken external documentation links (#6664)
ayushigithub12 Jan 12, 2026
ac729ab
ci: add reviewdog workflow lint for github actions (#6662)
blackboxsw Jan 13, 2026
e7f970b
test: pytestified test_cc_growpart.py (#6625)
MoeSalah1999 Jan 13, 2026
5531de2
feat(lxd): add s390x virtio-ports detection for LXD (#6597)
blackboxsw Jan 15, 2026
3280318
ci: export python path to GITHUB_ENV from tox venv
blackboxsw Jan 13, 2026
54a58e6
ci: add actionlint.yml ignores
blackboxsw Jan 14, 2026
306d66c
ci: run and source pylint tox target used by TICS checkers
blackboxsw Jan 15, 2026
9e6151a
ci: retain system packages for TICS workflow due to virtualenv versio…
blackboxsw Jan 15, 2026
f065903
doc: document socket protocol change
holmanb Jan 17, 2026
d2bf883
fix(cloudstack): Improve domain-name DHCP lease lookup (Cloudstack) (…
CodeBleu Jan 20, 2026
0686791
fix: cloud-init clean --logs should not remove non-files (#6568)
blackboxsw Jan 23, 2026
d9834a3
fix: respect SSH key options for the root user (#6585)
sbraz Jan 23, 2026
b7b6256
chore(stages): enable type checking (#6672)
holmanb Jan 23, 2026
78f6f15
fix: migrate from ntp client package installed from ntp to ntpsec (#6…
blackboxsw Jan 23, 2026
feaf147
doc: clarify verbose language (#6688)
holmanb Jan 26, 2026
9c2faf8
feat(dhcp): enable --debug option for dhcpcd (#6693)
cjp256 Jan 29, 2026
8a52347
doc: clarify CLA check (#6692)
holmanb Jan 30, 2026
8c4c59a
ci: add shared workflow for lxd_container integration tests
blackboxsw Jan 27, 2026
4020383
docs: security company policy updates (#6677)
blackboxsw Jan 31, 2026
26c7d38
fix: datasource initialization order in stages (#6700)
holmanb Jan 31, 2026
567cfe8
ci: install missing distro-info-data dependency to test devel series …
blackboxsw Feb 2, 2026
580b21b
fix(azure): round duration field in FinishReportingEvent to four deci…
peytonr18 Feb 3, 2026
afd0c6c
chore: pin full SHA commits for all workflows (#6711)
blackboxsw Feb 3, 2026
72809f8
fix: DNS resolution performance regression during local stage (#6707)
drzee99 Feb 5, 2026
c8d3417
merge from upstream/main at 25.3-131-g72809f80
holmanb Feb 5, 2026
c53e64a
refresh patches against upstream/main
holmanb Feb 5, 2026
7bca40f
update changelog (new upstream snapshot)
holmanb Feb 5, 2026
63dea8a
new patch 0001-Revert-fix-DNS-resolution-performance-regression-dur.p…
holmanb Feb 5, 2026
29618cb
update changelog
holmanb Feb 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/actionlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
".github/workflows/**/weekly-tics.yml":
ignore:
# Ignore self-hosted runner labels we use as an organization
- "label (amd64|tiobe|noble) is unknown.+""


118 changes: 118 additions & 0 deletions .github/workflows/_integration_common.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
name: "Daily: Integration (reusable/manual)"

on:
workflow_dispatch:
inputs:
release:
required: true
type: choice
options:
- questing
- jammy
- noble
- resolute
platform:
required: true
type: choice
options:
- lxd_container
- lxd_vm
image_type:
type: choice
options:
- generic
- minimal
required: false
install_source:
required: false
type: string
filter_tests:
required: false
type: string
workflow_call:
inputs:
release:
required: true
type: string
platform:
required: true
type: string
image_type:
required: false
type: string
install_source:
required: false
type: string
filter_tests:
required: false
type: string

jobs:
lxc:
runs-on: ubuntu-latest

env:
CLOUD_INIT_PLATFORM: ${{ inputs.platform || 'lxd_container' }}
CLOUD_INIT_OS_IMAGE: ${{ inputs.release || 'questing' }}
CLOUD_INIT_OS_IMAGE_TYPE: ${{ inputs.image_type || 'generic' }}
CLOUD_INIT_CLOUD_INIT_SOURCE: ${{ inputs.install_source || 'ppa:cloud-init-dev/daily' }}
CLOUD_INIT_LOCAL_LOG_PATH: ${{ github.workspace }}/cloud_init_test_logs


steps:
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Setup LXD
uses: canonical/setup-lxd@8c6a87bfb56aa48f3fb9b830baa18562d8bfd4ee # v0.1.2
with:
channel: 6/stable
- name: Clean workspace
run: |
rm -rf ${{ github.workspace }}/cloud_init_test_logs/
- name: Setup pycloudlib
run: |
ssh-keygen -P "" -q -f ~/.ssh/id_rsa
echo "[lxd]" > /home/$USER/.config/pycloudlib.toml
- name: Install Dependencies
run: |
sudo DEBIAN_FRONTEND=noninteractive apt-get -qy update
sudo DEBIAN_FRONTEND=noninteractive apt-get -qy install tox distro-info-data
- name: Run integration Tests
run: |
tox -e integration-tests -- --junitxml="${{ github.workspace }}/reports/junit-report-${{ inputs.platform }}-${{ inputs.release }}.xml" --color=yes ${{ inputs.filter_tests || 'tests/integration_tests' }}
- name: Publish Test Report with Insights
if: always()
uses: ctrf-io/github-test-reporter@024bc4b64d997ca9da86833c6b9548c55c620e40 # v1.0.26
with:
report-path: '${{ github.workspace }}/reports/junit-report-${{ inputs.platform}}-${{ inputs.release }}.xml'
integrations-config: |
{
"junit-to-ctrf": {
"enabled": true,
"action": "convert",
"options": {
"output": "./reports/ctrf-report-${{ inputs.platform }}-${{ inputs.release }}-${{ inputs.image_type }}.json",
"toolname": "junit-to-ctrf",
"useSuiteName": false,
"env": {
"appName": "my-app"
}
}
}
}
summary-delta-report: true
insights-report: true
flaky-rate-report: true
slowest-report: true
upload-artifact: true
github-report: true
artifact-name: ctrf-report-${{ inputs.platform }}-${{inputs.release}}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Upload failure artifacts
if: failure()
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: failure-${{ github.job }}
path: ${{ github.workspace }}/cloud_init_test_logs/
retention-days: 2
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Lint Tests
name: Lint
on:
pull_request:
push:
Expand All @@ -20,14 +20,11 @@ jobs:
env: [ruff, mypy, pylint, black, isort]
name: Check ${{ matrix.env }}
runs-on: ubuntu-latest
env:
FORCE_COLOR: 1
steps:
- name: "Checkout #1"
uses: actions/checkout@v4

- name: "Checkout #2 (for tools/read-version)"
run: |
git fetch --unshallow
git remote add upstream https://git.launchpad.net/cloud-init
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Dependencies
run: |
Expand All @@ -48,10 +45,10 @@ jobs:
name: Check json format
runs-on: ubuntu-24.04
steps:
- name: "Checkout #1"
uses: actions/checkout@v4
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: "Test format"
- name: Test format
run: |
tools/check_json_format.sh cloudinit/config/schemas/schema-cloud-config-v1.json
tools/check_json_format.sh cloudinit/config/schemas/schema-network-config-v1.json
Expand All @@ -63,27 +60,22 @@ jobs:
name: Check docs
runs-on: ubuntu-24.04
steps:
- name: "Checkout #1"
uses: actions/checkout@v4

- name: "Checkout #2 (for tools/read-version)"
run: |
git fetch --unshallow
git remote add upstream https://git.launchpad.net/cloud-init
- name: "Install Python 3.11.9"
uses: actions/setup-python@v5
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install RTD Python Version
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: '3.11.9'
- name: "Install dependencies"
- name: Install dependencies
run: |
sudo DEBIAN_FRONTEND=noninteractive apt-get -qy update
sudo DEBIAN_FRONTEND=noninteractive apt-get -qy install tox
- name: "Spellcheck"
- name: Spellcheck
run: |
tox
env:
TOXENV: doc-spelling
- name: "Build docs"
- name: Build docs
env:
TOXENV: doc
run: |
Expand All @@ -94,7 +86,7 @@ jobs:
runs-on: ubuntu-24.04
steps:
- name: Checkout
uses: actions/checkout@v4
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Install ShellCheck
run: |
Expand All @@ -103,4 +95,13 @@ jobs:

- name: Run ShellCheck
run: |
shellcheck ./tools/ds-identify
shellcheck --color=always ./tools/ds-identify

workflow-lint:
name: GitHub Action and Workflow Lint
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- uses: reviewdog/action-actionlint@83e4ed25b168066ad8f62f5afbb29ebd8641d982 # v1.69.1
with:
fail_level: any
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Integration Tests
name: Integration

on:
pull_request:
Expand All @@ -23,11 +23,8 @@ jobs:
build-package-and-run-tests:
runs-on: ubuntu-24.04
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
# Fetch all tags for tools/read-version
fetch-depth: 0
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Prepare dependencies
run: |
sudo DEBIAN_FRONTEND=noninteractive apt-get update
Expand All @@ -48,13 +45,13 @@ jobs:
DEB_BUILD_OPTIONS=nocheck ./packages/bddeb -d --release ${{ env.RELEASE }}
cp cloud-init_all.deb ${{ runner.temp }}
- name: Archive debs as artifacts
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f # v6.0.0
with:
name: 'cloud-init-${{ env.RELEASE }}-deb'
path: '${{ runner.temp }}/cloud-init*.deb'
retention-days: 3
- name: Setup LXD
uses: canonical/setup-lxd@v0.1.2
uses: canonical/setup-lxd@8c6a87bfb56aa48f3fb9b830baa18562d8bfd4ee # v1
with:
channel: 6/stable
- name: Verify deb package
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@

name: Alpine Unittests
name: "Unit: Alternate Distros"

on:
pull_request:
Expand All @@ -22,14 +21,11 @@ jobs:
runs-on: ubuntu-latest
steps:

- name: "Checkout"
uses: actions/checkout@v4
with:
# Fetch all tags for tools/read-version
fetch-depth: 0
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

- name: Setup LXD
uses: canonical/setup-lxd@v0.1.2
- name: Set up LXD
uses: canonical/setup-lxd@8c6a87bfb56aa48f3fb9b830baa18562d8bfd4ee # v1

- name: Create alpine container
# the current shell doesn't have lxd as one of the groups
Expand Down Expand Up @@ -69,4 +65,4 @@ jobs:
run: lxc exec alpine -- ifdown -a

- name: Run unittests
run: lxc exec alpine --cwd /root/cloud-init-rw -- sh -c 'tox -e py3 -- --color=yes'
run: lxc exec alpine --cwd /root/cloud-init-rw -- sh -c 'TMPDIR=. tox -e py3 -- --color=yes'
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: Unit Tests
name: "Unit: Python Versions"
on:
pull_request:
push:
Expand All @@ -14,7 +14,7 @@ jobs:
unittests:
strategy:
matrix:
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13"]
python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"]
toxenv: [py3]
slug: [""]
experimental: [false]
Expand All @@ -31,13 +31,10 @@ jobs:
runs-on: ubuntu-24.04
continue-on-error: ${{ matrix.experimental }}
steps:
- name: "Checkout"
uses: actions/checkout@v4
with:
# Fetch all tags for tools/read-version
fetch-depth: 0
- name: Checkout
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Install Python ${{matrix.python-version}}
uses: actions/setup-python@v5
uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6.2.0
with:
python-version: ${{matrix.python-version}}
check-latest: ${{matrix.check-latest}}
Expand Down
13 changes: 13 additions & 0 deletions .github/workflows/daily-integration-jammy-lxd-container.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: "Daily: Integration Jammy lxd_container"

on:
workflow_dispatch:
schedule:
- cron: '2 22 * * *'

jobs:
jammy-lxd_container:
uses: ./.github/workflows/_integration_common.yml
with:
release: jammy
platform: lxd_container
13 changes: 13 additions & 0 deletions .github/workflows/daily-integration-noble-lxd-container.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: "Daily: Integration Noble lxd_container"

on:
workflow_dispatch:
schedule:
- cron: '2 22 * * *'

jobs:
noble-lxd_container:
uses: ./.github/workflows/_integration_common.yml
with:
release: noble
platform: lxd_container
13 changes: 13 additions & 0 deletions .github/workflows/daily-integration-questing-lxd-container.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: "Daily: Integration Questing lxd_container"

on:
workflow_dispatch:
schedule:
- cron: '2 22 * * *'

jobs:
questing-lxd_container:
uses: ./.github/workflows/_integration_common.yml
with:
release: questing
platform: lxd_container
13 changes: 13 additions & 0 deletions .github/workflows/daily-integration-resolute-lxd-container.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
name: "Daily: Integration Resolute lxd_container"

on:
workflow_dispatch:
schedule:
- cron: '2 22 * * *'

jobs:
resolute-lxd_container:
uses: ./.github/workflows/_integration_common.yml
with:
release: resolute
platform: lxd_container
Loading