gitlabform 5.5.4__tar.gz → 5.5.6__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.github/workflows/_main.yml +13 -15
- gitlabform-5.5.6/.github/workflows/_releases.yml +203 -0
- gitlabform-5.5.6/.github/workflows/build.yml +84 -0
- gitlabform-5.5.4/.github/workflows/prs.yml → gitlabform-5.5.6/.github/workflows/pr-ci-workflow.yml +25 -41
- gitlabform-5.5.6/.github/workflows/prs-entrypoint-forks.yml +34 -0
- gitlabform-5.5.6/.github/workflows/prs-entrypoint-main.yml +34 -0
- gitlabform-5.5.6/.github/workflows/static-analysis.yml +56 -0
- gitlabform-5.5.6/.github/workflows/tests-acceptance.yml +91 -0
- gitlabform-5.5.6/.github/workflows/tests-unit.yml +49 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/PKG-INFO +4 -4
- gitlabform-5.5.6/dev/docker.py +47 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/main.py +59 -16
- gitlabform-5.5.4/dev/release.py → gitlabform-5.5.6/dev/package.py +5 -65
- gitlabform-5.5.6/dev/release.py +275 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/changelog.md +29 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/contrib/releases.md +2 -0
- gitlabform-5.5.6/docs/images/Opencast-logo.png +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/index.md +2 -1
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/files.md +43 -1
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/files_processor.py +145 -108
- {gitlabform-5.5.4 → gitlabform-5.5.6}/pyproject.toml +14 -13
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tbump.toml +1 -1
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_branches.py +52 -1
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_files.py +176 -0
- gitlabform-5.5.6/tests/unit/processors/test_files_processor.py +312 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/uv.lock +218 -221
- gitlabform-5.5.4/.github/workflows/_releases.yml +0 -157
- gitlabform-5.5.4/.github/workflows/docs.yml +0 -28
- gitlabform-5.5.4/.github/workflows/linters.yml +0 -67
- gitlabform-5.5.4/.github/workflows/pr_on_fork.yml +0 -29
- gitlabform-5.5.4/.github/workflows/pr_on_main_repo.yml +0 -29
- gitlabform-5.5.4/.github/workflows/tests-premium.yml +0 -56
- gitlabform-5.5.4/.github/workflows/tests-standard.yml +0 -176
- gitlabform-5.5.4/.github/workflows/tests-ultimate.yml +0 -59
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.coveragerc +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.dockerignore +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.git-blame-ignore-revs +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.github/CODEOWNERS +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.github/ISSUE_TEMPLATE/question-or-other-issue.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.github/actions/setup-uv-local/README.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.github/actions/setup-uv-local/action.yml +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.github/dependabot.yml +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.gitignore +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.lgtm.yml +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.mypy.ini +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.overrides/gitlabform-logo-favicon.png +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.overrides/gitlabform-logo-favicon.svg +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/.python-version +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/CONTRIBUTING.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/Dockerfile +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/LICENSE +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/README.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/codecov.yml +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/common.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/docs.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/env.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/gitlab/await-healthy.sh +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/gitlab/gitlab.rb +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/gitlab/healthcheck-and-setup.sh +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/gitlab/run_gitlab_in_docker.sh +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/gitlab/tests.Dockerfile +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/infra.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/dev/qa.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/automation.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/contrib/coding_guidelines.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/contrib/implementation_design.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/contrib/index.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/contrib/local_development.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/contrib/workflows.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/features.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/images/egnyte-logo.svg +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/images/elastic-path-logo.svg +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/images/gitlabform-logo-square.png +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/images/gitlabform-logo.png +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/images/gitlabform-logo.svg +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/images/group-ldap-links-provider.png +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/images/liquidlight-logo.svg +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/images/roche-logo.png +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/images/stroeer-online-marketing-logo.svg +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/installation.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/archive_unarchive.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/avatar.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/badges.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/ci_cd_variables.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/deploy_keys.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/group_ldap_links.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/group_saml_links.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/index.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/integrations.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/job_token_scope.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/labels.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/members.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/merge_requests.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/pipeline_schedules.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/project_security_settings.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/project_transfer.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/protected_branches.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/protected_environments.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/push_mirrors.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/push_rules.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/resource_groups.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/settings.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/tags_protection.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/reference/webhooks.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/requirements.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/running.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/similar_apps.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/docs/upgrade.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlab-config/config.yml +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlab-config/gitlab-config.md +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/configuration/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/configuration/common.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/configuration/core.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/configuration/groups.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/configuration/projects.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/configuration/transform.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/constants.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/commits.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/core.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/group_badges.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/group_ldap_links.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/groups.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/merge_requests.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/pipelines.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/project_badges.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/project_deploy_keys.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/project_merge_requests_approvals.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/project_protected_environments.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/projects.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/python_gitlab.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/gitlab/variables.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/lists/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/lists/filter.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/lists/groups.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/lists/projects.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/output.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/abstract_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/application/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/application/application_settings_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/defining_keys.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_badges_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_hooks_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_labels_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_ldap_links_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_members_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_protected_branches_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_push_rules_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_saml_links_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_settings_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/group/group_variables_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/multiple_entities_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/badges_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/branches_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/deploy_keys_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/hooks_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/integrations_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/job_token_scope_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/members_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/merge_requests_approval_rules.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/merge_requests_approvals.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/project_labels_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/project_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/project_push_rules_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/project_security_settings.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/project_settings_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/project_variables_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/remote_mirrors_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/resource_groups_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/schedules_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/project/tags_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/shared/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/shared/protected_environments_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/util/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/util/branch_protection.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/util/decorators.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/util/difference_logger.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/util/labels_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/processors/util/variables_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/run.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/gitlabform/util.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/mkdocs.yml +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/prek.toml +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/conftest.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_branches.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_branches_users_case_insensitive.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_group_ldap_links.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_group_protected_branches.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_group_push_rules.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_group_saml_links.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_group_settings.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_group_variables.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_merge_request_approval_rules.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_merge_request_approvals_settings.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_protected_environments.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_push_rules.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/premium/test_tags.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_application_settings.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_archive_project.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_badges.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_deploy_keys.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_deploy_keys_all_projects.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_files_templates.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_group_avatar.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_group_badges.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_group_hooks.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_group_labels.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_group_members_case_insensitive.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_group_members_groups.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_group_members_users.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_group_settings.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_group_variables.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_hooks.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_integrations.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_job_token_scope.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_members.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_members_add_group.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_members_enforce.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_project_avatar.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_project_group_members_case_insensitive.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_project_labels.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_project_members_case_insensitve.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_project_settings.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_project_variables.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_remote_mirrors.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_resource_groups.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_running.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_scheduled_for_deletion_project.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_schedules.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_tags.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_token_from_config.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/standard/test_transfer_project.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/ultimate/test_group_members.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/ultimate/test_group_settings.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/ultimate/test_members.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/ultimate/test_project_security_settings.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/acceptance/ultimate/test_project_settings.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/test_case_sensitivity.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/test_inheritance_break_projects_and_groups.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/test_inheritance_break_subgroups.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/test_inheritance_break_validation.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/test_projects_and_groups.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/test_skip_groups_skip_projects.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/test_subgroups.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/test_yaml_version.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/transform/test_access_level_transformer.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/transform/test_group_transformer.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/transform/test_implicit_name_transformer.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/transform/test_user_and_group_transformers.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/configuration/transform/test_user_transformer.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/gitlab/test_core.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/gitlab/test_python_gitlab.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/processors/__init__.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/processors/test_abstract_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/processors/test_abstract_processors.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/processors/test_branches_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/processors/test_difference_logger.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/processors/test_group_protected_branches_processor.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/processors/test_schedules_processor_extended_cron_pattern.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/test_access_levels.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/test_non_empty_configs_provider.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/test_parse_args.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/test_projects_provider.py +0 -0
- {gitlabform-5.5.4 → gitlabform-5.5.6}/tests/unit/test_utils.py +0 -0
|
@@ -18,31 +18,29 @@ on:
|
|
|
18
18
|
|
|
19
19
|
jobs:
|
|
20
20
|
|
|
21
|
-
build
|
|
22
|
-
|
|
21
|
+
build:
|
|
22
|
+
name: Build
|
|
23
|
+
uses: ./.github/workflows/build.yml
|
|
23
24
|
with:
|
|
24
25
|
BRANCH_REF: ${{ github.ref }}
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
static-analysis:
|
|
28
|
+
name: Lint
|
|
29
|
+
uses: ./.github/workflows/static-analysis.yml
|
|
28
30
|
with:
|
|
29
31
|
BRANCH_REF: ${{ github.ref }}
|
|
30
32
|
|
|
31
|
-
tests
|
|
32
|
-
|
|
33
|
+
tests:
|
|
34
|
+
name: Tests
|
|
35
|
+
uses: ./.github/workflows/tests-unit.yml
|
|
33
36
|
with:
|
|
34
37
|
BRANCH_REF: ${{ github.ref }}
|
|
35
|
-
|
|
36
|
-
tests-premium:
|
|
37
|
-
uses: ./.github/workflows/tests-premium.yml
|
|
38
|
-
with:
|
|
39
|
-
BRANCH_REF: ${{ github.ref }}
|
|
40
|
-
environment: Main Tests
|
|
41
38
|
secrets: inherit
|
|
42
39
|
|
|
43
|
-
tests-
|
|
44
|
-
|
|
40
|
+
tests-acceptance:
|
|
41
|
+
name: Acceptance Tests
|
|
42
|
+
uses: ./.github/workflows/tests-acceptance.yml
|
|
45
43
|
with:
|
|
46
44
|
BRANCH_REF: ${{ github.ref }}
|
|
47
45
|
environment: Main Tests
|
|
48
|
-
secrets: inherit
|
|
46
|
+
secrets: inherit
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
name: Releases
|
|
2
|
+
run-name: >-
|
|
3
|
+
${{ github.event_name == 'workflow_dispatch'
|
|
4
|
+
&& format('Manual Release: {0}', inputs.manual_tag)
|
|
5
|
+
|| format('Release: {0}', github.event.workflow_run.display_title) }}
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
# Trigger A: Automatic execution when Main Workflow finishes
|
|
9
|
+
workflow_run:
|
|
10
|
+
workflows: ["Main branch"]
|
|
11
|
+
types:
|
|
12
|
+
- completed
|
|
13
|
+
|
|
14
|
+
# Trigger B: Manual execution fallback from the GitHub UI
|
|
15
|
+
workflow_dispatch:
|
|
16
|
+
inputs:
|
|
17
|
+
manual_tag:
|
|
18
|
+
description: 'Tag to release (e.g., v1.2.3)'
|
|
19
|
+
required: true
|
|
20
|
+
type: string
|
|
21
|
+
override_run_id:
|
|
22
|
+
description: 'Main Workflow Run ID (Required if downloading artifacts)'
|
|
23
|
+
required: true
|
|
24
|
+
type: string
|
|
25
|
+
|
|
26
|
+
permissions:
|
|
27
|
+
contents: write
|
|
28
|
+
packages: write
|
|
29
|
+
|
|
30
|
+
jobs:
|
|
31
|
+
prep-release:
|
|
32
|
+
name: Prepare release
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
outputs:
|
|
35
|
+
is_valid_release: ${{ steps.validate.outputs.is_valid }}
|
|
36
|
+
semver_tag: ${{ steps.validate.outputs.version }}
|
|
37
|
+
target_run_id: ${{ steps.validate.outputs.run_id }}
|
|
38
|
+
steps:
|
|
39
|
+
- name: Checkout Code
|
|
40
|
+
uses: actions/checkout@v4
|
|
41
|
+
|
|
42
|
+
- name: Configure uv environment
|
|
43
|
+
uses: ./.github/actions/setup-uv-local
|
|
44
|
+
with:
|
|
45
|
+
python-version: "3.14"
|
|
46
|
+
|
|
47
|
+
- name: Validate release conditions
|
|
48
|
+
id: validate
|
|
49
|
+
env:
|
|
50
|
+
# Authentication Token
|
|
51
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
52
|
+
# Upstream Workflow Configuration
|
|
53
|
+
# This is the name of the workflow that both manual and automated
|
|
54
|
+
# release validations depend on.
|
|
55
|
+
UPSTREAM_WORKFLOW_NAME: "Main branch"
|
|
56
|
+
# GitHub Context Variables (provided by the workflow_run or workflow_dispatch event)
|
|
57
|
+
REPO: ${{ github.repository }}
|
|
58
|
+
EVENT: ${{ github.event_name }}
|
|
59
|
+
CONCLUSION: ${{ github.event.workflow_run.conclusion }}
|
|
60
|
+
SHA: ${{ github.event.workflow_run.head_sha }}
|
|
61
|
+
AUTOMATED_UPSTREAM_RUN_ID: ${{ github.event.workflow_run.id }}
|
|
62
|
+
# Manual Trigger Inputs (from workflow_dispatch)
|
|
63
|
+
MANUAL_RELEASE_TAG: ${{ inputs.manual_tag }}
|
|
64
|
+
MANUAL_UPSTREAM_RUN_ID: ${{ inputs.override_run_id }}
|
|
65
|
+
run: uv run release gh-workflow-check
|
|
66
|
+
|
|
67
|
+
# TODO: Remove this job when all the release jobs have been migrated
|
|
68
|
+
# to consume build artifacts from Main workflow instead of rebuilding.
|
|
69
|
+
build-release-artifacts:
|
|
70
|
+
name: Build release artifacts
|
|
71
|
+
if: ${{ needs.prep-release.outputs.is_valid_release == 'true' }}
|
|
72
|
+
needs:
|
|
73
|
+
- prep-release
|
|
74
|
+
uses: ./.github/workflows/build.yml
|
|
75
|
+
with:
|
|
76
|
+
BRANCH_REF: ${{ needs.prep-release.outputs.semver_tag }}
|
|
77
|
+
|
|
78
|
+
publish-docs:
|
|
79
|
+
name: Publish Docs
|
|
80
|
+
if: ${{ needs.prep-release.outputs.is_valid_release == 'true' }}
|
|
81
|
+
needs:
|
|
82
|
+
- prep-release
|
|
83
|
+
runs-on: ubuntu-latest
|
|
84
|
+
steps:
|
|
85
|
+
- name: Checkout repository
|
|
86
|
+
uses: actions/checkout@v6
|
|
87
|
+
with:
|
|
88
|
+
ref: ${{ needs.prep-release.outputs.semver_tag }}
|
|
89
|
+
fetch-depth: 2
|
|
90
|
+
- name: Download built documentation
|
|
91
|
+
uses: actions/download-artifact@v4
|
|
92
|
+
with:
|
|
93
|
+
run-id: ${{ needs.prep-release.outputs.target_run_id }}
|
|
94
|
+
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
95
|
+
name: docs-site
|
|
96
|
+
path: site
|
|
97
|
+
- name: Deploy 🚀
|
|
98
|
+
uses: JamesIves/github-pages-deploy-action@v4.8.0
|
|
99
|
+
with:
|
|
100
|
+
branch: gh-pages
|
|
101
|
+
folder: site
|
|
102
|
+
|
|
103
|
+
publish-to-github:
|
|
104
|
+
name: Publish Release
|
|
105
|
+
if: ${{ needs.prep-release.outputs.is_valid_release == 'true' }}
|
|
106
|
+
needs:
|
|
107
|
+
- prep-release
|
|
108
|
+
runs-on: ubuntu-latest
|
|
109
|
+
steps:
|
|
110
|
+
- name: Create release in GitHub
|
|
111
|
+
uses: ncipollo/release-action@v1
|
|
112
|
+
with:
|
|
113
|
+
tag: ${{ needs.prep-release.outputs.semver_tag }}
|
|
114
|
+
name: ${{ needs.prep-release.outputs.semver_tag }}
|
|
115
|
+
body: "(this is a placeholder, it will be replaced with a changelog contents)"
|
|
116
|
+
token: ${{ secrets.GITHUB_TOKEN }}
|
|
117
|
+
|
|
118
|
+
publish-to-pypi:
|
|
119
|
+
name: Publish PyPI
|
|
120
|
+
if: ${{ needs.prep-release.outputs.is_valid_release == 'true' }}
|
|
121
|
+
needs:
|
|
122
|
+
- prep-release
|
|
123
|
+
- build-release-artifacts
|
|
124
|
+
runs-on: ubuntu-latest
|
|
125
|
+
environment:
|
|
126
|
+
name: pypi
|
|
127
|
+
url: https://pypi.org/p/gitlabform
|
|
128
|
+
permissions:
|
|
129
|
+
id-token: write # IMPORTANT: this permission is mandatory for trusted publishing
|
|
130
|
+
steps:
|
|
131
|
+
- name: Checkout repository
|
|
132
|
+
uses: actions/checkout@v6
|
|
133
|
+
with:
|
|
134
|
+
ref: ${{ needs.prep-release.outputs.semver_tag }}
|
|
135
|
+
fetch-depth: 2
|
|
136
|
+
- name: Configure uv environment
|
|
137
|
+
uses: ./.github/actions/setup-uv-local
|
|
138
|
+
with:
|
|
139
|
+
python-version: "3.14"
|
|
140
|
+
- name: Setup Python ${{ env.UV_PYTHON }} and install dependencies
|
|
141
|
+
run: |
|
|
142
|
+
uv sync --frozen --no-dev --group release
|
|
143
|
+
# TODO: In a separate PR, consume the build artifact (package-dist) uploaded
|
|
144
|
+
# in build-release-artifacts instead of rebuilding and verifying the package here.
|
|
145
|
+
- name: Build and verify the package
|
|
146
|
+
run: |
|
|
147
|
+
uv run --no-sync package build
|
|
148
|
+
uv run --no-sync package verify
|
|
149
|
+
- name: Publish to PyPI
|
|
150
|
+
run: |
|
|
151
|
+
uv run --no-sync release pypi
|
|
152
|
+
|
|
153
|
+
publish-to-ghcr:
|
|
154
|
+
name: Publish GHCR
|
|
155
|
+
if: ${{ needs.prep-release.outputs.is_valid_release == 'true' }}
|
|
156
|
+
needs:
|
|
157
|
+
- prep-release
|
|
158
|
+
- build-release-artifacts
|
|
159
|
+
- publish-to-pypi
|
|
160
|
+
runs-on: ubuntu-latest
|
|
161
|
+
steps:
|
|
162
|
+
# TODO: In a separate PR, optimize docker image build to consume the built package artifact
|
|
163
|
+
# (package-dist) instead of copying and rebuilding from source if applicable.
|
|
164
|
+
- name: Checkout repository
|
|
165
|
+
uses: actions/checkout@v6
|
|
166
|
+
with:
|
|
167
|
+
ref: ${{ needs.prep-release.outputs.semver_tag }}
|
|
168
|
+
- name: Get the version from the tag
|
|
169
|
+
run: echo "VERSION=${GITHUB_REF/refs\/tags\/v/}" >> $GITHUB_ENV
|
|
170
|
+
- name: Docker metadata
|
|
171
|
+
id: metadata
|
|
172
|
+
uses: docker/metadata-action@v6
|
|
173
|
+
with:
|
|
174
|
+
images: |
|
|
175
|
+
ghcr.io/gitlabform/gitlabform
|
|
176
|
+
flavor: |
|
|
177
|
+
latest=auto
|
|
178
|
+
tags: |
|
|
179
|
+
type=pep440,pattern={{version}}
|
|
180
|
+
type=pep440,pattern={{major}}.{{minor}}
|
|
181
|
+
type=pep440,pattern={{major}}
|
|
182
|
+
- name: Set up QEMU
|
|
183
|
+
uses: docker/setup-qemu-action@v4
|
|
184
|
+
- name: Set up Docker Buildx
|
|
185
|
+
uses: docker/setup-buildx-action@v4
|
|
186
|
+
# gitlabform/gitlabform image is going to be here
|
|
187
|
+
- name: Login to GitHub Container Registry
|
|
188
|
+
uses: docker/login-action@v4
|
|
189
|
+
with:
|
|
190
|
+
registry: ghcr.io
|
|
191
|
+
username: ${{ github.repository_owner }}
|
|
192
|
+
# This token is provided by Actions, you do not need to create your own token
|
|
193
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
194
|
+
# Docker image will use UV internally and builds the image from the Codebase at the current tag, rather than downloding from PyPi
|
|
195
|
+
- name: Publish image to registries
|
|
196
|
+
uses: docker/build-push-action@v7
|
|
197
|
+
with:
|
|
198
|
+
push: true
|
|
199
|
+
context: .
|
|
200
|
+
file: Dockerfile
|
|
201
|
+
platforms: linux/amd64,linux/arm64
|
|
202
|
+
tags: ${{ steps.metadata.outputs.tags }}
|
|
203
|
+
labels: ${{ steps.metadata.outputs.labels }}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
name: Build and package artifacts
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
BRANCH_REF:
|
|
7
|
+
type: string
|
|
8
|
+
required: true
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
package:
|
|
15
|
+
name: Package
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
steps:
|
|
18
|
+
- name: Checkout repository
|
|
19
|
+
uses: actions/checkout@v6
|
|
20
|
+
with:
|
|
21
|
+
ref: ${{ inputs.BRANCH_REF }}
|
|
22
|
+
fetch-depth: 2
|
|
23
|
+
- name: Configure uv environment
|
|
24
|
+
uses: ./.github/actions/setup-uv-local
|
|
25
|
+
with:
|
|
26
|
+
python-version: "3.14"
|
|
27
|
+
- name: Install dependencies
|
|
28
|
+
run: uv sync --frozen --no-dev --group release
|
|
29
|
+
- name: Build and verify the package
|
|
30
|
+
run: |
|
|
31
|
+
uv run --no-sync package build
|
|
32
|
+
uv run --no-sync package verify
|
|
33
|
+
- name: Upload package distribution
|
|
34
|
+
uses: actions/upload-artifact@v4
|
|
35
|
+
with:
|
|
36
|
+
name: package-dist
|
|
37
|
+
path: dist/*
|
|
38
|
+
|
|
39
|
+
docs:
|
|
40
|
+
name: Docs
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
steps:
|
|
43
|
+
- name: Checkout repository
|
|
44
|
+
uses: actions/checkout@v6
|
|
45
|
+
with:
|
|
46
|
+
ref: ${{ inputs.BRANCH_REF }}
|
|
47
|
+
fetch-depth: 2
|
|
48
|
+
- name: Configure uv environment
|
|
49
|
+
uses: ./.github/actions/setup-uv-local
|
|
50
|
+
with:
|
|
51
|
+
python-version: "3.14"
|
|
52
|
+
- name: Install dependencies
|
|
53
|
+
run: uv sync --frozen --no-dev --group docs
|
|
54
|
+
- name: Build documentation
|
|
55
|
+
run: uv run --no-sync docs build
|
|
56
|
+
- name: Upload docs site
|
|
57
|
+
uses: actions/upload-artifact@v4
|
|
58
|
+
with:
|
|
59
|
+
name: docs-site
|
|
60
|
+
path: site
|
|
61
|
+
|
|
62
|
+
smoke-tests:
|
|
63
|
+
name: "Smoke test - (${{ matrix.os == 'ubuntu-latest' && 'Linux' || matrix.os == 'macos-latest' && 'macOS' || 'Windows' }}, Python ${{ matrix.python-version }})"
|
|
64
|
+
strategy:
|
|
65
|
+
fail-fast: false
|
|
66
|
+
matrix:
|
|
67
|
+
os: [ubuntu-latest, macos-latest, windows-latest]
|
|
68
|
+
python-version: ["3.14", "3.12"]
|
|
69
|
+
needs: package
|
|
70
|
+
runs-on: ${{ matrix.os }}
|
|
71
|
+
steps:
|
|
72
|
+
- name: Checkout repository
|
|
73
|
+
uses: actions/checkout@v6
|
|
74
|
+
with:
|
|
75
|
+
ref: ${{ inputs.BRANCH_REF }}
|
|
76
|
+
fetch-depth: 2
|
|
77
|
+
- name: Configure uv environment
|
|
78
|
+
uses: ./.github/actions/setup-uv-local
|
|
79
|
+
with:
|
|
80
|
+
python-version: ${{ matrix.python-version }}
|
|
81
|
+
- name: Install dependencies
|
|
82
|
+
run: uv sync --frozen --no-dev --group test
|
|
83
|
+
- name: Run smoke tests
|
|
84
|
+
run: uv run --no-sync gitlabform -V
|
gitlabform-5.5.4/.github/workflows/prs.yml → gitlabform-5.5.6/.github/workflows/pr-ci-workflow.yml
RENAMED
|
@@ -1,4 +1,11 @@
|
|
|
1
|
-
name:
|
|
1
|
+
name: "CI - Build · Lint · Tests"
|
|
2
|
+
|
|
3
|
+
# Reusable workflow containing the actual CI jobs for pull request validation.
|
|
4
|
+
# This file is called by prs-entrypoint.yml and is intentionally separated so that
|
|
5
|
+
# event/routing logic stays in the entrypoint while the CI job set remains reusable.
|
|
6
|
+
|
|
7
|
+
# This reusable workflow does not receive secrets automatically from the PR event.
|
|
8
|
+
# The caller workflow (prs-entrypoint.yml) must explicitly pass secrets when calling it.
|
|
2
9
|
|
|
3
10
|
on:
|
|
4
11
|
workflow_call:
|
|
@@ -9,54 +16,31 @@ on:
|
|
|
9
16
|
|
|
10
17
|
jobs:
|
|
11
18
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
- name: Approve
|
|
16
|
-
run: echo For security reasons, all pull requests need to be approved first before running the Premium Acceptance Tests.
|
|
17
|
-
|
|
18
|
-
build-docs:
|
|
19
|
-
uses: ./.github/workflows/docs.yml
|
|
20
|
-
permissions:
|
|
21
|
-
contents: read
|
|
22
|
-
pull-requests: write
|
|
23
|
-
with:
|
|
24
|
-
branch_ref: ${{ inputs.BRANCH_REF }}
|
|
25
|
-
|
|
26
|
-
linters:
|
|
27
|
-
uses: ./.github/workflows/linters.yml
|
|
28
|
-
permissions:
|
|
29
|
-
contents: read
|
|
30
|
-
pull-requests: write
|
|
19
|
+
build:
|
|
20
|
+
name: Build
|
|
21
|
+
uses: ./.github/workflows/build.yml
|
|
31
22
|
with:
|
|
32
|
-
|
|
23
|
+
BRANCH_REF: ${{ inputs.BRANCH_REF }}
|
|
33
24
|
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
contents: read
|
|
38
|
-
pull-requests: write
|
|
25
|
+
static-analysis:
|
|
26
|
+
name: Lint
|
|
27
|
+
uses: ./.github/workflows/static-analysis.yml
|
|
39
28
|
with:
|
|
40
|
-
|
|
29
|
+
BRANCH_REF: ${{ inputs.BRANCH_REF }}
|
|
41
30
|
|
|
42
|
-
tests
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
contents: read
|
|
46
|
-
pull-requests: write
|
|
31
|
+
tests:
|
|
32
|
+
name: Tests
|
|
33
|
+
uses: ./.github/workflows/tests-unit.yml
|
|
47
34
|
with:
|
|
48
|
-
|
|
49
|
-
environment: Integrate Pull Request # Our dummy environment
|
|
35
|
+
BRANCH_REF: ${{ inputs.BRANCH_REF }}
|
|
50
36
|
secrets: inherit
|
|
51
37
|
|
|
52
|
-
tests-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
contents: read
|
|
56
|
-
pull-requests: write
|
|
38
|
+
tests-acceptance:
|
|
39
|
+
name: Acceptance Tests
|
|
40
|
+
uses: ./.github/workflows/tests-acceptance.yml
|
|
57
41
|
with:
|
|
58
|
-
|
|
59
|
-
environment: Integrate Pull Request
|
|
42
|
+
BRANCH_REF: ${{ inputs.BRANCH_REF }}
|
|
43
|
+
environment: Integrate Pull Request
|
|
60
44
|
secrets: inherit
|
|
61
45
|
|
|
62
46
|
analyze:
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: "CI - Fork PRs"
|
|
2
|
+
|
|
3
|
+
# This workflow handles pull requests from forked repositories.
|
|
4
|
+
# It uses pull_request_target so the reusable CI workflow can receive explicit secrets.
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
actions: read
|
|
8
|
+
contents: read
|
|
9
|
+
pull-requests: write
|
|
10
|
+
security-events: write
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
pull_request_target:
|
|
17
|
+
branches:
|
|
18
|
+
- main
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
pr_jobs:
|
|
22
|
+
name: "Pipeline"
|
|
23
|
+
# github.event.pull_request object defined here: https://docs.github.com/en/rest/pulls/pulls?apiVersion=2026-03-10#get-a-pull-request
|
|
24
|
+
if: ${{ github.event.pull_request.head.repo.full_name != github.repository }}
|
|
25
|
+
uses: ./.github/workflows/pr-ci-workflow.yml
|
|
26
|
+
permissions:
|
|
27
|
+
actions: read
|
|
28
|
+
contents: read
|
|
29
|
+
packages: read
|
|
30
|
+
pull-requests: write
|
|
31
|
+
security-events: write
|
|
32
|
+
with:
|
|
33
|
+
BRANCH_REF: ${{ github.event.pull_request.head.sha }}
|
|
34
|
+
secrets: inherit
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
name: "CI - PRs"
|
|
2
|
+
|
|
3
|
+
# This workflow is the entrypoint for pull requests opened from host repository.
|
|
4
|
+
# Fork PRs are handled by prs-entrypoint-forks.yml using pull_request_target.
|
|
5
|
+
# It forwards the branch SHA and explicit secrets to the reusable workflow.
|
|
6
|
+
|
|
7
|
+
permissions:
|
|
8
|
+
actions: read
|
|
9
|
+
contents: read
|
|
10
|
+
pull-requests: write
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
pull_request:
|
|
17
|
+
branches:
|
|
18
|
+
- main
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
pr_jobs:
|
|
22
|
+
name: "Pipeline"
|
|
23
|
+
# github.event.pull_request object defined here: https://docs.github.com/en/rest/pulls/pulls?apiVersion=2026-03-10#get-a-pull-request
|
|
24
|
+
if: ${{ github.event.pull_request.head.repo.full_name == github.repository }}
|
|
25
|
+
uses: ./.github/workflows/pr-ci-workflow.yml
|
|
26
|
+
permissions:
|
|
27
|
+
actions: read
|
|
28
|
+
contents: read
|
|
29
|
+
packages: read
|
|
30
|
+
pull-requests: write
|
|
31
|
+
security-events: write
|
|
32
|
+
with:
|
|
33
|
+
BRANCH_REF: ${{ github.event.pull_request.head.sha }}
|
|
34
|
+
secrets: inherit
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Static Analysis
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
BRANCH_REF:
|
|
7
|
+
type: string
|
|
8
|
+
required: true
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
# This workflow currently covers lockfile verification plus lint-style checks.
|
|
14
|
+
# Bandit is treated here as a lightweight quality/security guardrail, not a full
|
|
15
|
+
# security scanning pipeline. Future security-only workflows can be introduced
|
|
16
|
+
# once heavier security tooling is needed.
|
|
17
|
+
jobs:
|
|
18
|
+
lockfile-verify:
|
|
19
|
+
name: Lockfile
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
steps:
|
|
22
|
+
- name: Checkout repository
|
|
23
|
+
uses: actions/checkout@v6
|
|
24
|
+
with:
|
|
25
|
+
ref: ${{ inputs.BRANCH_REF }}
|
|
26
|
+
- name: Configure uv environment
|
|
27
|
+
uses: ./.github/actions/setup-uv-local
|
|
28
|
+
- name: Verify that uv.lock is in sync
|
|
29
|
+
run: uv lock --check
|
|
30
|
+
|
|
31
|
+
linting:
|
|
32
|
+
name: "${{ matrix.check == 'black' && 'Black' || matrix.check == 'mypy' && 'Mypy' || 'Bandit' }}"
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
strategy:
|
|
35
|
+
fail-fast: false
|
|
36
|
+
matrix:
|
|
37
|
+
check: [black, mypy, bandit]
|
|
38
|
+
steps:
|
|
39
|
+
- name: Checkout repository
|
|
40
|
+
uses: actions/checkout@v6
|
|
41
|
+
with:
|
|
42
|
+
ref: ${{ inputs.BRANCH_REF }}
|
|
43
|
+
fetch-depth: 2
|
|
44
|
+
- name: Configure uv environment
|
|
45
|
+
uses: ./.github/actions/setup-uv-local
|
|
46
|
+
- name: Install dependencies
|
|
47
|
+
run: uv sync --frozen --no-dev --group lint
|
|
48
|
+
- name: Run ${{ matrix.check }}
|
|
49
|
+
run: |
|
|
50
|
+
if [ "${{ matrix.check }}" == "black" ]; then
|
|
51
|
+
uv run --no-sync qa lint black --check .
|
|
52
|
+
elif [ "${{ matrix.check }}" == "mypy" ]; then
|
|
53
|
+
uv run --no-sync qa lint mypy .
|
|
54
|
+
elif [ "${{ matrix.check }}" == "bandit" ]; then
|
|
55
|
+
uv run --no-sync qa lint bandit .
|
|
56
|
+
fi
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
name: Acceptance Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
workflow_call:
|
|
5
|
+
inputs:
|
|
6
|
+
BRANCH_REF:
|
|
7
|
+
type: string
|
|
8
|
+
required: true
|
|
9
|
+
environment:
|
|
10
|
+
description: "Environment to run licensed acceptance tests in: 'Integrate Pull Request' for PRs (requires approval) or 'Main Tests' for main/release runs."
|
|
11
|
+
type: string
|
|
12
|
+
required: true
|
|
13
|
+
secrets:
|
|
14
|
+
GITLAB_EE_LICENSE:
|
|
15
|
+
required: false
|
|
16
|
+
GITLAB_EE_ULTIMATE_LICENSE:
|
|
17
|
+
required: false
|
|
18
|
+
CODECOV_TOKEN:
|
|
19
|
+
required: true
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: read
|
|
23
|
+
actions: read # Required by codecov/codecov-action
|
|
24
|
+
|
|
25
|
+
jobs:
|
|
26
|
+
acceptance-standard:
|
|
27
|
+
name: "GitLab ${{ matrix.flavor == 'ce' && 'CE' || 'EE' }}"
|
|
28
|
+
runs-on: ubuntu-latest
|
|
29
|
+
strategy:
|
|
30
|
+
matrix:
|
|
31
|
+
flavor: [ce, ee]
|
|
32
|
+
fail-fast: false
|
|
33
|
+
steps:
|
|
34
|
+
- name: Checkout repository
|
|
35
|
+
uses: actions/checkout@v6
|
|
36
|
+
with:
|
|
37
|
+
ref: ${{ inputs.BRANCH_REF }}
|
|
38
|
+
fetch-depth: 2
|
|
39
|
+
- name: Configure uv environment
|
|
40
|
+
uses: ./.github/actions/setup-uv-local
|
|
41
|
+
- name: Install dependencies
|
|
42
|
+
run: uv sync --frozen --no-dev --group test
|
|
43
|
+
- name: Start GitLab (${{ matrix.flavor }}) in docker
|
|
44
|
+
run: uv run --no-sync gitlab-local up --gitlab-flavor ${{ matrix.flavor }}
|
|
45
|
+
- name: Run Standard acceptance tests for ${{ matrix.flavor }} flavor
|
|
46
|
+
run: uv run --no-sync qa test tests/acceptance/standard --cov=. --cov-report=xml --durations=0 --reruns 3 --reruns-delay 10 --log-cli-level=WARNING
|
|
47
|
+
- name: Upload coverage
|
|
48
|
+
uses: Wandalen/wretry.action@v3
|
|
49
|
+
with:
|
|
50
|
+
action: codecov/codecov-action@v3
|
|
51
|
+
with: |
|
|
52
|
+
name: codecov-acceptance-test-standard-${{ matrix.flavor }}
|
|
53
|
+
flags: integration
|
|
54
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
55
|
+
attempt_limit: 5
|
|
56
|
+
attempt_delay: 10000
|
|
57
|
+
|
|
58
|
+
acceptance-licensed:
|
|
59
|
+
name: "GitLab ${{ matrix.tier == 'premium' && 'Premium' || 'Ultimate' }}"
|
|
60
|
+
environment: ${{ inputs.environment }}
|
|
61
|
+
runs-on: ubuntu-latest
|
|
62
|
+
strategy:
|
|
63
|
+
matrix:
|
|
64
|
+
tier: [premium, ultimate]
|
|
65
|
+
fail-fast: false
|
|
66
|
+
steps:
|
|
67
|
+
- name: Checkout repository
|
|
68
|
+
uses: actions/checkout@v6
|
|
69
|
+
with:
|
|
70
|
+
ref: ${{ inputs.BRANCH_REF }}
|
|
71
|
+
fetch-depth: 2
|
|
72
|
+
- name: Configure uv environment
|
|
73
|
+
uses: ./.github/actions/setup-uv-local
|
|
74
|
+
- name: Install dependencies
|
|
75
|
+
run: uv sync --frozen --no-dev --group test
|
|
76
|
+
- name: Start GitLab (${{ matrix.tier }}) in docker
|
|
77
|
+
env:
|
|
78
|
+
GITLAB_EE_LICENSE: "${{ matrix.tier == 'premium' && secrets.GITLAB_EE_LICENSE || secrets.GITLAB_EE_ULTIMATE_LICENSE }}"
|
|
79
|
+
run: uv run --no-sync gitlab-local up
|
|
80
|
+
- name: Run acceptance Tests for ${{ matrix.tier }} features
|
|
81
|
+
run: uv run --no-sync qa test tests/acceptance/${{ matrix.tier }} --cov=. --cov-report=xml --durations=0 --reruns 3 --reruns-delay 10 --log-cli-level=WARNING
|
|
82
|
+
- name: Upload coverage
|
|
83
|
+
uses: Wandalen/wretry.action@v3
|
|
84
|
+
with:
|
|
85
|
+
action: codecov/codecov-action@v3
|
|
86
|
+
with: |
|
|
87
|
+
name: codecov-acceptance-test-${{ matrix.tier }}
|
|
88
|
+
flags: integration
|
|
89
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
90
|
+
attempt_limit: 5
|
|
91
|
+
attempt_delay: 10000
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
name: Unit Tests
|
|
2
|
+
# Reusable workflow for unit tests only.
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
workflow_call:
|
|
6
|
+
inputs:
|
|
7
|
+
BRANCH_REF:
|
|
8
|
+
type: string
|
|
9
|
+
required: true
|
|
10
|
+
secrets:
|
|
11
|
+
CODECOV_TOKEN:
|
|
12
|
+
required: true
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: read
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
unit:
|
|
19
|
+
name: "Unit (${{ matrix.python-version }})"
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
strategy:
|
|
22
|
+
fail-fast: false
|
|
23
|
+
matrix:
|
|
24
|
+
python-version: ["3.14", "3.12"]
|
|
25
|
+
steps:
|
|
26
|
+
- name: Checkout repository
|
|
27
|
+
uses: actions/checkout@v6
|
|
28
|
+
with:
|
|
29
|
+
ref: ${{ inputs.BRANCH_REF }}
|
|
30
|
+
fetch-depth: 2
|
|
31
|
+
- name: Configure uv environment
|
|
32
|
+
uses: ./.github/actions/setup-uv-local
|
|
33
|
+
with:
|
|
34
|
+
python-version: ${{ matrix.python-version }}
|
|
35
|
+
- name: Install dependencies
|
|
36
|
+
run: uv sync --frozen --no-dev --group test
|
|
37
|
+
- name: Run unit tests
|
|
38
|
+
run: uv run --no-sync qa test tests/unit --cov=. --cov-report=xml --log-cli-level=WARNING
|
|
39
|
+
- name: Upload coverage to Codecov
|
|
40
|
+
uses: Wandalen/wretry.action@v3
|
|
41
|
+
with:
|
|
42
|
+
action: codecov/codecov-action@v3
|
|
43
|
+
with: |
|
|
44
|
+
name: unit-tests-${{ matrix.python-version }}
|
|
45
|
+
flags: unittests
|
|
46
|
+
fail_ci_if_error: true
|
|
47
|
+
token: ${{ secrets.CODECOV_TOKEN }}
|
|
48
|
+
attempt_limit: 5
|
|
49
|
+
attempt_delay: 10000
|