local PythonVersion(pyversion='3.8') = { name: 'python' + std.strReplace(pyversion, '.', '') + '-pytest', image: 'python:' + pyversion, environment: { PY_COLORS: 1, }, commands: [ 'pip install poetry -qq', 'poetry config experimental.new-installer false', 'poetry install --all-extras', 'poetry run pytest', ], depends_on: [ 'clone', ], }; local AnsibleVersion(version='devel') = { local gitversion = if version == 'devel' then 'devel' else 'stable-' + version, name: 'ansible-' + std.strReplace(version, '.', ''), image: 'python:3.9', environment: { PY_COLORS: 1, }, commands: [ 'pip install poetry -qq', 'poetry config experimental.new-installer false', 'poetry install', 'poetry run pip install https://github.com/ansible/ansible/archive/' + gitversion + '.tar.gz --disable-pip-version-check', 'poetry run ansible --version', 'poetry run ansible-test sanity --exclude .chglog/ --exclude .drone.yml --python 3.9', ], depends_on: [ 'clone', ], }; local PipelineLint = { kind: 'pipeline', name: 'lint', platform: { os: 'linux', arch: 'amd64', }, steps: [ { name: 'check-format', image: 'python:3.11', environment: { PY_COLORS: 1, }, commands: [ 'git fetch -tq', 'pip install poetry -qq', 'poetry config experimental.new-installer false', 'poetry install --all-extras', 'poetry run yapf -dr ./plugins', ], }, { name: 'check-coding', image: 'python:3.11', environment: { PY_COLORS: 1, }, commands: [ 'git fetch -tq', 'pip install poetry -qq', 'poetry config experimental.new-installer false', 'poetry install --all-extras', 'poetry run ruff ./plugins', ], }, ], trigger: { ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'], }, }; local PipelineUnitTest = { kind: 'pipeline', name: 'unit-test', platform: { os: 'linux', arch: 'amd64', }, steps: [ PythonVersion(pyversion='3.8'), PythonVersion(pyversion='3.9'), PythonVersion(pyversion='3.10'), PythonVersion(pyversion='3.11'), ], depends_on: [ 'lint', ], trigger: { ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'], }, }; local PipelineSanityTest = { kind: 'pipeline', name: 'sanity-test', platform: { os: 'linux', arch: 'amd64', }, workspace: { path: '/drone/src/ansible_collections/${DRONE_REPO_NAME/./\\/}', }, steps: [ AnsibleVersion(version='devel'), AnsibleVersion(version='2.14'), AnsibleVersion(version='2.13'), ], depends_on: [ 'unit-test', ], trigger: { ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'], }, }; local PipelineBuild = { kind: 'pipeline', name: 'build', platform: { os: 'linux', arch: 'amd64', }, steps: [ { name: 'build', image: 'python:3.11', commands: [ 'GALAXY_VERSION=${DRONE_TAG##v}', "sed -i 's/version: 0.0.0/version: '\"$${GALAXY_VERSION:-0.0.0}\"'/g' galaxy.yml", 'pip install poetry -qq', 'poetry config experimental.new-installer false', 'poetry install --all-extras', 'poetry run ansible-galaxy collection build --output-path dist/', ], }, { name: 'checksum', image: 'alpine', commands: [ 'cd dist/ && sha256sum * > ../sha256sum.txt', ], }, { name: 'changelog-generate', image: 'thegeeklab/git-chglog', commands: [ 'git fetch -tq', 'git-chglog --no-color --no-emoji -o CHANGELOG.md ${DRONE_TAG:---next-tag unreleased unreleased}', ], }, { name: 'changelog-format', image: 'thegeeklab/alpine-tools', commands: [ 'prettier CHANGELOG.md', 'prettier -w CHANGELOG.md', ], }, { name: 'publish-gitea', image: 'plugins/gitea-release', settings: { overwrite: true, api_key: { from_secret: 'gitea_token' }, files: ['dist/*', 'sha256sum.txt'], base_url: 'https://gitea.rknet.org', title: '${DRONE_TAG}', note: 'CHANGELOG.md', }, when: { ref: ['refs/tags/**'], }, }, ], depends_on: [ 'sanity-test', ], trigger: { ref: ['refs/heads/main', 'refs/tags/**', 'refs/pull/**'], }, }; local PipelineDocumentation = { kind: 'pipeline', name: 'documentation', platform: { os: 'linux', arch: 'amd64', }, steps: [ { name: 'publish', image: 'plugins/gh-pages', settings: { netrc_machine: 'gitea.rknet.org', pages_directory: 'docs/', password: { from_secret: 'gitea_token', }, remote_url: 'https://gitea.rknet.org/ansible/${DRONE_REPO_NAME}', target_branch: 'docs', username: { from_secret: 'gitea_username', }, }, }, ], depends_on: [ 'build', ], trigger: { ref: ['refs/heads/main', 'refs/tags/**'], }, }; local PipelineNotifications = { kind: 'pipeline', name: 'notifications', platform: { os: 'linux', arch: 'amd64', }, steps: [ { name: 'matrix', image: 'thegeeklab/drone-matrix', settings: { homeserver: { from_secret: 'matrix_homeserver' }, roomid: { from_secret: 'matrix_roomid' }, template: 'Status: **{{ .Build.Status }}**
Build: [{{ .Repo.Owner }}/{{ .Repo.Name }}]({{ .Build.Link }}){{ if .Build.Branch }} ({{ .Build.Branch }}){{ end }} by {{ .Commit.Author }}
Message: {{ .Commit.Message.Title }}', username: { from_secret: 'matrix_username' }, password: { from_secret: 'matrix_password' }, }, }, ], depends_on: [ 'documentation', ], trigger: { ref: ['refs/heads/main', 'refs/tags/**'], status: ['success', 'failure'], }, }; [ PipelineLint, PipelineUnitTest, PipelineSanityTest, PipelineBuild, PipelineDocumentation, PipelineNotifications, ]