Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion .github/workflows/CODEOWNERS

This file was deleted.

70 changes: 0 additions & 70 deletions .github/workflows/ci.yml

This file was deleted.

26 changes: 26 additions & 0 deletions .harness/migration/report-2026-07-28.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
## Harness Migration Report — 2026-07-28

**Repo:** splitio/split-openfeature-provider-python
**Language:** Python (versions: 3.9.13)
**Status:** ✅ PASSED

### Steps
| Step | Result | Notes |
|------|--------|-------|
| Detect context | ✅ | Python, split-openfeature-provider-python |
| Read GH workflow | ✅ | .github/workflows/ci.yml |
| Generate Harness YAML | ✅ | Adapted from ruby-client reference pipeline |
| Write pipeline file | ✅ | .harness/pipeline.yaml |
| Create pipeline in Harness | ✅ | imported from Git |
| Create input set | ✅ | splitopenfeatureproviderpyinputset |
| Create webhook trigger | ✅ | splitopenfeatureproviderpython, GitHub PR webhook |
| Dry-run | ✅ | https://harness0.harness.io/ng/account/l7B_kbSEQD2wjrM7PShm5w/all/orgs/PROD/projects/Harness_Split/pipelines/splitopenfeatureproviderpy/deployments/YIwqFMr6QNuul5wUD6kZtA/pipeline |

**Pipeline is working. PR opened targeting development.**

### Fixes applied during migration
- Pipeline codebase `build` changed to `<+input>` (was fixed to `type: branch`) so PR-type input sets/triggers can override it.
- Disabled mise's GitHub attestation check (`MISE_PYTHON_GITHUB_ATTESTATIONS=false`) — no attestations are published for python@3.9.13.
- Run tests from `tests/` (matches the original workflow's `working-directory: tests`), not `split_openfeature_provider/`.
- Upgraded `pip`/`setuptools`/`wheel` before install, matching the original workflow.
- Switched SonarQube steps from `shell: Sh` to `shell: Bash` — `eval "$(mise activate bash)"` requires bash, not POSIX sh.
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
inputSet:
name: splitopenfeatureproviderpyinputset
identifier: splitopenfeatureproviderpyinputset
orgIdentifier: PROD
projectIdentifier: Harness_Split
pipeline:
identifier: splitopenfeatureproviderpy
properties:
ci:
codebase:
build:
type: PR
spec:
number: <+trigger.prNumber>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
inputSet:
name: splitopenfeatureproviderpyinputset
identifier: splitopenfeatureproviderpyinputset
orgIdentifier: PROD
projectIdentifier: Harness_Split
pipeline:
identifier: splitopenfeatureproviderpy
properties:
ci:
codebase:
build:
type: PR
spec:
number: <+trigger.prNumber>
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
inputSet:
name: splitopenfeatureproviderpyinputset
identifier: splitopenfeatureproviderpyinputset
orgIdentifier: PROD
projectIdentifier: Harness_Split
pipeline:
identifier: splitopenfeatureproviderpy
properties:
ci:
codebase:
build:
type: PR
spec:
number: <+trigger.prNumber>
133 changes: 133 additions & 0 deletions .harness/pipeline.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,133 @@
pipeline:
name: split-openfeature-provider-python
identifier: splitopenfeatureproviderpy
projectIdentifier: Harness_Split
orgIdentifier: PROD
tags: {}
properties:
ci:
codebase:
connectorRef: fmegithubharnessgitops
repoName: split-openfeature-provider-python
build: <+input>
stages:
- stage:
name: Build and Test
identifier: Build_and_Test
description: ""
type: CI
spec:
cloneCodebase: true
caching:
enabled: true
override: true
platform:
os: Linux
arch: Amd64
runtime:
type: Cloud
spec:
size: flex
execution:
steps:
- step:
type: Run
name: Install Python
identifier: Install_Python
spec:
shell: Bash
command: |-
curl https://mise.run | sh
export PATH="$HOME/.local/bin:$PATH"
export MISE_PYTHON_GITHUB_ATTESTATIONS=false
mise use --global python@<+matrix.pythonVersion>
eval "$(mise activate bash)"
python --version
pip --version
- step:
type: Run
name: Install Dependencies
identifier: Install_Dependencies
spec:
shell: Bash
command: |-
export PATH="$HOME/.local/bin:$PATH"
eval "$(mise activate bash)"
pip install -U setuptools pip wheel
pip install -e .
pip install -r requirements-dev.txt
- step:
type: Run
name: Run Tests
identifier: Run_Tests
spec:
shell: Bash
command: |-
export PATH="$HOME/.local/bin:$PATH"
eval "$(mise activate bash)"
cd tests
pytest -v --cov=split_openfeature_provider --cov-report=xml:../coverage.xml
- step:
type: Run
name: SonarQube Scan Push
identifier: SonarQube_Scan_Push
when:
stageStatus: Success
condition: <+matrix.pythonVersion> == "3.9.13" && <+codebase.build.type> == "branch"
spec:
shell: Bash
command: |-
export PATH="$HOME/.local/bin:$PATH"
eval "$(mise activate bash)"
VERSION=$(python3 -c "import re; print(re.search(r'version\s*=\s*[\"\\']([^\"\\']+)[\"\\']', open('setup.py').read()).group(1))")
echo "Detected version: $VERSION"
export SONAR_SCANNER_VERSION=5.0.1.3006
curl -sSLo sonar-scanner.zip \
"https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${SONAR_SCANNER_VERSION}-linux.zip"
unzip -q sonar-scanner.zip
export PATH="$PWD/sonar-scanner-${SONAR_SCANNER_VERSION}-linux/bin:$PATH"
apt-get install -y openjdk-17-jdk -qq
sonar-scanner \
-Dsonar.projectKey=split-openfeature-provider-python \
-Dsonar.sources=split_openfeature_provider \
-Dsonar.tests=tests \
-Dsonar.host.url=https://sonar.harness.io \
-Dsonar.token=<+secrets.getValue("sonarqube-token")> \
-Dsonar.python.coverage.reportPaths=coverage.xml \
-Dsonar.projectVersion=$VERSION \
-Dsonar.branch.name=<+codebase.branch>
- step:
type: Run
name: SonarQube Scan PR
identifier: SonarQube_Scan_PR
when:
stageStatus: Success
condition: <+matrix.pythonVersion> == "3.9.13" && <+codebase.build.type> == "PR"
spec:
shell: Bash
command: |-
export PATH="$HOME/.local/bin:$PATH"
eval "$(mise activate bash)"
VERSION=$(python3 -c "import re; print(re.search(r'version\s*=\s*[\"\\']([^\"\\']+)[\"\\']', open('setup.py').read()).group(1))")
echo "Detected version: $VERSION"
export SONAR_SCANNER_VERSION=5.0.1.3006
curl -sSLo sonar-scanner.zip \
"https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-${SONAR_SCANNER_VERSION}-linux.zip"
unzip -q sonar-scanner.zip
export PATH="$PWD/sonar-scanner-${SONAR_SCANNER_VERSION}-linux/bin:$PATH"
apt-get install -y openjdk-17-jdk -qq
sonar-scanner \
-Dsonar.projectKey=split-openfeature-provider-python \
-Dsonar.sources=split_openfeature_provider \
-Dsonar.tests=tests \
-Dsonar.host.url=https://sonar.harness.io \
-Dsonar.token=<+secrets.getValue("sonarqube-token")> \
-Dsonar.python.coverage.reportPaths=coverage.xml \
-Dsonar.projectVersion=$VERSION \
-Dsonar.pullrequest.key=<+codebase.prNumber> \
-Dsonar.pullrequest.branch=<+codebase.sourceBranch> \
-Dsonar.pullrequest.base=<+codebase.targetBranch>
strategy:
matrix:
pythonVersion:
- "3.9.13"