yukka 0.1.8__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.
- yukka-0.1.8/.editorconfig +41 -0
- yukka-0.1.8/.env.example +9 -0
- yukka-0.1.8/.gitignore +108 -0
- yukka-0.1.8/.gitlab/COMPARISON.md +256 -0
- yukka-0.1.8/.gitlab/README.md +312 -0
- yukka-0.1.8/.gitlab/SUMMARY.md +207 -0
- yukka-0.1.8/.gitlab/TESTING.md +288 -0
- yukka-0.1.8/.gitlab/template/marimo_job_template.yml.jinja +20 -0
- yukka-0.1.8/.gitlab/workflows/rhiza_book.yml +50 -0
- yukka-0.1.8/.gitlab/workflows/rhiza_ci.yml +41 -0
- yukka-0.1.8/.gitlab/workflows/rhiza_deptry.yml +21 -0
- yukka-0.1.8/.gitlab/workflows/rhiza_marimo.yml +82 -0
- yukka-0.1.8/.gitlab/workflows/rhiza_pre-commit.yml +26 -0
- yukka-0.1.8/.gitlab/workflows/rhiza_release.yml +199 -0
- yukka-0.1.8/.gitlab/workflows/rhiza_renovate.yml +62 -0
- yukka-0.1.8/.gitlab/workflows/rhiza_sync.yml +81 -0
- yukka-0.1.8/.gitlab/workflows/rhiza_validate.yml +24 -0
- yukka-0.1.8/.gitlab-ci.yml +133 -0
- yukka-0.1.8/.pre-commit-config.yaml +67 -0
- yukka-0.1.8/.python-version +1 -0
- yukka-0.1.8/.rhiza/.cfg.toml +34 -0
- yukka-0.1.8/.rhiza/.gitignore +2 -0
- yukka-0.1.8/.rhiza/.rhiza-version +1 -0
- yukka-0.1.8/.rhiza/assets/rhiza-logo.svg +81 -0
- yukka-0.1.8/.rhiza/docs/ASSETS.md +14 -0
- yukka-0.1.8/.rhiza/docs/CONFIG.md +45 -0
- yukka-0.1.8/.rhiza/docs/LFS.md +161 -0
- yukka-0.1.8/.rhiza/docs/PRIVATE_PACKAGES.md +233 -0
- yukka-0.1.8/.rhiza/docs/RELEASING.md +99 -0
- yukka-0.1.8/.rhiza/docs/TOKEN_SETUP.md +102 -0
- yukka-0.1.8/.rhiza/docs/WORKFLOWS.md +248 -0
- yukka-0.1.8/.rhiza/make.d/README.md +126 -0
- yukka-0.1.8/.rhiza/make.d/book.mk +130 -0
- yukka-0.1.8/.rhiza/make.d/bootstrap.mk +107 -0
- yukka-0.1.8/.rhiza/make.d/custom-env.mk +9 -0
- yukka-0.1.8/.rhiza/make.d/custom-task.mk +12 -0
- yukka-0.1.8/.rhiza/make.d/docs.mk +96 -0
- yukka-0.1.8/.rhiza/make.d/gh-aw.mk +64 -0
- yukka-0.1.8/.rhiza/make.d/marimo.mk +70 -0
- yukka-0.1.8/.rhiza/make.d/quality.mk +40 -0
- yukka-0.1.8/.rhiza/make.d/releasing.mk +50 -0
- yukka-0.1.8/.rhiza/make.d/test.mk +154 -0
- yukka-0.1.8/.rhiza/requirements/README.md +27 -0
- yukka-0.1.8/.rhiza/requirements/docs.txt +3 -0
- yukka-0.1.8/.rhiza/requirements/marimo.txt +2 -0
- yukka-0.1.8/.rhiza/requirements/tests.txt +15 -0
- yukka-0.1.8/.rhiza/requirements/tools.txt +7 -0
- yukka-0.1.8/.rhiza/rhiza.mk +153 -0
- yukka-0.1.8/.rhiza/template.lock +108 -0
- yukka-0.1.8/.rhiza/template.yml +15 -0
- yukka-0.1.8/.rhiza/templates/minibook/custom.html.jinja2 +210 -0
- yukka-0.1.8/.rhiza/tests/README.md +171 -0
- yukka-0.1.8/.rhiza/tests/api/conftest.py +98 -0
- yukka-0.1.8/.rhiza/tests/api/test_gh_aw_targets.py +87 -0
- yukka-0.1.8/.rhiza/tests/api/test_github_targets.py +55 -0
- yukka-0.1.8/.rhiza/tests/api/test_makefile_api.py +369 -0
- yukka-0.1.8/.rhiza/tests/api/test_makefile_targets.py +305 -0
- yukka-0.1.8/.rhiza/tests/conftest.py +217 -0
- yukka-0.1.8/.rhiza/tests/deps/test_dependency_health.py +111 -0
- yukka-0.1.8/.rhiza/tests/integration/test_book_targets.py +163 -0
- yukka-0.1.8/.rhiza/tests/integration/test_lfs.py +182 -0
- yukka-0.1.8/.rhiza/tests/integration/test_marimushka.py +93 -0
- yukka-0.1.8/.rhiza/tests/integration/test_notebook_execution.py +96 -0
- yukka-0.1.8/.rhiza/tests/integration/test_sbom.py +172 -0
- yukka-0.1.8/.rhiza/tests/integration/test_test_mk.py +53 -0
- yukka-0.1.8/.rhiza/tests/integration/test_virtual_env_unexport.py +37 -0
- yukka-0.1.8/.rhiza/tests/security/test_security_patterns.py +158 -0
- yukka-0.1.8/.rhiza/tests/shell/test_scripts.sh +245 -0
- yukka-0.1.8/.rhiza/tests/stress/README.md +143 -0
- yukka-0.1.8/.rhiza/tests/stress/__init__.py +5 -0
- yukka-0.1.8/.rhiza/tests/stress/conftest.py +50 -0
- yukka-0.1.8/.rhiza/tests/stress/test_git_stress.py +169 -0
- yukka-0.1.8/.rhiza/tests/stress/test_makefile_stress.py +145 -0
- yukka-0.1.8/.rhiza/tests/structure/test_lfs_structure.py +135 -0
- yukka-0.1.8/.rhiza/tests/structure/test_project_layout.py +57 -0
- yukka-0.1.8/.rhiza/tests/structure/test_requirements.py +51 -0
- yukka-0.1.8/.rhiza/tests/structure/test_template_bundles.py +89 -0
- yukka-0.1.8/.rhiza/tests/sync/conftest.py +101 -0
- yukka-0.1.8/.rhiza/tests/sync/test_docstrings.py +123 -0
- yukka-0.1.8/.rhiza/tests/sync/test_readme_validation.py +197 -0
- yukka-0.1.8/.rhiza/tests/sync/test_rhiza_version.py +137 -0
- yukka-0.1.8/.rhiza/tests/test_utils.py +70 -0
- yukka-0.1.8/.rhiza/tests/utils/test_git_repo_fixture.py +132 -0
- yukka-0.1.8/CODE_OF_CONDUCT.md +27 -0
- yukka-0.1.8/CONTRIBUTING.md +139 -0
- yukka-0.1.8/Claude.md +116 -0
- yukka-0.1.8/LICENSE +13 -0
- yukka-0.1.8/Makefile +46 -0
- yukka-0.1.8/PKG-INFO +203 -0
- yukka-0.1.8/README.md +183 -0
- yukka-0.1.8/SECURITY.md +100 -0
- yukka-0.1.8/book/marimo/notebooks/rhiza.py +657 -0
- yukka-0.1.8/examples/getting_started.py +83 -0
- yukka-0.1.8/examples/sentiment.py +29 -0
- yukka-0.1.8/pyproject.toml +37 -0
- yukka-0.1.8/pytest.ini +14 -0
- yukka-0.1.8/ruff.toml +134 -0
- yukka-0.1.8/sandbox.py +70 -0
- yukka-0.1.8/src/yukka/__init__.py +36 -0
- yukka-0.1.8/src/yukka/auth.py +117 -0
- yukka-0.1.8/src/yukka/client.py +288 -0
- yukka-0.1.8/src/yukka/data/__init__.py +51 -0
- yukka-0.1.8/src/yukka/data/master_constituents.parquet +0 -0
- yukka-0.1.8/src/yukka/entities.py +244 -0
- yukka-0.1.8/src/yukka/exceptions.py +13 -0
- yukka-0.1.8/src/yukka/models.py +5 -0
- yukka-0.1.8/src/yukka/utils.py +48 -0
- yukka-0.1.8/tests/__init__.py +1 -0
- yukka-0.1.8/tests/conftest.py +109 -0
- yukka-0.1.8/tests/test_auth.py +267 -0
- yukka-0.1.8/tests/test_client.py +499 -0
- yukka-0.1.8/tests/test_data.py +63 -0
- yukka-0.1.8/tests/test_entities.py +437 -0
- yukka-0.1.8/tests/test_utils.py +220 -0
- yukka-0.1.8/tests/test_yukka.py +50 -0
- yukka-0.1.8/uv.lock +969 -0
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# This file is part of the jebel-quant/rhiza repository
|
|
2
|
+
# (https://github.com/jebel-quant/rhiza).
|
|
3
|
+
#
|
|
4
|
+
root = true
|
|
5
|
+
|
|
6
|
+
# Default settings for all files
|
|
7
|
+
[*]
|
|
8
|
+
end_of_line = lf
|
|
9
|
+
trim_trailing_whitespace = true
|
|
10
|
+
insert_final_newline = true
|
|
11
|
+
charset = utf-8
|
|
12
|
+
|
|
13
|
+
# Python, reStructuredText, and text files
|
|
14
|
+
[*.{py,rst,txt}]
|
|
15
|
+
indent_style = space
|
|
16
|
+
indent_size = 4
|
|
17
|
+
|
|
18
|
+
# YAML, JSON, and other config files
|
|
19
|
+
[*.{yml,yaml,json}]
|
|
20
|
+
indent_style = space
|
|
21
|
+
indent_size = 2
|
|
22
|
+
|
|
23
|
+
# Markdown files
|
|
24
|
+
# [*.{md,markdown}]
|
|
25
|
+
# trim_trailing_whitespace = false
|
|
26
|
+
|
|
27
|
+
# Makefiles require tabs
|
|
28
|
+
[{Makefile,*.mk,*.make}]
|
|
29
|
+
indent_style = tab
|
|
30
|
+
indent_size = 4
|
|
31
|
+
|
|
32
|
+
# Don't apply editorconfig rules to vendor/ resources
|
|
33
|
+
# This is a "defensive" rule for the day we may have
|
|
34
|
+
# the vendor folder
|
|
35
|
+
[vendor/**]
|
|
36
|
+
charset = unset
|
|
37
|
+
end_of_line = unset
|
|
38
|
+
indent_size = unset
|
|
39
|
+
indent_style = unset
|
|
40
|
+
insert_final_newline = unset
|
|
41
|
+
trim_trailing_whitespace = unset
|
yukka-0.1.8/.env.example
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# YUKKA API Credentials
|
|
2
|
+
# Copy this file to .env and fill in your credentials
|
|
3
|
+
|
|
4
|
+
# Option 1: Username and password (recommended - allows token auto-renewal)
|
|
5
|
+
YUKKA_USERNAME=your_email@example.com
|
|
6
|
+
YUKKA_PASSWORD=your_password
|
|
7
|
+
|
|
8
|
+
# Option 2: JWT Token (if you already have one)
|
|
9
|
+
# YUKKA_TOKEN=eyJ...
|
yukka-0.1.8/.gitignore
ADDED
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
### Python template
|
|
2
|
+
.idea
|
|
3
|
+
.venv
|
|
4
|
+
.ruff_cache
|
|
5
|
+
.ty_cache
|
|
6
|
+
|
|
7
|
+
### Don't expose API keys, etc.
|
|
8
|
+
.env
|
|
9
|
+
|
|
10
|
+
__marimo__
|
|
11
|
+
|
|
12
|
+
_tests
|
|
13
|
+
_book
|
|
14
|
+
_pdoc
|
|
15
|
+
_marimushka
|
|
16
|
+
_mkdocs
|
|
17
|
+
_benchmarks
|
|
18
|
+
_jupyter
|
|
19
|
+
_site
|
|
20
|
+
|
|
21
|
+
# temp file used by Junie
|
|
22
|
+
.output.txt
|
|
23
|
+
|
|
24
|
+
# folder used for programs, e.g. uv, uvx, task, etc.
|
|
25
|
+
bin
|
|
26
|
+
|
|
27
|
+
# Byte-compiled / optimized / DLL files
|
|
28
|
+
__pycache__/
|
|
29
|
+
*.py[cod]
|
|
30
|
+
*$py.class
|
|
31
|
+
|
|
32
|
+
# Generated presentation files
|
|
33
|
+
presentation.html
|
|
34
|
+
presentation.pdf
|
|
35
|
+
*.pptx
|
|
36
|
+
|
|
37
|
+
# C extensions
|
|
38
|
+
*.so
|
|
39
|
+
|
|
40
|
+
# .DS_Store
|
|
41
|
+
.DS_Store
|
|
42
|
+
|
|
43
|
+
# Distribution / packaging
|
|
44
|
+
.Python
|
|
45
|
+
build/
|
|
46
|
+
develop-eggs/
|
|
47
|
+
dist/
|
|
48
|
+
downloads/
|
|
49
|
+
eggs/
|
|
50
|
+
.eggs/
|
|
51
|
+
lib/
|
|
52
|
+
lib64/
|
|
53
|
+
parts/
|
|
54
|
+
sdist/
|
|
55
|
+
var/
|
|
56
|
+
wheels/
|
|
57
|
+
share/python-wheels/
|
|
58
|
+
*.egg-info/
|
|
59
|
+
.installed.cfg
|
|
60
|
+
*.egg
|
|
61
|
+
MANIFEST
|
|
62
|
+
|
|
63
|
+
# Installer logs
|
|
64
|
+
pip-log.txt
|
|
65
|
+
pip-delete-this-directory.txt
|
|
66
|
+
|
|
67
|
+
# Unit test / coverage reports
|
|
68
|
+
htmlcov/
|
|
69
|
+
.tox/
|
|
70
|
+
.nox/
|
|
71
|
+
.coverage
|
|
72
|
+
.coverage.*
|
|
73
|
+
.cache
|
|
74
|
+
nosetests.xml
|
|
75
|
+
coverage.xml
|
|
76
|
+
coverage.json
|
|
77
|
+
*.cover
|
|
78
|
+
*.py,cover
|
|
79
|
+
.hypothesis/
|
|
80
|
+
.benchmarks/
|
|
81
|
+
.pytest_cache/
|
|
82
|
+
cover/
|
|
83
|
+
|
|
84
|
+
# Security scanning baselines (regenerate as needed)
|
|
85
|
+
.bandit-baseline.json
|
|
86
|
+
|
|
87
|
+
# Translations
|
|
88
|
+
*.mo
|
|
89
|
+
*.pot
|
|
90
|
+
|
|
91
|
+
# Django stuff:
|
|
92
|
+
*.log
|
|
93
|
+
local_settings.py
|
|
94
|
+
db.sqlite3
|
|
95
|
+
db.sqlite3-journal
|
|
96
|
+
|
|
97
|
+
# Flask stuff:
|
|
98
|
+
instance/
|
|
99
|
+
.webassets-cache
|
|
100
|
+
|
|
101
|
+
# Cython debug symbols
|
|
102
|
+
cython_debug/
|
|
103
|
+
|
|
104
|
+
# Makefile
|
|
105
|
+
local.mk
|
|
106
|
+
|
|
107
|
+
.bandit-baseline.json
|
|
108
|
+
|
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
# GitHub Actions vs GitLab CI Comparison
|
|
2
|
+
|
|
3
|
+
This document provides a side-by-side comparison of GitHub Actions and GitLab CI implementations for the rhiza project.
|
|
4
|
+
|
|
5
|
+
## Workflow Mapping
|
|
6
|
+
|
|
7
|
+
| Feature | GitHub Actions | GitLab CI | Status |
|
|
8
|
+
|---------|----------------|-----------|--------|
|
|
9
|
+
| Main Config | `.github/workflows/*.yml` | `.gitlab-ci.yml` + `.gitlab/workflows/*.yml` | ✅ Complete |
|
|
10
|
+
| CI Testing | `rhiza_ci.yml` | `rhiza_ci.yml` | ✅ Complete |
|
|
11
|
+
| Validation | `rhiza_validate.yml` | `rhiza_validate.yml` | ✅ Complete |
|
|
12
|
+
| Dependencies | `rhiza_deptry.yml` | `rhiza_deptry.yml` | ✅ Complete |
|
|
13
|
+
| Pre-commit | `rhiza_pre-commit.yml` | `rhiza_pre-commit.yml` | ✅ Complete |
|
|
14
|
+
| Documentation | `rhiza_book.yml` | `rhiza_book.yml` | ✅ Complete |
|
|
15
|
+
| Sync | `rhiza_sync.yml` | `rhiza_sync.yml` | ✅ Complete |
|
|
16
|
+
| Release | `rhiza_release.yml` | `rhiza_release.yml` | ✅ Complete |
|
|
17
|
+
|
|
18
|
+
## Syntax Differences
|
|
19
|
+
|
|
20
|
+
### Triggers
|
|
21
|
+
|
|
22
|
+
**GitHub Actions:**
|
|
23
|
+
```yaml
|
|
24
|
+
on:
|
|
25
|
+
push:
|
|
26
|
+
pull_request:
|
|
27
|
+
branches: [main, master]
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**GitLab CI:**
|
|
31
|
+
```yaml
|
|
32
|
+
rules:
|
|
33
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
|
34
|
+
- if: $CI_COMMIT_BRANCH
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Jobs and Steps
|
|
38
|
+
|
|
39
|
+
**GitHub Actions:**
|
|
40
|
+
```yaml
|
|
41
|
+
jobs:
|
|
42
|
+
test:
|
|
43
|
+
runs-on: ubuntu-latest
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v6
|
|
46
|
+
- name: Run tests
|
|
47
|
+
run: pytest tests
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
**GitLab CI:**
|
|
51
|
+
```yaml
|
|
52
|
+
test:
|
|
53
|
+
stage: test
|
|
54
|
+
image: python:3.12
|
|
55
|
+
script:
|
|
56
|
+
- pytest tests
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Matrix Strategy
|
|
60
|
+
|
|
61
|
+
**GitHub Actions:**
|
|
62
|
+
```yaml
|
|
63
|
+
strategy:
|
|
64
|
+
matrix:
|
|
65
|
+
python-version: ${{ fromJson(needs.generate-matrix.outputs.matrix) }}
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
**GitLab CI:**
|
|
69
|
+
```yaml
|
|
70
|
+
parallel:
|
|
71
|
+
matrix:
|
|
72
|
+
- PYTHON_VERSION: ["3.11", "3.12", "3.13"]
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Note:** GitLab CI has limited dynamic matrix support. Workaround: use child pipelines or iterate in script.
|
|
76
|
+
|
|
77
|
+
### Artifacts
|
|
78
|
+
|
|
79
|
+
**GitHub Actions:**
|
|
80
|
+
```yaml
|
|
81
|
+
- uses: actions/upload-artifact@v6
|
|
82
|
+
with:
|
|
83
|
+
name: dist
|
|
84
|
+
path: dist
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
**GitLab CI:**
|
|
88
|
+
```yaml
|
|
89
|
+
artifacts:
|
|
90
|
+
paths:
|
|
91
|
+
- dist/
|
|
92
|
+
expire_in: 1 day
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Container Images
|
|
96
|
+
|
|
97
|
+
**GitHub Actions:**
|
|
98
|
+
```yaml
|
|
99
|
+
jobs:
|
|
100
|
+
test:
|
|
101
|
+
runs-on: ubuntu-latest
|
|
102
|
+
container:
|
|
103
|
+
image: python:3.12
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**GitLab CI:**
|
|
107
|
+
```yaml
|
|
108
|
+
test:
|
|
109
|
+
image: python:3.12
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Secrets and Variables
|
|
113
|
+
|
|
114
|
+
**GitHub Actions:**
|
|
115
|
+
```yaml
|
|
116
|
+
env:
|
|
117
|
+
TOKEN: ${{ secrets.PYPI_TOKEN }}
|
|
118
|
+
CUSTOM_VAR: ${{ vars.CUSTOM_VAR }}
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
**GitLab CI:**
|
|
122
|
+
```yaml
|
|
123
|
+
script:
|
|
124
|
+
- echo $PYPI_TOKEN
|
|
125
|
+
- echo $CUSTOM_VAR
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Feature Comparison
|
|
129
|
+
|
|
130
|
+
### 1. Python Matrix Testing (CI)
|
|
131
|
+
|
|
132
|
+
| Feature | GitHub Actions | GitLab CI |
|
|
133
|
+
|---------|----------------|-----------|
|
|
134
|
+
| Dynamic matrix | ✅ Full support | ⚠️ Limited (static matrix used) |
|
|
135
|
+
| Parallel execution | ✅ Yes | ✅ Yes |
|
|
136
|
+
| Git LFS | ✅ Yes | ✅ Yes |
|
|
137
|
+
| UV integration | ✅ Yes | ✅ Yes |
|
|
138
|
+
|
|
139
|
+
### 2. Documentation (Book)
|
|
140
|
+
|
|
141
|
+
| Feature | GitHub Actions | GitLab CI |
|
|
142
|
+
|---------|----------------|-----------|
|
|
143
|
+
| Build | ✅ `make book` | ✅ `make book` |
|
|
144
|
+
| Output directory | `_book/` | `public/` (required) |
|
|
145
|
+
| Deployment | GitHub Pages | GitLab Pages |
|
|
146
|
+
| Deploy action | `actions/deploy-pages@v4` | Job named `pages` |
|
|
147
|
+
|
|
148
|
+
### 3. Release
|
|
149
|
+
|
|
150
|
+
| Feature | GitHub Actions | GitLab CI |
|
|
151
|
+
|---------|----------------|-----------|
|
|
152
|
+
| PyPI auth | ✅ OIDC Trusted Publishing | ⚠️ Token-based |
|
|
153
|
+
| Release creation | `softprops/action-gh-release` | GitLab Releases API |
|
|
154
|
+
| Version validation | ✅ Yes | ✅ Yes |
|
|
155
|
+
| Draft releases | ✅ Yes | ✅ Yes (via API) |
|
|
156
|
+
|
|
157
|
+
### 4. Sync
|
|
158
|
+
|
|
159
|
+
| Feature | GitHub Actions | GitLab CI |
|
|
160
|
+
|---------|----------------|-----------|
|
|
161
|
+
| Template sync | ✅ `rhiza sync` | ✅ `rhiza sync` |
|
|
162
|
+
| PR/MR creation | ✅ Automatic | ⚠️ Manual (API call needed) |
|
|
163
|
+
| Token requirement | PAT_TOKEN | PAT_TOKEN |
|
|
164
|
+
| Scheduling | ✅ Cron syntax | ✅ Pipeline schedules |
|
|
165
|
+
|
|
166
|
+
## Platform-Specific Features
|
|
167
|
+
|
|
168
|
+
### GitHub Actions Only
|
|
169
|
+
|
|
170
|
+
1. **OIDC Authentication:** Passwordless authentication with PyPI and cloud providers
|
|
171
|
+
2. **Action Marketplace:** Reusable actions from the community
|
|
172
|
+
3. **Job summaries:** Rich markdown summaries in the UI
|
|
173
|
+
4. **Environments:** Built-in environment protection rules
|
|
174
|
+
|
|
175
|
+
### GitLab CI Only
|
|
176
|
+
|
|
177
|
+
1. **Stages:** Explicit pipeline stages (`.pre`, `build`, `test`, `deploy`, `.post`)
|
|
178
|
+
2. **Job templates:** Reusable job definitions with `extends`
|
|
179
|
+
3. **Child pipelines:** Dynamic pipeline generation
|
|
180
|
+
4. **Auto DevOps:** Automatic CI/CD configuration
|
|
181
|
+
|
|
182
|
+
## Migration Considerations
|
|
183
|
+
|
|
184
|
+
### Easy Migrations
|
|
185
|
+
- ✅ Basic CI/CD pipelines
|
|
186
|
+
- ✅ Docker-based workflows
|
|
187
|
+
- ✅ Artifact handling
|
|
188
|
+
- ✅ Environment variables
|
|
189
|
+
- ✅ Scheduled pipelines
|
|
190
|
+
|
|
191
|
+
### Moderate Effort
|
|
192
|
+
- ⚠️ Dynamic matrix strategies (use child pipelines)
|
|
193
|
+
- ⚠️ Marketplace actions (reimplement with scripts)
|
|
194
|
+
- ⚠️ Complex conditionals (restructure with rules)
|
|
195
|
+
|
|
196
|
+
### Challenging Migrations
|
|
197
|
+
- ❌ OIDC-based authentication (use tokens)
|
|
198
|
+
- ❌ GitHub-specific APIs (use GitLab APIs)
|
|
199
|
+
- ❌ GitHub Apps (use GitLab integrations)
|
|
200
|
+
|
|
201
|
+
## Testing Status
|
|
202
|
+
|
|
203
|
+
| Workflow | YAML Valid | Logic Verified | Notes |
|
|
204
|
+
|----------|------------|----------------|-------|
|
|
205
|
+
| CI | ✅ | ⏳ | Needs test with actual Python matrix |
|
|
206
|
+
| Validate | ✅ | ⏳ | Skips in rhiza repo |
|
|
207
|
+
| Deptry | ✅ | ⏳ | Needs test with dependencies |
|
|
208
|
+
| Pre-commit | ✅ | ⏳ | Needs test with hooks |
|
|
209
|
+
| Book | ✅ | ⏳ | Needs GitLab Pages setup |
|
|
210
|
+
| Sync | ✅ | ⏳ | Needs PAT_TOKEN |
|
|
211
|
+
| Release | ✅ | ⏳ | Needs PYPI_TOKEN |
|
|
212
|
+
|
|
213
|
+
Legend:
|
|
214
|
+
- ✅ Complete
|
|
215
|
+
- ⏳ Pending (ready for testing)
|
|
216
|
+
- ❌ Not tested
|
|
217
|
+
|
|
218
|
+
## Recommendations
|
|
219
|
+
|
|
220
|
+
### For New Projects
|
|
221
|
+
1. Choose platform based on primary hosting (GitHub vs GitLab)
|
|
222
|
+
2. Consider OIDC requirements (GitHub has better support)
|
|
223
|
+
3. Evaluate marketplace actions vs custom scripts
|
|
224
|
+
|
|
225
|
+
### For Migration
|
|
226
|
+
1. Start with simple workflows (CI, pre-commit)
|
|
227
|
+
2. Test thoroughly in a fork/mirror
|
|
228
|
+
3. Configure all required variables
|
|
229
|
+
4. Update documentation links
|
|
230
|
+
5. Train team on platform differences
|
|
231
|
+
|
|
232
|
+
### For Dual Support
|
|
233
|
+
1. Maintain both workflow sets (as done here)
|
|
234
|
+
2. Keep feature parity
|
|
235
|
+
3. Document platform-specific differences
|
|
236
|
+
4. Test changes on both platforms
|
|
237
|
+
|
|
238
|
+
## Resources
|
|
239
|
+
|
|
240
|
+
- **GitHub Actions Docs:** https://docs.github.com/en/actions
|
|
241
|
+
- **GitLab CI Docs:** https://docs.gitlab.com/ee/ci/
|
|
242
|
+
- **Rhiza GitHub:** https://github.com/jebel-quant/rhiza
|
|
243
|
+
- **Migration Guide:** `.gitlab/README.md`
|
|
244
|
+
- **Testing Guide:** `.gitlab/TESTING.md`
|
|
245
|
+
|
|
246
|
+
## Summary
|
|
247
|
+
|
|
248
|
+
Most GitHub Actions workflows (7 of 10) have been converted to GitLab CI with equivalent functionality. The main differences are:
|
|
249
|
+
|
|
250
|
+
1. **Syntax:** Different trigger and job definitions
|
|
251
|
+
2. **Authentication:** Token-based instead of OIDC
|
|
252
|
+
3. **Matrix:** Static instead of dynamic
|
|
253
|
+
4. **Pages:** Different output directory requirements
|
|
254
|
+
5. **APIs:** Platform-specific endpoints
|
|
255
|
+
|
|
256
|
+
Both platforms are fully supported and provide equivalent functionality for the rhiza project.
|