From e2efcf21319b1c496ca11c8e5977726a178cec9b Mon Sep 17 00:00:00 2001 From: Dafydd Jones Date: Tue, 22 Sep 2026 15:30:23 +0100 Subject: [PATCH 1/2] chore(copier): apply template `https://github.com/dafydd/copier-ssf-ci` at v2.11.13 --- .copier-answers.ssf-ci.yml | 16 + .github/renovate.json5 | 11 + .github/workflows/main.yml | 85 ++++ .gitlab-ci.yml | 151 ++++--- .pre-commit-config.yaml | 53 ++- .rstcheck.cfg | 4 +- .rubocop.yml | 2 +- .yamllint | 30 +- Gemfile | 21 +- Gemfile.lock | 722 ++++++++++++++++++--------------- commitlint.config.js | 20 +- kitchen.yml | 233 +++++------ pre-commit_semantic-release.sh | 13 +- release-rules.js | 18 - release.config.js | 153 +++---- test/salt/pillar/.gitkeep | 0 16 files changed, 841 insertions(+), 691 deletions(-) create mode 100644 .copier-answers.ssf-ci.yml create mode 100644 .github/renovate.json5 create mode 100644 .github/workflows/main.yml delete mode 100644 release-rules.js create mode 100644 test/salt/pillar/.gitkeep diff --git a/.copier-answers.ssf-ci.yml b/.copier-answers.ssf-ci.yml new file mode 100644 index 0000000..9e34ce7 --- /dev/null +++ b/.copier-answers.ssf-ci.yml @@ -0,0 +1,16 @@ +# Changes here will be overwritten by Copier; NEVER EDIT MANUALLY +_commit: v2.11.13 +_src_path: https://github.com/dafyddj/copier-ssf-ci +failure_permitted_ignored: [] +failure_permitted_patterns: [] +formula_name: apt +release_using_gha: false +renovate_extend_presets: +- github>saltstack-formulas/.github +- github>saltstack-formulas/.github:copier +renovate_ignore_presets: [] +supported_oses: +- Debian +- Ubuntu +test_using_gha: false +using_probot_settings: false diff --git a/.github/renovate.json5 b/.github/renovate.json5 new file mode 100644 index 0000000..1fe72da --- /dev/null +++ b/.github/renovate.json5 @@ -0,0 +1,11 @@ +{ +$schema: 'https://docs.renovatebot.com/renovate-schema.json', +extends: [ + "github>saltstack-formulas/.github", + "github>saltstack-formulas/.github:copier" +], +/********************************************************** + * This file is managed as part of a Copier template. * + * Please make your own changes below this comment. * + *********************************************************/ +} diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000..2396efe --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,85 @@ +--- +name: Test & release + +'on': + - pull_request + - push + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: ${{ github.ref != format('refs/heads/{0}', + github.event.repository.default_branch) }} + +jobs: + should-run: + name: Prep / Should run + runs-on: ubuntu-latest + timeout-minutes: 5 + outputs: + should-run: ${{ steps.action.outputs.should-run }} + steps: + - id: action + # yamllint disable-line rule:line-length + uses: techneg-it/should-workflow-run@eff19348eb884f57e05bc6f05ae48ece3af14714 # v1.0.1 + pre-commit: + name: Lint / `pre-commit` + needs: should-run + if: fromJSON(needs.should-run.outputs.should-run) + container: techneg/ci-pre-commit:v2.5.58@sha256:56e0bf7d16560020b738a2378240643ccb399350a540e906ca1e27009ffe2d68 + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - run: | # Needed because of bug #2031 in `actions/checkout` + git config --global --add safe.directory "$GITHUB_WORKSPACE" + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + with: + fetch-depth: 0 + fetch-tags: true + filter: tree:0 + - name: Export `CI_CACHE_ID` from container + run: echo "CI_CACHE_ID=$(cat /.ci_cache_id)" >> $GITHUB_ENV + - uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0 + with: + path: ~/.cache/pre-commit + key: "${{ env.CI_CACHE_ID }}|\ + ${{ hashFiles('.pre-commit-config.yaml') }}" + restore-keys: | + ${{ env.CI_CACHE_ID }}| + - name: Build cache + run: | + pre-commit gc + echo "Installing hook environments..." + time -f "Hook installation took %E" pre-commit install-hooks + - name: Run `pre-commit` + run: | + pre-commit run --all-files --color always --verbose + pre-commit run --color always --hook-stage manual --verbose commitlint-ci + results: + name: Release / Collect results + permissions: + contents: write + issues: write + pull-requests: write + checks: read + container: techneg/ci-semantic-release:v1.2.58@sha256:723edbddfa534c7c137f09adec5fb2dfd6286d3fcb9c63688d7e5265ca4dd77e + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - run: | # Needed due to bug actions/checkout#2031 + git config --global --add safe.directory "$GITHUB_WORKSPACE" + - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1 + # yamllint disable-line rule:line-length + - uses: poseidon/wait-for-status-checks@e7e24423722c5b8e97a6dd5848827d2a412f812d # v0.7.0 + with: + ignore: > + Dependabot, + Release / Collect results, + ignore_pattern: ^GitLab CI + token: ${{ secrets.GITHUB_TOKEN }} + - name: Run `semantic-release` + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + MAINTAINER_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + semantic-release --dry-run + - run: echo "::notice ::Workflow success!" diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0919397..838a7ff 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -9,47 +9,86 @@ only_branch_master_parent_repo: &only_branch_master_parent_repo - 'master@saltstack-formulas/apt-formula' # `stage` + stage_cache: &stage_cache 'cache' stage_lint: &stage_lint 'lint' stage_release: &stage_release 'release' stage_test: &stage_test 'test' # `image` - image_commitlint: &image_commitlint 'techneg/ci-commitlint:v1.1.76' - image_dindruby: &image_dindruby 'techneg/ci-docker-python-ruby:v2.2.45' - image_dindrubybionic: &image_dindrubybionic 'techneg/ci-docker-python-ruby:v2.2.45' - image_precommit: &image_precommit 'techneg/ci-pre-commit:v2.4.10' - image_rubocop: &image_rubocop 'pipelinecomponents/rubocop:latest' - image_semantic-release: &image_semanticrelease 'myii/ssf-semantic-release:15.14' + # yamllint disable rule:line-length + image_commitlint: &image_commitlint 'techneg/ci-commitlint:v1.1.156@sha256:90b61f1eadad21123849ef29ee63ba796aa74be868942fb4e623efd6ced4b624' + image_dindruby: &image_dindruby 'techneg/ci-docker-python-ruby:v2.2.125@sha256:216120abc59355bd84b9dcad97d10f40884dbc41139971605eb8474f1a9e00b9' + image_dindrubybionic: &image_dindrubybionic 'techneg/ci-docker-python-ruby:v2.2.125@sha256:216120abc59355bd84b9dcad97d10f40884dbc41139971605eb8474f1a9e00b9' + image_precommit: &image_precommit 'techneg/ci-pre-commit:v2.5.58@sha256:56e0bf7d16560020b738a2378240643ccb399350a540e906ca1e27009ffe2d68' + image_semantic-release: &image_semanticrelease 'techneg/ci-semantic-release:v1.2.58@sha256:723edbddfa534c7c137f09adec5fb2dfd6286d3fcb9c63688d7e5265ca4dd77e' # `services` services_docker_dind: &services_docker_dind - - 'docker:dind' + - 'docker:29.8.0-dind@sha256:5efed980cba3fc126cf54e21a5a6ff8849d05b6e0623d6e7612f48e9cd6cd17e' + # yamllint enable rule:line-length # `variables` # https://forum.gitlab.com/t/gitlab-com-ci-caching-rubygems/5627/3 - # https://bundler.io/v1.16/bundle_config.html + # https://bundler.io/v2.3/man/bundle-config.1.html variables_bundler: &variables_bundler - BUNDLE_CACHE_PATH: '${CI_PROJECT_DIR}/.cache/bundler' - BUNDLE_WITHOUT: 'production' - # `cache` + BUNDLE_PATH: '${CI_PROJECT_DIR}/.cache/bundler' + BUNDLE_DEPLOYMENT: 'true' + bundle_install: &bundle_install + - 'bundle version' + - 'bundle config list' + # `--no-cache` means don't bother caching the downloaded .gem files + - 'time bundle install --no-cache' cache_bundler: &cache_bundler - key: '${CI_JOB_STAGE}' + key: + files: + - 'Gemfile.lock' + prefix: 'bundler' paths: - - '${BUNDLE_CACHE_PATH}' + - '${BUNDLE_PATH}' + # https://pre-commit.com/#gitlab-ci-example + variables_pre-commit: &variables_pre-commit + PRE_COMMIT_HOME: '${CI_PROJECT_DIR}/.cache/pre-commit' + cache_pre-commit: &cache_pre-commit + key: + files: + - '.pre-commit-config.yaml' + prefix: 'pre-commit' + paths: + - '${PRE_COMMIT_HOME}' ############################################################################### # Define stages and global variables ############################################################################### stages: + - *stage_cache - *stage_lint - *stage_test - *stage_release variables: DOCKER_DRIVER: 'overlay2' + ############################################################################### -# `lint` stage: `commitlint`, `pre-commit` & `rubocop` (latest, failure allowed) +# `cache` stage: build up the bundler cache required before the `test` stage ############################################################################### -commitlint: +build-cache: + stage: *stage_cache + image: *image_dindruby + variables: *variables_bundler + cache: *cache_bundler + script: *bundle_install + +############################################################################### +# `lint` stage: `commitlint`, `pre-commit` +############################################################################### +.lint_job: stage: *stage_lint + needs: [] + +commitlint: + extends: '.lint_job' image: *image_commitlint + rules: + - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH' + when: never + - when: on_success script: # Add `upstream` remote to get access to `upstream/master` - 'git remote add upstream @@ -58,45 +97,20 @@ commitlint: # Set default commit hashes for `--from` and `--to` - 'export COMMITLINT_FROM="$(git merge-base upstream/master HEAD)"' - 'export COMMITLINT_TO="${CI_COMMIT_SHA}"' - # `coqbot` adds a merge commit to test PRs on top of the latest commit in - # the repo; amend this merge commit message to avoid failure - - | - if [ "${GITLAB_USER_LOGIN}" = "coqbot" ] \ - && [ "${CI_COMMIT_BRANCH}" != "master" ]; then - git commit --amend -m \ - 'chore: reword coqbot merge commit message for commitlint' - export COMMITLINT_TO=HEAD - fi # Run `commitlint` - 'commitlint --from "${COMMITLINT_FROM}" --to "${COMMITLINT_TO}" --verbose' pre-commit: - stage: *stage_lint + extends: '.lint_job' image: *image_precommit # https://pre-commit.com/#gitlab-ci-example - variables: - PRE_COMMIT_HOME: '${CI_PROJECT_DIR}/.cache/pre-commit' - cache: - key: '${CI_JOB_NAME}' - paths: - - '${PRE_COMMIT_HOME}' + variables: *variables_pre-commit + cache: *cache_pre-commit script: - 'pre-commit run --all-files --color always --verbose' - -# Use a separate job for `rubocop` other than the one potentially run by `pre-commit` -# - The `pre-commit` check will only be available for formulas that pass the default -# `rubocop` check -- and must continue to do so -# - This job is allowed to fail, so can be used for all formulas -# - Furthermore, this job uses all of the latest `rubocop` features & cops, -# which will help when upgrading the `rubocop` linter used in `pre-commit` -rubocop: - allow_failure: true - stage: *stage_lint - image: *image_rubocop - script: - - 'rubocop -d -P -S --enable-pending-cops' + - 'pre-commit run --color always --hook-stage manual commitlint-ci' ############################################################################### # Define `test` template @@ -106,15 +120,13 @@ rubocop: image: *image_dindruby services: *services_docker_dind variables: *variables_bundler - cache: *cache_bundler - before_script: - # TODO: This should work from the env vars above automatically - - 'bundle config set path "${BUNDLE_CACHE_PATH}"' - - 'bundle config set without "${BUNDLE_WITHOUT}"' - - 'bundle install' + cache: + <<: *cache_bundler + policy: 'pull' + before_script: *bundle_install script: - # Alternative value to consider: `${CI_JOB_NAME}` - - 'bin/kitchen verify "${DOCKER_ENV_CI_JOB_NAME}"' + - 'echo "Starting test job: ${CI_JOB_NAME}"' + - 'bin/kitchen verify "${CI_JOB_NAME}"' ############################################################################### # Define `test` template (`allow_failure: true`) @@ -130,31 +142,36 @@ rubocop: # Make sure the instances listed below match up with # the `platforms` defined in `kitchen.yml` # yamllint disable rule:line-length -debian-12-master-py3: {extends: '.test_instance'} -debian-11-master-py3: {extends: '.test_instance'} -ubuntu-2404-master-py3: {extends: '.test_instance'} -ubuntu-2204-master-py3: {extends: '.test_instance'} -debian-12-3007-1-py3: {extends: '.test_instance'} -debian-11-3007-1-py3: {extends: '.test_instance'} -ubuntu-2404-3007-1-py3: {extends: '.test_instance'} -ubuntu-2204-3007-1-py3: {extends: '.test_instance'} -debian-12-3006-10-py3: {extends: '.test_instance'} -debian-11-3006-10-py3: {extends: '.test_instance'} -ubuntu-2404-3006-10-py3: {extends: '.test_instance'} -ubuntu-2204-3006-10-py3: {extends: '.test_instance'} +# Fedora 41+ will permit failure until this PR is merged into kitchen-docker +# https://github.com/test-kitchen/kitchen-docker/pull/427 is merged +# OpenSUSE master branch will fail until zypperpkg module is back in salt core +# https://github.com/saltstack/great-module-migration/issues/14 +# +debian-13-master: {extends: '.test_instance_failure_permitted'} +debian-12-master: {extends: '.test_instance_failure_permitted'} +ubuntu-2604-master: {extends: '.test_instance_failure_permitted'} +ubuntu-2404-master: {extends: '.test_instance_failure_permitted'} +ubuntu-2204-master: {extends: '.test_instance_failure_permitted'} +debian-13-3008: {extends: '.test_instance'} +debian-12-3008: {extends: '.test_instance'} +ubuntu-2604-3008: {extends: '.test_instance'} +ubuntu-2404-3008: {extends: '.test_instance'} +ubuntu-2204-3008: {extends: '.test_instance'} +debian-13-3006: {extends: '.test_instance'} +debian-12-3006: {extends: '.test_instance'} +ubuntu-2604-3006: {extends: '.test_instance'} +ubuntu-2404-3006: {extends: '.test_instance'} +ubuntu-2204-3006: {extends: '.test_instance'} # yamllint enable rule:line-length ############################################################################### # `release` stage: `semantic-release` ############################################################################### semantic-release: - only: *only_branch_master_parent_repo stage: *stage_release image: *image_semanticrelease variables: MAINTAINER_TOKEN: '${GH_TOKEN}' script: - # Update `AUTHORS.md` - - '${HOME}/go/bin/maintainer contributor' # Run `semantic-release` - 'semantic-release' diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 01e4346..790f681 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -15,22 +15,26 @@ ci: autoupdate_schedule: quarterly skip: [] submodules: false -default_stages: [commit] +default_stages: [pre-commit] repos: - - repo: https://github.com/dafyddj/commitlint-pre-commit-hook - rev: v2.3.0 + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 + hooks: + - id: check-merge-conflict + name: Check for Git merge conflicts + args: [--assume-in-merge] + exclude: ^docs/AUTHORS.rst$ + - repo: https://github.com/dafyddj/mirrors-commitlint + rev: v19.8.1 hooks: - id: commitlint - name: Check commit message using commitlint - description: Lint commit message against @commitlint/config-conventional rules - stages: [commit-msg] - additional_dependencies: ['@commitlint/config-conventional@17.1.0'] - - repo: https://github.com/rubocop-hq/rubocop - rev: v1.57.0 + - id: commitlint-ci + - repo: https://github.com/rubocop/rubocop + rev: v1.89.0 hooks: - id: rubocop name: Check Ruby files with rubocop - args: [--debug] + args: [--debug, --display-style-guide] - repo: https://github.com/shellcheck-py/shellcheck-py rev: v0.9.0.6 hooks: @@ -39,7 +43,7 @@ repos: files: ^.*\.(sh|bash|ksh)$ types: [] - repo: https://github.com/adrienverge/yamllint - rev: v1.32.0 + rev: v1.38.0 hooks: - id: yamllint name: Check YAML syntax with yamllint @@ -53,6 +57,7 @@ repos: # 1. SLS files under directory `test/` which are state files # 2. `kitchen.vagrant.yml`, which contains Embedded Ruby (ERB) template syntax # 3. YAML files heavily reliant on Jinja + # 4. `.copier-answers.yml` and its variants which are auto-generated files: | (?x)^( .*\.yaml| @@ -64,6 +69,7 @@ repos: )$ exclude: | (?x)^( + \.copier-answers(\..+)?\.ya?ml| kitchen.vagrant.yml| test/.*/states/.*\.sls )$ @@ -73,15 +79,15 @@ repos: - id: salt-lint name: Check Salt files using salt-lint files: ^.*\.(sls|jinja|j2|tmpl|tst)$ - - repo: https://github.com/myint/rstcheck - rev: v6.2.0 + - repo: https://github.com/rstcheck/rstcheck + rev: v6.3.0 hooks: - id: rstcheck name: Check reST files using rstcheck exclude: 'docs/CHANGELOG.rst' additional_dependencies: [sphinx==7.2.6] - repo: https://github.com/saltstack-formulas/mirrors-rst-lint - rev: v1.3.2 + rev: v1.4.0 hooks: - id: rst-lint name: Check reST files using rst-lint @@ -93,3 +99,22 @@ repos: docs/index.rst| )$ additional_dependencies: [pygments==2.16.1] + - repo: https://github.com/renovatebot/pre-commit-hooks + rev: 44.69.12 + hooks: + - id: renovate-config-validator + name: Check Renovate config with renovate-config-validator + - repo: https://github.com/python-jsonschema/check-jsonschema + rev: 0.38.0 + hooks: + - id: check-github-workflows + name: Check GitHub workflows with check-jsonschema + args: [--verbose] + - id: check-gitlab-ci + name: Check GitLab CI config with check-jsonschema + args: [--verbose] + - repo: https://github.com/standard/standard + rev: v17.1.2 + hooks: + - id: standard + name: Check JavaScript files using standardJS diff --git a/.rstcheck.cfg b/.rstcheck.cfg index 5383623..0daee68 100644 --- a/.rstcheck.cfg +++ b/.rstcheck.cfg @@ -1,4 +1,6 @@ [rstcheck] report=info ignore_language=rst -ignore_messages=(Duplicate (ex|im)plicit target.*|Hyperlink target ".*" is not referenced\.$) +# salt['config.get']('roles') is misidentified as a Markdown link. +# Ignore for now, but perhaps try to submit a fix upstream in rstcheck +ignore_messages=(Duplicate (ex|im)plicit target.*|Hyperlink target ".*" is not referenced\.$|\(rst\) Link is formatted in Markdown style\.) diff --git a/.rubocop.yml b/.rubocop.yml index bf4d107..b7762c4 100644 --- a/.rubocop.yml +++ b/.rubocop.yml @@ -7,7 +7,7 @@ Layout/LineLength: # Based on https://github.com/PyCQA/flake8-bugbear#opinionated-warnings (`B950`) Max: 88 Metrics/BlockLength: - IgnoredMethods: + AllowedMethods: - control - describe # Increase from default of `25` diff --git a/.yamllint b/.yamllint index 716baaf..20e95e6 100644 --- a/.yamllint +++ b/.yamllint @@ -4,34 +4,9 @@ # Extend the `default` configuration provided by `yamllint` extends: 'default' -# Files to ignore completely -# 1. All YAML files under directory `.bundle/`, introduced if gems are installed locally -# 2. All YAML files under directory `.cache/`, introduced during the CI run -# 3. All YAML files under directory `.git/` -# 4. All YAML files under directory `node_modules/`, introduced during the CI run -# 5. Any SLS files under directory `test/`, which are actually state files -# 6. Any YAML files under directory `.kitchen/`, introduced during local testing -# 7. `kitchen.vagrant.yml`, which contains Embedded Ruby (ERB) template syntax -ignore: | - .bundle/ - .cache/ - .git/ - node_modules/ - test/**/states/**/*.sls - .kitchen/ - kitchen.vagrant.yml - -yaml-files: - # Default settings - - '*.yaml' - - '*.yml' - - .salt-lint - - .yamllint - # SaltStack Formulas additional settings - - '*.example' - - test/**/*.sls - rules: + comments: + min-spaces-from-content: 1 empty-values: forbid-in-block-mappings: true forbid-in-flow-mappings: true @@ -39,6 +14,7 @@ rules: # Increase from default of `80` # Based on https://github.com/PyCQA/flake8-bugbear#opinionated-warnings (`B950`) max: 88 + allow-non-breakable-inline-mappings: true octal-values: forbid-implicit-octal: true forbid-explicit-octal: true diff --git a/Gemfile b/Gemfile index 51d2dc9..f084722 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,9 @@ # frozen_string_literal: true +# This is a placeholder version to remind us to update the Gemfile +# when a new stable Chef Workstation is released +# renovate: chef-workstation 25.14.2 + source ENV.fetch('PROXY_RUBYGEMSORG', 'https://rubygems.org') # Install the `inspec` gem using `git` because versions after `4.22.22` @@ -8,15 +12,16 @@ source ENV.fetch('PROXY_RUBYGEMSORG', 'https://rubygems.org') gem 'inspec', git: 'https://gitlab.com/saltstack-formulas/infrastructure/inspec', branch: 'ssf' # rubocop:enable Layout/LineLength -# Install the `kitchen-docker` gem using `git` in order to gain a performance -# improvement: avoid package installations which are already covered by the -# `salt-image-builder` (i.e. the pre-salted images that we're using) +# Install the `kitchen-docker` gem using `git` in order to avoid an upstream +# error caused by `kitchen-docker.gemspec`. +# TODO: correct the error upstream # rubocop:disable Layout/LineLength -gem 'kitchen-docker', git: 'https://gitlab.com/saltstack-formulas/infrastructure/kitchen-docker', branch: 'ssf' +gem 'kitchen-docker', git: 'https://github.com/dafyddj/kitchen-docker', branch: 'chore/gemspec' # rubocop:enable Layout/LineLength -gem 'kitchen-inspec', '>= 2.5.0' -gem 'kitchen-salt', '>= 0.7.2' +gem 'kitchen-inspec', '3.1.0' +gem 'kitchen-salt', '0.7.2' + +gem 'net-ssh', '7.3.2' -# Avoid the error 'pkeys are immutable on OpenSSL 3.0' -gem 'net-ssh', '>= 7.0.0' +gem 'test-kitchen', '4.0.0' diff --git a/Gemfile.lock b/Gemfile.lock index be16d6e..969dfa1 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,3 +1,11 @@ +GIT + remote: https://github.com/dafyddj/kitchen-docker + revision: d3289fb1d2c3a7bd52085f53bc856384c2cc2298 + branch: chore/gemspec + specs: + kitchen-docker (3.0.0) + test-kitchen (>= 1.0.0, < 5.0) + GIT remote: https://gitlab.com/saltstack-formulas/infrastructure/inspec revision: a0c6295303f7d7a4d2a6164b5e77868560b04945 @@ -40,251 +48,248 @@ GIT tty-prompt (~> 0.17) tty-table (~> 0.10) -GIT - remote: https://gitlab.com/saltstack-formulas/infrastructure/kitchen-docker - revision: 104079a1d2fe34f5b076f4d316f6f837fa76e412 - branch: ssf - specs: - kitchen-docker (2.13.0) - test-kitchen (>= 1.0.0) - GEM remote: https://rubygems.org/ specs: - activesupport (7.1.1) + activesupport (7.2.3.1) base64 + benchmark (>= 0.3) bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) + concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) - minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) - addressable (2.8.5) - public_suffix (>= 2.0.2, < 6.0) - ast (2.4.2) - aws-eventstream (1.2.0) - aws-partitions (1.836.0) - aws-sdk-account (1.18.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-alexaforbusiness (1.65.0) - aws-sdk-core (~> 3, >= 3.184.0) + logger (>= 1.4.2) + minitest (>= 5.1, < 6) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + addressable (2.9.0) + public_suffix (>= 2.0.2, < 8.0) + ast (2.4.3) + aws-eventstream (1.4.0) + aws-partitions (1.1262.0) + aws-sdk-account (1.60.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-alexaforbusiness (1.71.0) + aws-sdk-core (~> 3, >= 3.193.0) aws-sigv4 (~> 1.1) aws-sdk-amplify (1.32.0) aws-sdk-core (~> 3, >= 3.120.0) aws-sigv4 (~> 1.1) - aws-sdk-apigateway (1.88.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-apigatewayv2 (1.51.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-apigateway (1.136.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-apigatewayv2 (1.95.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-applicationautoscaling (1.51.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sigv4 (~> 1.1) - aws-sdk-athena (1.75.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-athena (1.122.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-autoscaling (1.92.0) aws-sdk-core (~> 3, >= 3.176.0) aws-sigv4 (~> 1.1) aws-sdk-batch (1.73.0) aws-sdk-core (~> 3, >= 3.176.0) aws-sigv4 (~> 1.1) - aws-sdk-budgets (1.60.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudformation (1.91.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudfront (1.83.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudhsm (1.48.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudhsmv2 (1.51.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudtrail (1.69.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-cloudwatch (1.81.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-budgets (1.110.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-cloudformation (1.154.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-cloudfront (1.150.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-cloudhsm (1.87.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-cloudhsmv2 (1.93.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-cloudtrail (1.124.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-cloudwatch (1.140.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-cloudwatchevents (1.62.0) aws-sdk-core (~> 3, >= 3.176.0) aws-sigv4 (~> 1.1) - aws-sdk-cloudwatchlogs (1.71.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-codecommit (1.60.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-codedeploy (1.60.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-codepipeline (1.62.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-cloudwatchlogs (1.157.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-codecommit (1.101.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-codedeploy (1.101.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-codepipeline (1.117.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-cognitoidentity (1.45.0) aws-sdk-core (~> 3, >= 3.176.0) aws-sigv4 (~> 1.1) aws-sdk-cognitoidentityprovider (1.76.0) aws-sdk-core (~> 3, >= 3.176.0) aws-sigv4 (~> 1.1) - aws-sdk-configservice (1.99.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-core (3.185.1) - aws-eventstream (~> 1, >= 1.0.2) - aws-partitions (~> 1, >= 1.651.0) + aws-sdk-configservice (1.153.0) + aws-sdk-core (~> 3, >= 3.248.0) aws-sigv4 (~> 1.5) + aws-sdk-core (3.252.0) + aws-eventstream (~> 1, >= 1.3.0) + aws-partitions (~> 1, >= 1.992.0) + aws-sigv4 (~> 1.9) + base64 + bigdecimal jmespath (~> 1, >= 1.6.1) - aws-sdk-costandusagereportservice (1.50.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + logger + aws-sdk-costandusagereportservice (1.90.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-databasemigrationservice (1.80.0) aws-sdk-core (~> 3, >= 3.176.0) aws-sigv4 (~> 1.1) - aws-sdk-dynamodb (1.95.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-ec2 (1.413.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-ecr (1.65.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-ecrpublic (1.23.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-ecs (1.130.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-efs (1.67.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-eks (1.90.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticache (1.92.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticbeanstalk (1.61.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticloadbalancing (1.49.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticloadbalancingv2 (1.93.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-elasticsearchservice (1.77.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-dynamodb (1.169.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-ec2 (1.625.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-ecr (1.130.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-ecrpublic (1.67.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-ecs (1.238.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-efs (1.112.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-eks (1.170.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-elasticache (1.146.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-elasticbeanstalk (1.105.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-elasticloadbalancing (1.91.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-elasticloadbalancingv2 (1.153.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-elasticsearchservice (1.122.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-emr (1.53.0) aws-sdk-core (~> 3, >= 3.121.2) aws-sigv4 (~> 1.1) aws-sdk-eventbridge (1.46.0) aws-sdk-core (~> 3, >= 3.176.0) aws-sigv4 (~> 1.1) - aws-sdk-firehose (1.58.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-firehose (1.111.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-glue (1.145.0) aws-sdk-core (~> 3, >= 3.176.0) aws-sigv4 (~> 1.1) - aws-sdk-guardduty (1.80.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-iam (1.87.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-kafka (1.63.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-kinesis (1.52.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-kms (1.72.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-lambda (1.106.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-guardduty (1.155.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-iam (1.148.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-kafka (1.115.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-kinesis (1.102.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-kms (1.129.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-lambda (1.185.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-mq (1.40.0) aws-sdk-core (~> 3, >= 3.120.0) aws-sigv4 (~> 1.1) - aws-sdk-networkfirewall (1.35.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-networkmanager (1.37.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-networkfirewall (1.91.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-networkmanager (1.81.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-organizations (1.77.0) aws-sdk-core (~> 3, >= 3.176.0) aws-sigv4 (~> 1.1) aws-sdk-ram (1.26.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sigv4 (~> 1.1) - aws-sdk-rds (1.197.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-redshift (1.99.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-route53 (1.80.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-route53domains (1.52.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-route53resolver (1.49.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-s3 (1.136.0) - aws-sdk-core (~> 3, >= 3.181.0) + aws-sdk-rds (1.316.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-redshift (1.161.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-route53 (1.136.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-route53domains (1.97.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-route53resolver (1.101.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-s3 (1.226.0) + aws-sdk-core (~> 3, >= 3.248.0) aws-sdk-kms (~> 1) - aws-sigv4 (~> 1.6) + aws-sigv4 (~> 1.5) aws-sdk-s3control (1.43.0) aws-sdk-core (~> 3, >= 3.122.0) aws-sigv4 (~> 1.1) aws-sdk-secretsmanager (1.46.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sigv4 (~> 1.1) - aws-sdk-securityhub (1.94.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-securityhub (1.158.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-servicecatalog (1.60.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sigv4 (~> 1.1) aws-sdk-ses (1.41.0) aws-sdk-core (~> 3, >= 3.120.0) aws-sigv4 (~> 1.1) - aws-sdk-shield (1.58.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) + aws-sdk-shield (1.98.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-signer (1.32.0) aws-sdk-core (~> 3, >= 3.120.0) aws-sigv4 (~> 1.1) aws-sdk-simpledb (1.29.0) aws-sdk-core (~> 3, >= 3.120.0) aws-sigv2 (~> 1.0) - aws-sdk-sms (1.50.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-sns (1.67.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-sqs (1.64.0) - aws-sdk-core (~> 3, >= 3.184.0) - aws-sigv4 (~> 1.1) - aws-sdk-ssm (1.158.0) - aws-sdk-core (~> 3, >= 3.184.0) + aws-sdk-sms (1.77.0) + aws-sdk-core (~> 3, >= 3.231.0) aws-sigv4 (~> 1.1) + aws-sdk-sns (1.117.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-sqs (1.116.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) + aws-sdk-ssm (1.216.0) + aws-sdk-core (~> 3, >= 3.248.0) + aws-sigv4 (~> 1.5) aws-sdk-states (1.39.0) aws-sdk-core (~> 3, >= 3.112.0) aws-sigv4 (~> 1.1) @@ -297,8 +302,8 @@ GEM aws-sdk-waf (1.43.0) aws-sdk-core (~> 3, >= 3.122.0) aws-sigv4 (~> 1.1) - aws-sigv2 (1.1.0) - aws-sigv4 (1.6.0) + aws-sigv2 (1.3.1) + aws-sigv4 (1.12.1) aws-eventstream (~> 1, >= 1.0.2) azure_graph_rbac (0.17.2) ms_rest_azure (~> 0.12.0) @@ -310,41 +315,71 @@ GEM ms_rest_azure (~> 0.12.0) azure_mgmt_storage (0.23.0) ms_rest_azure (~> 0.12.0) - base64 (0.1.1) - bcrypt_pbkdf (1.1.0) - bigdecimal (3.1.4) + base64 (0.3.0) + bcrypt_pbkdf (1.1.2) + benchmark (0.5.0) + bigdecimal (4.1.2) bson (4.15.0) - builder (3.2.4) - chef-config (18.3.0) + builder (3.3.0) + cgi (0.5.2) + chef-config (19.3.15) addressable - chef-utils (= 18.3.0) + chef-utils (= 19.3.15) fuzzyurl mixlib-config (>= 2.2.12, < 4.0) mixlib-shellout (>= 2.0, < 4.0) - tomlrb (~> 1.2) + racc + tomlrb (>= 1.2, < 3.0) + chef-gyoku (1.5.0) + builder (>= 2.1.2) + rexml (~> 3.4) chef-telemetry (1.1.1) chef-config concurrent-ruby (~> 1.0) - chef-utils (18.3.0) + chef-utils (19.3.15) concurrent-ruby + chef-winrm (2.5.0) + builder (>= 2.1.2) + chef-gyoku (~> 1.5) + erubi (~> 1.8) + gssapi (~> 1.2) + httpclient (~> 2.2, >= 2.2.0.2) + logging (>= 1.6.1, < 3.0) + nori (~> 2.7) + rexml (>= 3.4.2, < 4.0) + rubyntlm (~> 0.6.0, >= 0.6.3) + chef-winrm-elevated (1.2.5) + chef-winrm (>= 2.3.11) + chef-winrm-fs (>= 1.3.7) + erubi (~> 1.8) + chef-winrm-fs (1.4.2) + benchmark (~> 0.5.0) + chef-winrm (~> 2.4) + csv (~> 3.3) + erubi (>= 1.7) + logging (>= 1.6.1, < 3.0) + rubyzip (~> 2.0) coderay (1.1.3) - concurrent-ruby (1.2.2) - connection_pool (2.4.1) - cookstyle (7.32.2) - rubocop (= 1.25.1) + concurrent-ruby (1.3.7) + connection_pool (2.5.5) + cookstyle (8.6.10) + rubocop (= 1.84.2) + csv (3.3.5) + date (3.5.1) declarative (0.0.20) - diff-lcs (1.5.0) - docker-api (2.2.0) - excon (>= 0.47.0) + diff-lcs (1.6.2) + docker-api (2.4.0) + excon (>= 0.64.0) multi_json - domain_name (0.5.20190701) - unf (>= 0.0.5, < 1.0.0) - drb (2.1.1) - ruby2_keywords - ed25519 (1.3.0) - erubi (1.12.0) - excon (0.104.0) - faraday (1.10.3) + domain_name (0.6.20240107) + drb (2.2.3) + ed25519 (1.4.0) + erb (4.0.4.1) + cgi (>= 0.3.3) + erubi (1.13.1) + excon (1.5.0) + logger + faraday (1.10.6) faraday-em_http (~> 1.0) faraday-em_synchrony (~> 1.0) faraday-excon (~> 1.1) @@ -356,87 +391,116 @@ GEM faraday-rack (~> 1.0) faraday-retry (~> 1.0) ruby2_keywords (>= 0.0.4) - faraday-cookie_jar (0.0.7) + faraday-cookie_jar (0.0.8) faraday (>= 0.8.0) - http-cookie (~> 1.0.0) + http-cookie (>= 1.0.0) faraday-em_http (1.0.0) - faraday-em_synchrony (1.0.0) + faraday-em_synchrony (1.0.1) faraday-excon (1.1.0) - faraday-follow_redirects (0.3.0) + faraday-follow_redirects (0.5.0) faraday (>= 1, < 3) faraday-httpclient (1.0.1) - faraday-multipart (1.0.4) - multipart-post (~> 2) - faraday-net_http (1.0.1) + faraday-multipart (1.2.0) + multipart-post (~> 2.0) + faraday-net_http (1.0.2) faraday-net_http_persistent (1.2.0) faraday-patron (1.0.0) faraday-rack (1.0.0) - faraday-retry (1.0.3) + faraday-retry (1.0.4) faraday_middleware (1.0.0) faraday (~> 1.0) - ffi (1.16.3) + ffi (1.17.4) fuzzyurl (0.9.0) - google-api-client (0.52.0) + google-apis-admin_directory_v1 (0.46.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-cloudkms_v1 (0.41.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-cloudresourcemanager_v1 (0.35.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-compute_v1 (0.83.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-core (0.18.0) addressable (~> 2.5, >= 2.5.1) - googleauth (~> 0.9) - httpclient (>= 2.8.1, < 3.0) + googleauth (~> 1.9) + httpclient (>= 2.8.3, < 3.a) mini_mime (~> 1.0) + mutex_m representable (~> 3.0) - retriable (>= 2.0, < 4.0) - rexml - signet (~> 0.12) - googleauth (0.14.0) - faraday (>= 0.17.3, < 2.0) - jwt (>= 1.4, < 3.0) - memoist (~> 0.16) - multi_json (~> 1.11) + retriable (>= 2.0, < 4.a) + google-apis-iam_v1 (0.50.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-monitoring_v3 (0.51.0) + google-apis-core (>= 0.11.0, < 2.a) + google-apis-storage_v1 (0.30.0) + google-apis-core (>= 0.11.0, < 2.a) + google-cloud-env (2.3.1) + base64 (~> 0.2) + faraday (>= 1.0, < 3.a) + google-logging-utils (0.2.0) + googleauth (1.17.1) + faraday (>= 1.0, < 3.a) + google-cloud-env (~> 2.2) + google-logging-utils (~> 0.1) + jwt (>= 1.4, < 4.0) os (>= 0.9, < 2.0) - signet (~> 0.14) + pstore (~> 0.1) + signet (>= 0.16, < 2.a) gssapi (1.3.1) ffi (>= 1.0.1) - gyoku (1.4.0) - builder (>= 2.1.2) - rexml (~> 3.0) hashie (4.1.0) - highline (2.1.0) - http-cookie (1.0.5) + highline (3.1.2) + reline + http-cookie (1.1.6) domain_name (~> 0.5) - httpclient (2.8.3) - i18n (1.14.1) + httpclient (2.9.0) + mutex_m + i18n (1.15.2) concurrent-ruby (~> 1.0) inifile (3.0.0) + io-console (0.8.2) + irb (1.18.0) + pp (>= 0.6.0) + prism (>= 1.3.0) + rdoc (>= 4.0.0) + reline (>= 0.4.2) jmespath (1.6.2) - json (2.6.3) - jwt (2.7.1) - kitchen-inspec (2.6.2) - hashie (>= 3.4, <= 5.0) - inspec (>= 2.2.64, < 6.0) - test-kitchen (>= 2.7, < 4) + json (2.21.2) + jwt (3.2.0) + base64 + kitchen-inspec (3.1.0) + hashie (>= 3.4, < 6.0) + inspec-core (>= 2.2.64, < 8.0) + test-kitchen (>= 2.7, < 5) + train kitchen-salt (0.7.2) hashie (>= 3.5) test-kitchen (>= 1.4) + language_server-protocol (3.17.0.5) license-acceptance (2.1.13) pastel (~> 0.7) tomlrb (>= 1.2, < 3.0) tty-box (~> 0.6) tty-prompt (~> 0.20) + lint_roller (1.1.0) little-plugger (1.1.4) - logging (2.3.1) + logger (1.7.0) + logging (2.4.0) little-plugger (~> 1.1) multi_json (~> 1.14) - memoist (0.16.2) - method_source (1.0.0) + method_source (1.1.0) mini_mime (1.1.5) - mini_portile2 (2.8.4) - minitest (5.20.0) + mini_portile2 (2.8.9) + minitest (5.27.0) mixlib-config (3.0.27) tomlrb - mixlib-install (3.12.27) + mixlib-install (3.17.0) mixlib-shellout mixlib-versioning + ostruct thor - mixlib-log (3.0.9) - mixlib-shellout (3.2.7) + mixlib-log (3.2.3) + ffi (>= 1.15.5) + mixlib-shellout (3.4.10) chef-utils mixlib-versioning (1.2.12) mongo (2.13.2) @@ -450,51 +514,69 @@ GEM faraday (>= 0.9, < 2.0.0) faraday-cookie_jar (~> 0.0.6) ms_rest (~> 0.7.6) - multi_json (1.15.0) - multipart-post (2.3.0) - mutex_m (0.1.2) - net-scp (4.0.0) + multi_json (1.19.1) + multipart-post (2.4.1) + mutex_m (0.3.0) + net-scp (4.1.0) net-ssh (>= 2.6.5, < 8.0.0) - net-ssh (7.2.0) + net-ssh (7.3.2) net-ssh-gateway (2.0.0) net-ssh (>= 4.0.0) - nokogiri (1.15.4) + nokogiri (1.18.10) mini_portile2 (~> 2.8.2) racc (~> 1.4) - nori (2.6.0) + nori (2.7.1) + bigdecimal options (2.3.2) os (1.1.4) - parallel (1.23.0) - parser (3.2.2.4) + ostruct (0.6.3) + parallel (1.28.0) + parser (3.3.11.1) ast (~> 2.4.1) racc parslet (1.8.2) pastel (0.8.0) tty-color (~> 0.5) - progress_bar (1.3.3) - highline (>= 1.6, < 3) + pp (0.6.4) + prettyprint + prettyprint (0.2.0) + prism (1.9.0) + progress_bar (1.3.4) + highline (>= 1.6) options (~> 2.3.0) - pry (0.14.2) + pry (0.16.0) coderay (~> 1.1) method_source (~> 1.0) - public_suffix (5.0.3) - racc (1.7.1) + reline (>= 0.6.0) + pstore (0.2.1) + psych (5.4.0) + date + stringio + public_suffix (6.0.2) + racc (1.8.1) rainbow (3.1.1) - rake (13.0.6) - regexp_parser (2.8.2) + rake (13.4.2) + rdoc (7.2.0) + erb + psych (>= 4.0.0) + tsort + regexp_parser (2.12.0) + reline (0.6.3) + io-console (~> 0.5) representable (3.2.0) declarative (< 0.1.0) trailblazer-option (>= 0.1.1, < 0.2.0) uber (< 0.2.0) - retriable (3.1.2) - rexml (3.2.6) + retriable (3.8.0) + rexml (3.4.4) roo (2.9.0) nokogiri (~> 1) rubyzip (>= 1.3.0, < 3.0.0) - roo-xls (1.2.0) + roo-xls (2.0.0) + csv nokogiri - roo (>= 2.0.0, < 3) - spreadsheet (> 0.9.0) + roo (>= 2.0.0, < 4) + spreadsheet (>= 1.3.4, < 2) rspec (3.11.0) rspec-core (~> 3.11.0) rspec-expectations (~> 3.11.0) @@ -504,62 +586,76 @@ GEM rspec-expectations (3.11.1) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.11.0) - rspec-its (1.3.0) + rspec-its (1.3.1) rspec-core (>= 3.0.0) rspec-expectations (>= 3.0.0) rspec-mocks (3.11.2) diff-lcs (>= 1.2.0, < 2.0) rspec-support (~> 3.11.0) rspec-support (3.11.1) - rubocop (1.25.1) + rubocop (1.84.2) + json (~> 2.3) + language_server-protocol (~> 3.17.0.2) + lint_roller (~> 1.1.0) parallel (~> 1.10) - parser (>= 3.1.0.0) + parser (>= 3.3.0.2) rainbow (>= 2.2.2, < 4.0) - regexp_parser (>= 1.8, < 3.0) - rexml - rubocop-ast (>= 1.15.1, < 2.0) + regexp_parser (>= 2.9.3, < 3.0) + rubocop-ast (>= 1.49.0, < 2.0) ruby-progressbar (~> 1.7) - unicode-display_width (>= 1.4.0, < 3.0) - rubocop-ast (1.29.0) - parser (>= 3.2.1.0) - ruby-ole (1.2.12.2) + unicode-display_width (>= 2.4.0, < 4.0) + rubocop-ast (1.49.1) + parser (>= 3.3.7.2) + prism (~> 1.7) + ruby-ole (1.2.13.1) ruby-progressbar (1.13.0) ruby2_keywords (0.0.5) - rubyntlm (0.6.3) - rubyzip (2.3.2) + rubyntlm (0.6.5) + base64 + rubyzip (2.4.1) + securerandom (0.4.1) semverse (3.0.2) - signet (0.18.0) + signet (0.21.0) addressable (~> 2.8) faraday (>= 0.17.5, < 3.a) - jwt (>= 1.5, < 3.0) + jwt (>= 1.5, < 4.0) multi_json (~> 1.10) - spreadsheet (1.3.0) + socksify (1.8.1) + spreadsheet (1.3.5) + bigdecimal + logger ruby-ole sslshake (1.3.1) + stringio (3.2.0) strings (0.2.1) strings-ansi (~> 0.2) unicode-display_width (>= 1.5, < 3.0) unicode_utils (~> 1.4) strings-ansi (0.2.0) - test-kitchen (3.5.0) + syslog (0.4.0) + logger + test-kitchen (4.0.0) bcrypt_pbkdf (~> 1.0) chef-utils (>= 16.4.35) - ed25519 (~> 1.2) - license-acceptance (>= 1.0.11, < 3.0) + chef-winrm (>= 2.5.0, < 3.0) + chef-winrm-elevated (>= 1.0, < 2.0) + chef-winrm-fs (>= 1.0, < 2.0) + csv (~> 3.3) + ed25519 (~> 1.3) + irb (~> 1.15) mixlib-install (~> 3.6) mixlib-shellout (>= 1.2, < 4.0) net-scp (>= 1.1, < 5.0) net-ssh (>= 2.9, < 8.0) net-ssh-gateway (>= 1.2, < 3.0) + ostruct (~> 0.6) + syslog (~> 0.3) thor (>= 0.19, < 2.0) - winrm (~> 2.0) - winrm-elevated (~> 1.0) - winrm-fs (~> 1.1) - thor (1.2.2) + thor (1.5.0) timeliness (0.3.10) - tomlrb (1.3.0) + tomlrb (2.0.4) trailblazer-option (0.1.2) - train (3.10.8) + train (3.12.0) activesupport (>= 6.0.3.1) azure_graph_rbac (~> 0.16) azure_mgmt_key_vault (~> 0.17) @@ -567,10 +663,16 @@ GEM azure_mgmt_security (~> 0.18) azure_mgmt_storage (~> 0.18) docker-api (>= 1.26, < 3.0) - google-api-client (>= 0.23.9, <= 0.52.0) - googleauth (>= 0.6.6, <= 0.14.0) + google-apis-admin_directory_v1 (~> 0.46.0) + google-apis-cloudkms_v1 (~> 0.41.0) + google-apis-cloudresourcemanager_v1 (~> 0.35.0) + google-apis-compute_v1 (~> 0.83.0) + google-apis-iam_v1 (~> 0.50.0) + google-apis-monitoring_v3 (~> 0.51.0) + google-apis-storage_v1 (~> 0.30.0) + googleauth (>= 0.16.2, < 2.a) inifile (~> 3.0) - train-core (= 3.10.8) + train-core (= 3.12.0) train-winrm (~> 0.2) train-aws (0.2.36) aws-sdk-account (~> 1.14) @@ -649,7 +751,7 @@ GEM aws-sdk-synthetics (~> 1.19.0) aws-sdk-transfer (>= 1.26, < 1.74) aws-sdk-waf (~> 1.43.0) - train-core (3.10.8) + train-core (3.12.0) addressable (~> 2.5) ffi (!= 1.13.0) json (>= 1.8, < 3.0) @@ -657,10 +759,12 @@ GEM net-scp (>= 1.2, < 5.0) net-ssh (>= 2.9, < 8.0) train-habitat (0.2.22) - train-winrm (0.2.13) - winrm (>= 2.3.6, < 3.0) - winrm-elevated (~> 1.2.2) - winrm-fs (~> 1.0) + train-winrm (0.4.3) + chef-winrm (>= 2.4.4, < 3.0) + chef-winrm-elevated (>= 1.2.5, < 2.0) + chef-winrm-fs (>= 1.4.1, < 2.0) + socksify (~> 1.8) + tsort (0.2.0) tty-box (0.7.0) pastel (~> 0.8) strings (~> 0.2.0) @@ -674,7 +778,7 @@ GEM tty-cursor (~> 0.7) tty-screen (~> 0.8) wisper (~> 2.0) - tty-screen (0.8.1) + tty-screen (0.8.2) tty-table (0.12.0) pastel (~> 0.8) strings (~> 0.2.0) @@ -682,29 +786,8 @@ GEM tzinfo (2.0.6) concurrent-ruby (~> 1.0) uber (0.1.0) - unf (0.1.4) - unf_ext - unf_ext (0.0.8.2) - unicode-display_width (2.5.0) + unicode-display_width (2.6.0) unicode_utils (1.4.0) - winrm (2.3.6) - builder (>= 2.1.2) - erubi (~> 1.8) - gssapi (~> 1.2) - gyoku (~> 1.0) - httpclient (~> 2.2, >= 2.2.0.2) - logging (>= 1.6.1, < 3.0) - nori (~> 2.0) - rubyntlm (~> 0.6.0, >= 0.6.3) - winrm-elevated (1.2.3) - erubi (~> 1.8) - winrm (~> 2.0) - winrm-fs (~> 1.0) - winrm-fs (1.3.5) - erubi (~> 1.8) - logging (>= 1.6.1, < 3.0) - rubyzip (~> 2.0) - winrm (~> 2.0) wisper (2.0.1) PLATFORMS @@ -713,9 +796,10 @@ PLATFORMS DEPENDENCIES inspec! kitchen-docker! - kitchen-inspec (>= 2.5.0) - kitchen-salt (>= 0.7.2) - net-ssh (>= 7.0.0) + kitchen-inspec (= 3.1.0) + kitchen-salt (= 0.7.2) + net-ssh (= 7.3.2) + test-kitchen (= 4.0.0) BUNDLED WITH - 2.1.2 + 2.3.7 diff --git a/commitlint.config.js b/commitlint.config.js index 4eb37f4..fc3c51f 100644 --- a/commitlint.config.js +++ b/commitlint.config.js @@ -1,8 +1,14 @@ module.exports = { - extends: ['@commitlint/config-conventional'], - rules: { - 'body-max-line-length': [2, 'always', 120], - 'footer-max-line-length': [2, 'always', 120], - 'header-max-length': [2, 'always', 72], - }, -}; + extends: ['@commitlint/config-conventional'], + rules: { + 'body-max-line-length': [2, 'always', 120], + 'footer-max-line-length': [2, 'always', 120], + 'header-max-length': [2, 'always', 72] + }, + ignores: [ + (commit) => commit.startsWith('chore(copier):'), + (commit) => commit.startsWith('chore(deps):'), + (commit) => commit.startsWith('ci(pre-commit.ci):'), + (commit) => commit.startsWith('[CI merge]') + ] +} diff --git a/kitchen.yml b/kitchen.yml index c3c6eb0..1e12898 100644 --- a/kitchen.yml +++ b/kitchen.yml @@ -17,233 +17,222 @@ provisioner: salt_copy_filter: - .kitchen - .git + pillars_from_directories: + - test/salt/pillar + +transport: + # Avoid lengthy waits when a container does not launch correctly + max_wait_until_ready: 60 platforms: ## SALT `master` - - name: debian-12-master-py3 + - name: debian-13-master + driver: + image: saltimages/salt-master-py3:debian-13 + run_command: /lib/systemd/systemd + - name: debian-12-master driver: image: saltimages/salt-master-py3:debian-12 run_command: /lib/systemd/systemd - - name: debian-11-master-py3 + - name: ubuntu-2604-master driver: - image: saltimages/salt-master-py3:debian-11 + image: saltimages/salt-master-py3:ubuntu-26.04 run_command: /lib/systemd/systemd - - name: ubuntu-2404-master-py3 + - name: ubuntu-2404-master driver: image: saltimages/salt-master-py3:ubuntu-24.04 run_command: /lib/systemd/systemd - - name: ubuntu-2204-master-py3 + - name: ubuntu-2204-master driver: image: saltimages/salt-master-py3:ubuntu-22.04 run_command: /lib/systemd/systemd - - name: ubuntu-2004-master-py3 - driver: - image: saltimages/salt-master-py3:ubuntu-20.04 - run_command: /lib/systemd/systemd - - name: centos-stream9-master-py3 + - name: centos-stream9-master driver: image: saltimages/salt-master-py3:centos-stream9 - - name: opensuse-leap-156-master-py3 - driver: - image: saltimages/salt-master-py3:opensuse-leap-15.6 - # Workaround to avoid intermittent failures on `opensuse-leap-15.6`: - # => SCP did not finish successfully (255): (Net::SCP::Error) - transport: - max_ssh_sessions: 1 - - name: opensuse-leap-155-master-py3 + - name: opensuse-leap-160-master driver: - image: saltimages/salt-master-py3:opensuse-leap-15.5 - # Workaround to avoid intermittent failures on `opensuse-leap-15.5`: + image: saltimages/salt-master-py3:opensuse-leap-16.0 + # Workaround to avoid intermittent failures on `opensuse-leap-16.0`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: opensuse-tmbl-latest-master-py3 + - name: opensuse-tmbl-latest-master driver: image: saltimages/salt-master-py3:opensuse-tumbleweed-latest # Workaround to avoid intermittent failures on `opensuse-tumbleweed`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: fedora-41-master-py3 + - name: fedora-44-master driver: - image: saltimages/salt-master-py3:fedora-41 - - name: fedora-40-master-py3 + image: saltimages/salt-master-py3:fedora-44 + - name: fedora-43-master driver: - image: saltimages/salt-master-py3:fedora-40 - - name: amazonlinux-2023-master-py3 + image: saltimages/salt-master-py3:fedora-43 + - name: amazonlinux-2023-master driver: image: saltimages/salt-master-py3:amazonlinux-2023 - - name: oraclelinux-9-master-py3 + - name: oraclelinux-9-master driver: image: saltimages/salt-master-py3:oraclelinux-9 - - name: oraclelinux-8-master-py3 + - name: oraclelinux-8-master driver: image: saltimages/salt-master-py3:oraclelinux-8 - - name: almalinux-9-master-py3 + - name: almalinux-9-master driver: image: saltimages/salt-master-py3:almalinux-9 - - name: almalinux-8-master-py3 + - name: almalinux-8-master driver: image: saltimages/salt-master-py3:almalinux-8 - - name: rockylinux-9-master-py3 + - name: rockylinux-9-master driver: image: saltimages/salt-master-py3:rockylinux-9 - - name: rockylinux-8-master-py3 + - name: rockylinux-8-master driver: image: saltimages/salt-master-py3:rockylinux-8 - ## SALT `3007.1` - - name: debian-12-3007-1-py3 + ## SALT `3008.2` + - name: debian-13-3008-2 driver: - image: saltimages/salt-3007.1-py3:debian-12 + image: saltimages/salt-3008.2-py3:debian-13 run_command: /lib/systemd/systemd - - name: debian-11-3007-1-py3 + - name: debian-12-3008-2 driver: - image: saltimages/salt-3007.1-py3:debian-11 + image: saltimages/salt-3008.2-py3:debian-12 run_command: /lib/systemd/systemd - - name: ubuntu-2404-3007-1-py3 + - name: ubuntu-2604-3008-2 driver: - image: saltimages/salt-3007.1-py3:ubuntu-24.04 + image: saltimages/salt-3008.2-py3:ubuntu-26.04 run_command: /lib/systemd/systemd - - name: ubuntu-2204-3007-1-py3 + - name: ubuntu-2404-3008-2 driver: - image: saltimages/salt-3007.1-py3:ubuntu-22.04 + image: saltimages/salt-3008.2-py3:ubuntu-24.04 run_command: /lib/systemd/systemd - - name: ubuntu-2004-3007-1-py3 + - name: ubuntu-2204-3008-2 driver: - image: saltimages/salt-3007.1-py3:ubuntu-20.04 + image: saltimages/salt-3008.2-py3:ubuntu-22.04 run_command: /lib/systemd/systemd - - name: centos-stream9-3007-1-py3 + - name: centos-stream9-3008-2 driver: - image: saltimages/salt-3007.1-py3:centos-stream9 - - name: opensuse-leap-155-3007-1-py3 + image: saltimages/salt-3008.2-py3:centos-stream9 + - name: opensuse-leap-160-3008-2 driver: - image: saltimages/salt-3007.1-py3:opensuse-leap-15.5 - # Workaround to avoid intermittent failures on `opensuse-leap-15.5`: + image: saltimages/salt-3008.2-py3:opensuse-leap-16.0 + # Workaround to avoid intermittent failures on `opensuse-leap-16.0`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: opensuse-leap-156-3007-1-py3 + - name: opensuse-tmbl-latest-3008-2 driver: - image: saltimages/salt-3007.1-py3:opensuse-leap-15.6 - # Workaround to avoid intermittent failures on `opensuse-leap-15.6`: - # => SCP did not finish successfully (255): (Net::SCP::Error) - transport: - max_ssh_sessions: 1 - - name: opensuse-tmbl-latest-3007-1-py3 - driver: - image: saltimages/salt-3007.1-py3:opensuse-tumbleweed-latest + image: saltimages/salt-3008.2-py3:opensuse-tumbleweed-latest # Workaround to avoid intermittent failures on `opensuse-tumbleweed`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: fedora-41-3007-1-py3 + - name: fedora-44-3008-2 driver: - image: saltimages/salt-3007.1-py3:fedora-41 - - name: fedora-40-3007-1-py3 + image: saltimages/salt-3008.2-py3:fedora-44 + - name: fedora-43-3008-2 driver: - image: saltimages/salt-3007.1-py3:fedora-40 - - name: amazonlinux-2023-3007-1-py3 + image: saltimages/salt-3008.2-py3:fedora-43 + - name: amazonlinux-2023-3008-2 driver: - image: saltimages/salt-3007.1-py3:amazonlinux-2023 - - name: amazonlinux-2-3007-1-py3 + image: saltimages/salt-3008.2-py3:amazonlinux-2023 + - name: amazonlinux-2-3008-2 driver: - image: saltimages/salt-3007.1-py3:amazonlinux-2 - - name: oraclelinux-9-3007-1-py3 + image: saltimages/salt-3008.2-py3:amazonlinux-2 + - name: oraclelinux-9-3008-2 driver: - image: saltimages/salt-3007.1-py3:oraclelinux-9 - - name: oraclelinux-8-3007-1-py3 + image: saltimages/salt-3008.2-py3:oraclelinux-9 + - name: oraclelinux-8-3008-2 driver: - image: saltimages/salt-3007.1-py3:oraclelinux-8 - - name: almalinux-9-3007-1-py3 + image: saltimages/salt-3008.2-py3:oraclelinux-8 + - name: almalinux-9-3008-2 driver: - image: saltimages/salt-3007.1-py3:almalinux-9 - - name: almalinux-8-3007-1-py3 + image: saltimages/salt-3008.2-py3:almalinux-9 + - name: almalinux-8-3008-2 driver: - image: saltimages/salt-3007.1-py3:almalinux-8 - - name: rockylinux-9-3007-1-py3 + image: saltimages/salt-3008.2-py3:almalinux-8 + - name: rockylinux-9-3008-2 driver: - image: saltimages/salt-3007.1-py3:rockylinux-9 - - name: rockylinux-8-3007-1-py3 + image: saltimages/salt-3008.2-py3:rockylinux-9 + - name: rockylinux-8-3008-2 driver: - image: saltimages/salt-3007.1-py3:rockylinux-8 + image: saltimages/salt-3008.2-py3:rockylinux-8 - ## SALT `3006.10` - - name: debian-12-3006-10-py3 + ## SALT `3006.27` + - name: debian-13-3006-27 driver: - image: saltimages/salt-3006.10-py3:debian-12 + image: saltimages/salt-3006.27-py3:debian-13 run_command: /lib/systemd/systemd - - name: debian-11-3006-10-py3 + - name: debian-12-3006-27 driver: - image: saltimages/salt-3006.10-py3:debian-11 + image: saltimages/salt-3006.27-py3:debian-12 run_command: /lib/systemd/systemd - - name: ubuntu-2404-3006-10-py3 + - name: ubuntu-2604-3006-27 driver: - image: saltimages/salt-3006.10-py3:ubuntu-24.04 + image: saltimages/salt-3006.27-py3:ubuntu-26.04 run_command: /lib/systemd/systemd - - name: ubuntu-2204-3006-10-py3 + - name: ubuntu-2404-3006-27 driver: - image: saltimages/salt-3006.10-py3:ubuntu-22.04 + image: saltimages/salt-3006.27-py3:ubuntu-24.04 run_command: /lib/systemd/systemd - - name: ubuntu-2004-3006-10-py3 + - name: ubuntu-2204-3006-27 driver: - image: saltimages/salt-3006.10-py3:ubuntu-20.04 + image: saltimages/salt-3006.27-py3:ubuntu-22.04 run_command: /lib/systemd/systemd - - name: centos-stream9-3006-10-py3 + - name: centos-stream9-3006-27 driver: - image: saltimages/salt-3006.10-py3:centos-stream9 - - name: opensuse-tmbl-latest-3006-10-py3 + image: saltimages/salt-3006.27-py3:centos-stream9 + - name: opensuse-tmbl-latest-3006-27 driver: - image: saltimages/salt-3006.10-py3:opensuse-tumbleweed-latest + image: saltimages/salt-3006.27-py3:opensuse-tumbleweed-latest # Workaround to avoid intermittent failures on `opensuse-tumbleweed`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: opensuse-leap-156-3006-10-py3 - driver: - image: saltimages/salt-3006.10-py3:opensuse-leap-15.6 - # Workaround to avoid intermittent failures on `opensuse-leap-15.6`: - # => SCP did not finish successfully (255): (Net::SCP::Error) - transport: - max_ssh_sessions: 1 - - name: opensuse-leap-155-3006-10-py3 + - name: opensuse-leap-160-3006-27 driver: - image: saltimages/salt-3006.10-py3:opensuse-leap-15.5 - # Workaround to avoid intermittent failures on `opensuse-leap-15.5`: + image: saltimages/salt-3006.27-py3:opensuse-leap-16.0 + # Workaround to avoid intermittent failures on `opensuse-leap-16.0`: # => SCP did not finish successfully (255): (Net::SCP::Error) transport: max_ssh_sessions: 1 - - name: fedora-41-3006-10-py3 + - name: fedora-44-3006-27 driver: - image: saltimages/salt-3006.10-py3:fedora-41 - - name: fedora-40-3006-10-py3 + image: saltimages/salt-3006.27-py3:fedora-44 + - name: fedora-43-3006-27 driver: - image: saltimages/salt-3006.10-py3:fedora-40 - - name: amazonlinux-2023-3006-10-py3 + image: saltimages/salt-3006.27-py3:fedora-43 + - name: amazonlinux-2023-3006-27 driver: - image: saltimages/salt-3006.10-py3:amazonlinux-2023 - - name: amazonlinux-2-3006-10-py3 + image: saltimages/salt-3006.27-py3:amazonlinux-2023 + - name: amazonlinux-2-3006-27 driver: - image: saltimages/salt-3006.10-py3:amazonlinux-2 - - name: oraclelinux-9-3006-10-py3 + image: saltimages/salt-3006.27-py3:amazonlinux-2 + - name: oraclelinux-9-3006-27 driver: - image: saltimages/salt-3006.10-py3:oraclelinux-9 - - name: oraclelinux-8-3006-10-py3 + image: saltimages/salt-3006.27-py3:oraclelinux-9 + - name: oraclelinux-8-3006-27 driver: - image: saltimages/salt-3006.10-py3:oraclelinux-8 - - name: almalinux-9-3006-10-py3 + image: saltimages/salt-3006.27-py3:oraclelinux-8 + - name: almalinux-9-3006-27 driver: - image: saltimages/salt-3006.10-py3:almalinux-9 - - name: almalinux-8-3006-10-py3 + image: saltimages/salt-3006.27-py3:almalinux-9 + - name: almalinux-8-3006-27 driver: - image: saltimages/salt-3006.10-py3:almalinux-8 - - name: rockylinux-9-3006-10-py3 + image: saltimages/salt-3006.27-py3:almalinux-8 + - name: rockylinux-9-3006-27 driver: - image: saltimages/salt-3006.10-py3:rockylinux-9 - - name: rockylinux-8-3006-10-py3 + image: saltimages/salt-3006.27-py3:rockylinux-9 + - name: rockylinux-8-3006-27 driver: - image: saltimages/salt-3006.10-py3:rockylinux-8 + image: saltimages/salt-3006.27-py3:rockylinux-8 +########################################################## +# This file is managed as part of a Copier template. # +# Please make your own changes below this comment. # +########################################################## verifier: # https://www.inspec.io/ diff --git a/pre-commit_semantic-release.sh b/pre-commit_semantic-release.sh index 80f46e2..4437b90 100755 --- a/pre-commit_semantic-release.sh +++ b/pre-commit_semantic-release.sh @@ -3,20 +3,25 @@ ############################################################################### # (A) Update `FORMULA` with `${nextRelease.version}` ############################################################################### + sed -i -e "s_^\(version:\).*_\1 ${1}_" FORMULA ############################################################################### -# (B) Use `m2r2` to convert automatically produced `.md` docs to `.rst` +# (B) Update `AUTHORS.md` ############################################################################### -# Install `m2r2` -pip3 install m2r2 +maintainer contributor \ + --ignore-contributors dependabot[bot],renovate[bot],semantic-release-bot + +############################################################################### +# (C) Use `m2r` to convert automatically produced `.md` docs to `.rst` +############################################################################### # Copy and then convert the `.md` docs cp ./*.md docs/ cd docs/ || exit -m2r2 --overwrite ./*.md +m2r --overwrite ./*.md # Change excess `H1` headings to `H2` in converted `CHANGELOG.rst` sed -i -e '/^=.*$/s/=/-/g' CHANGELOG.rst diff --git a/release-rules.js b/release-rules.js deleted file mode 100644 index c63c850..0000000 --- a/release-rules.js +++ /dev/null @@ -1,18 +0,0 @@ -// No release is triggered for the types commented out below. -// Commits using these types will be incorporated into the next release. -// -// NOTE: Any changes here must be reflected in `CONTRIBUTING.md`. -module.exports = [ - {breaking: true, release: 'major'}, - // {type: 'build', release: 'patch'}, - // {type: 'chore', release: 'patch'}, - // {type: 'ci', release: 'patch'}, - {type: 'docs', release: 'patch'}, - {type: 'feat', release: 'minor'}, - {type: 'fix', release: 'patch'}, - {type: 'perf', release: 'patch'}, - {type: 'refactor', release: 'patch'}, - {type: 'revert', release: 'patch'}, - {type: 'style', release: 'patch'}, - {type: 'test', release: 'patch'}, -]; diff --git a/release.config.js b/release.config.js index 15bf012..54d6440 100644 --- a/release.config.js +++ b/release.config.js @@ -1,107 +1,54 @@ -module.exports = { - branch: 'master', +// Commit types appear in the changelog in this order +const commitTypes = [ + { type: 'feat', section: 'Features' }, + { type: 'fix', section: 'Bug Fixes' }, + { type: 'perf', section: 'Performance Improvements' }, + { type: 'revert', section: 'Reversions' }, + { type: 'refactor', section: 'Code Refactoring' }, + { type: 'docs', section: 'Documentation' }, + { type: 'test', section: 'Testing' }, + { type: 'style', section: 'Style Changes' }, + { type: 'ci', section: 'Continuous Integration' }, + { type: 'build', section: 'Build System' }, + { type: 'chore', section: 'Maintenance' } +] + +// Default rules can be found in `github.com/semantic-release/commit-analyzer/lib/default-release-rules.js` +// that cover feat, fix, perf and breaking. +// Commit types defined above but without release rules do not trigger a release +// but will be incorporated into the next release. +// NOTE: Any changes to commit types or release rules must be reflected in `CONTRIBUTING.rst`. +const releaseRules = [ + { type: 'docs', release: 'patch' }, + { type: 'refactor', release: 'patch' }, + { type: 'revert', release: 'patch' }, + { type: 'style', release: 'patch' }, + { type: 'test', release: 'patch' } +] + +const config = { + // TODO: remove this when we no longer process releases on GitLab CI repositoryUrl: 'https://github.com/saltstack-formulas/apt-formula', plugins: [ - ['@semantic-release/commit-analyzer', { - preset: 'angular', - releaseRules: './release-rules.js', - }], - '@semantic-release/release-notes-generator', - ['@semantic-release/changelog', { - changelogFile: 'CHANGELOG.md', - changelogTitle: '# Changelog', - }], - ['@semantic-release/exec', { - prepareCmd: 'sh ./pre-commit_semantic-release.sh ${nextRelease.version}', - }], - ['@semantic-release/git', { - assets: ['*.md', 'docs/*.rst', 'FORMULA'], - }], - '@semantic-release/github', + ['@semantic-release/commit-analyzer', { releaseRules }], + '@semantic-release/release-notes-generator', + ['@semantic-release/changelog', { + changelogFile: 'CHANGELOG.md', + changelogTitle: '# Changelog' + }], + ['@semantic-release/exec', { + // eslint-disable-next-line no-template-curly-in-string + prepareCmd: 'sh ./pre-commit_semantic-release.sh ${nextRelease.version}' + }], + ['@semantic-release/git', { + assets: ['*.md', 'docs/*.rst', 'FORMULA'] + }], + '@semantic-release/github' ], - generateNotes: { - preset: 'angular', - writerOpts: { - // Required due to upstream bug preventing all types being displayed. - // Bug: https://github.com/conventional-changelog/conventional-changelog/issues/317 - // Fix: https://github.com/conventional-changelog/conventional-changelog/pull/410 - transform: (commit, context) => { - const issues = [] + preset: 'conventionalcommits', + presetConfig: { + types: commitTypes + } +} - commit.notes.forEach(note => { - note.title = `BREAKING CHANGES` - }) - - // NOTE: Any changes here must be reflected in `CONTRIBUTING.md`. - if (commit.type === `feat`) { - commit.type = `Features` - } else if (commit.type === `fix`) { - commit.type = `Bug Fixes` - } else if (commit.type === `perf`) { - commit.type = `Performance Improvements` - } else if (commit.type === `revert`) { - commit.type = `Reverts` - } else if (commit.type === `docs`) { - commit.type = `Documentation` - } else if (commit.type === `style`) { - commit.type = `Styles` - } else if (commit.type === `refactor`) { - commit.type = `Code Refactoring` - } else if (commit.type === `test`) { - commit.type = `Tests` - } else if (commit.type === `build`) { - commit.type = `Build System` - // } else if (commit.type === `chore`) { - // commit.type = `Maintenance` - } else if (commit.type === `ci`) { - commit.type = `Continuous Integration` - } else { - return - } - - if (commit.scope === `*`) { - commit.scope = `` - } - - if (typeof commit.hash === `string`) { - commit.shortHash = commit.hash.substring(0, 7) - } - - if (typeof commit.subject === `string`) { - let url = context.repository - ? `${context.host}/${context.owner}/${context.repository}` - : context.repoUrl - if (url) { - url = `${url}/issues/` - // Issue URLs. - commit.subject = commit.subject.replace(/#([0-9]+)/g, (_, issue) => { - issues.push(issue) - return `[#${issue}](${url}${issue})` - }) - } - if (context.host) { - // User URLs. - commit.subject = commit.subject.replace(/\B@([a-z0-9](?:-?[a-z0-9/]){0,38})/g, (_, username) => { - if (username.includes('/')) { - return `@${username}` - } - - return `[@${username}](${context.host}/${username})` - }) - } - } - - // remove references that already appear in the subject - commit.references = commit.references.filter(reference => { - if (issues.indexOf(reference.issue) === -1) { - return true - } - - return false - }) - - return commit - }, - }, - }, -}; +module.exports = config diff --git a/test/salt/pillar/.gitkeep b/test/salt/pillar/.gitkeep new file mode 100644 index 0000000..e69de29 From e39f94608bcf9b1a9af834e182d718447f7bcd11 Mon Sep 17 00:00:00 2001 From: Dafydd Jones Date: Wed, 30 Sep 2026 15:48:30 +0100 Subject: [PATCH 2/2] test: account for `apt-key` removal in Debian 13 * no `apt-key` means we must specify `signed-by`. Only do this for Debian 13 currently, so that we still exercise the `apt-key` method on Debian 12 * To use `signed-by` for the Raspbian repo, we need to download the static key stored in this repo in an earlier commit. * The same applies to Ubuntu 26 --- kitchen.yml | 10 +++++++--- .../repositories/controls/repositories_spec.rb | 12 ++++++++++-- test/salt/pillar/repo-no-aptkey.sls | 7 +++++++ test/salt/pillar/repositories.sls | 4 +++- 4 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 test/salt/pillar/repo-no-aptkey.sls diff --git a/kitchen.yml b/kitchen.yml index 1e12898..ebf7847 100644 --- a/kitchen.yml +++ b/kitchen.yml @@ -256,9 +256,13 @@ suites: top.sls: base: '*': - - apt - pillars_from_files: - apt.sls: test/salt/pillar/repositories.sls + - repositories + 'G@os:Debian and G@osmajorrelease:13': + - match: compound + - repo-no-aptkey + 'G@os:Ubuntu and G@osmajorrelease:26': + - match: compound + - repo-no-aptkey dependencies: - name: states path: ./test/salt diff --git a/test/integration/repositories/controls/repositories_spec.rb b/test/integration/repositories/controls/repositories_spec.rb index 12cfdd1..3590ed2 100644 --- a/test/integration/repositories/controls/repositories_spec.rb +++ b/test/integration/repositories/controls/repositories_spec.rb @@ -39,7 +39,11 @@ its('mode') { should cmp '0644' } its(:content) do should match( - %r{deb \[arch=amd64\] https://cli-assets.heroku.com/apt ./} + %r{ + deb\ \[arch=amd64 + (?:\ signed-by=/etc/apt/keyrings/heroku-archive-keyring\.gpg)? + \]\ https://cli-assets\.heroku\.com/apt\ \./ + }x ) end end @@ -51,7 +55,11 @@ its('mode') { should cmp '0644' } its(:content) do should match( - %r{deb-src http://archive.raspbian.org/raspbian stable main} + %r{ + deb-src + \ (?:\[signed-by=/etc/apt/keyrings/raspbian-archive-keyring\.gpg\]\ )? + http://archive\.raspbian\.org/raspbian\ stable\ main + }x ) end end diff --git a/test/salt/pillar/repo-no-aptkey.sls b/test/salt/pillar/repo-no-aptkey.sls new file mode 100644 index 0000000..76d00e3 --- /dev/null +++ b/test/salt/pillar/repo-no-aptkey.sls @@ -0,0 +1,7 @@ +--- +apt: + repositories: + heroku: + opts: signed-by=/etc/apt/keyrings/heroku-archive-keyring.gpg + raspbian: + opts: signed-by=/etc/apt/keyrings/raspbian-archive-keyring.gpg diff --git a/test/salt/pillar/repositories.sls b/test/salt/pillar/repositories.sls index 91d82ce..e33d4cb 100644 --- a/test/salt/pillar/repositories.sls +++ b/test/salt/pillar/repositories.sls @@ -22,7 +22,9 @@ apt: distro: stable url: http://archive.raspbian.org/raspbian type: [source] - key_url: https://archive.raspbian.org/raspbian.public.key + key_url: "https://raw.githubusercontent.com/saltstack-formulas/apt-formula/\ + e186bc5c0cd91b0a2bc0fe20ced5be5c79470795/test/salt/states/files/\ + raspbian.public.key" saltstack: filename: saltstack.list distro: stable