Migrate to custom oci registry

Signed-off-by: Bryan Frimin <bryan@probo.com>
This commit is contained in:
Bryan Frimin
2026-05-25 15:01:35 -07:00
parent bd04f1812a
commit d804c72c07
18 changed files with 224 additions and 44 deletions

View File

@@ -131,8 +131,9 @@ jobs:
- uses: "docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd" # v4.0.0 - uses: "docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd" # v4.0.0
- uses: "docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121" # v4.1.0 - uses: "docker/login-action@4907a6ddec9925e35a0a9e82d7399ccc52663121" # v4.1.0
with: with:
username: "gearnode" registry: artifact.probo.inc
password: ${{ secrets.DOCKER_HUB_TOKEN }} username: ${{ secrets.HARBOR_USERNAME }}
password: ${{ secrets.HARBOR_PASSWORD }}
- uses: "actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c" # v8 - uses: "actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c" # v8
with: with:
name: "binary-linux-${{ matrix.arch }}" name: "binary-linux-${{ matrix.arch }}"
@@ -143,7 +144,8 @@ jobs:
run: | run: |
docker buildx build \ docker buildx build \
--platform "${{ matrix.platform }}" \ --platform "${{ matrix.platform }}" \
--tag "ghcr.io/getprobo/probo:snapshot-${{ matrix.arch }}" \ --build-arg "BASE_IMAGE=artifact.probo.inc/docker/library/ubuntu:24.04@sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b" \
--tag "artifact.probo.inc/probo/probo:snapshot-${{ matrix.arch }}" \
--load \ --load \
. .
- name: "Cache Trivy database" - name: "Cache Trivy database"
@@ -155,7 +157,7 @@ jobs:
- name: "Scan Docker image with Trivy" - name: "Scan Docker image with Trivy"
uses: "aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25" # 0.36.0 uses: "aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25" # 0.36.0
with: with:
image-ref: "ghcr.io/getprobo/probo:snapshot-${{ matrix.arch }}" image-ref: "artifact.probo.inc/probo/probo:snapshot-${{ matrix.arch }}"
format: "table" format: "table"
exit-code: 1 exit-code: 1
ignore-unfixed: true ignore-unfixed: true

98
.github/workflows/release-helm.yaml vendored Normal file
View File

@@ -0,0 +1,98 @@
name: "Release helm"
on:
push:
tags:
- "helm/v*"
permissions:
contents: "read"
jobs:
publish-helm:
name: "publish-helm"
runs-on: "runs-on=${{ github.run_id }}/runner=2cpu-linux-x64/extras=s3-cache"
permissions:
contents: "read"
steps:
- uses: "actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd" # v6
- uses: "runs-on/action@742bf56072eb4845a0f94b3394673e4903c90ff0" # v2
- uses: "azure/setup-helm@b9e51907a09c216f16ebe8536097933489208112" # v4.3.0
with:
version: "3.17.3"
- name: "Validate chart version"
run: |
VERSION="${GITHUB_REF_NAME##*/v}"
CHART_VERSION="$(awk '/^version:/ { print $2 }' contrib/helm/charts/probo/Chart.yaml)"
if [ "${CHART_VERSION}" != "${VERSION}" ]; then
echo "Chart.yaml version (${CHART_VERSION}) does not match tag (${VERSION})"
exit 1
fi
- name: "Log in to Harbor"
run: |
helm registry login artifact.probo.inc \
--username "${{ secrets.HARBOR_USERNAME }}" \
--password "${{ secrets.HARBOR_PASSWORD }}"
- name: "Package and push Helm chart"
run: |
VERSION="${GITHUB_REF_NAME##*/v}"
CHART_DIR="contrib/helm/charts/probo"
helm dependency update "${CHART_DIR}"
helm package "${CHART_DIR}"
helm push "probo-${VERSION}.tgz" oci://artifact.probo.inc/probo
- uses: "actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f" # v7
with:
name: "helm-chart"
path: "probo-*.tgz"
retention-days: 1
github-release:
name: "github-release"
needs: [publish-helm]
runs-on: "runs-on=${{ github.run_id }}/runner=2cpu-linux-x64/extras=s3-cache"
permissions:
contents: "write"
steps:
- uses: "actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd" # v6
with:
fetch-depth: 0
- uses: "runs-on/action@742bf56072eb4845a0f94b3394673e4903c90ff0" # v2
- uses: "actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c" # v8
with:
name: "helm-chart"
path: "."
- name: "Extract release notes"
run: |
VERSION="${GITHUB_REF_NAME##*/v}"
APP_VERSION="$(awk '/^appVersion:/ { gsub(/"/, "", $2); print $2 }' contrib/helm/charts/probo/Chart.yaml)"
awk -v ver="$VERSION" '
/^## \[/ { if (found) exit; if ($0 ~ "\\[" ver "\\]") found=1 }
found
' contrib/helm/charts/probo/CHANGELOG.md > release-notes.md
cat >> release-notes.md << EOF
## Install
\`\`\`bash
helm install my-probo oci://artifact.probo.inc/probo/probo --version ${VERSION}
\`\`\`
Defaults to probod image tag \`v${APP_VERSION}\`.
EOF
- name: "Create GitHub release"
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
PRERELEASE_FLAG=""
if echo "${GITHUB_REF_NAME}" | grep -qE '(alpha|beta|rc)'; then
PRERELEASE_FLAG="--prerelease"
fi
gh release delete "${GITHUB_REF_NAME}" --yes 2>/dev/null || true
gh release create "${GITHUB_REF_NAME}" \
--title "${GITHUB_REF_NAME}" \
--notes-file release-notes.md \
$PRERELEASE_FLAG \
probo-*.tgz

View File

@@ -156,13 +156,9 @@ jobs:
- uses: "docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd" # v4.0.0 - uses: "docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd" # v4.0.0
- uses: "docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2" # v4.0.0 - uses: "docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2" # v4.0.0
with: with:
username: "gearnode" registry: artifact.probo.inc
password: ${{ secrets.DOCKER_HUB_TOKEN }} username: ${{ secrets.HARBOR_USERNAME }}
- uses: "docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2" # v4.0.0 password: ${{ secrets.HARBOR_PASSWORD }}
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- uses: "actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c" # v8 - uses: "actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c" # v8
with: with:
name: "binary-linux-${{ matrix.arch }}" name: "binary-linux-${{ matrix.arch }}"
@@ -173,7 +169,7 @@ jobs:
id: tag id: tag
run: | run: |
VERSION="${GITHUB_REF_NAME##*/v}" VERSION="${GITHUB_REF_NAME##*/v}"
echo "image_tag=probod-v${VERSION}" >> "$GITHUB_OUTPUT" echo "image_tag=v${VERSION}" >> "$GITHUB_OUTPUT"
- name: "Build and push Docker image" - name: "Build and push Docker image"
env: env:
PLATFORM: ${{ matrix.platform }} PLATFORM: ${{ matrix.platform }}
@@ -182,6 +178,7 @@ jobs:
run: | run: |
docker buildx build \ docker buildx build \
--platform "${PLATFORM}" \ --platform "${PLATFORM}" \
--build-arg "BASE_IMAGE=artifact.probo.inc/docker/library/ubuntu:24.04@sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b" \
--label "org.opencontainers.image.title=probod" \ --label "org.opencontainers.image.title=probod" \
--label "org.opencontainers.image.description=Probo compliance management platform" \ --label "org.opencontainers.image.description=Probo compliance management platform" \
--label "org.opencontainers.image.url=https://github.com/getprobo/probo" \ --label "org.opencontainers.image.url=https://github.com/getprobo/probo" \
@@ -189,7 +186,7 @@ jobs:
--label "org.opencontainers.image.version=${GITHUB_REF_NAME}" \ --label "org.opencontainers.image.version=${GITHUB_REF_NAME}" \
--label "org.opencontainers.image.revision=${GITHUB_SHA}" \ --label "org.opencontainers.image.revision=${GITHUB_SHA}" \
--label "org.opencontainers.image.licenses=MIT" \ --label "org.opencontainers.image.licenses=MIT" \
--tag "ghcr.io/getprobo/probo:${IMAGE_TAG}-${ARCH}" \ --tag "artifact.probo.inc/probo/probo:${IMAGE_TAG}-${ARCH}" \
--push \ --push \
. .
@@ -208,35 +205,35 @@ jobs:
- uses: "docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd" # v4.0.0 - uses: "docker/setup-buildx-action@4d04d5d9486b7bd6fa91e7baf45bbb4f8b9deedd" # v4.0.0
- uses: "docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2" # v4.0.0 - uses: "docker/login-action@b45d80f862d83dbcd57f89517bcf500b2ab88fb2" # v4.0.0
with: with:
registry: ghcr.io registry: artifact.probo.inc
username: ${{ github.actor }} username: ${{ secrets.HARBOR_USERNAME }}
password: ${{ secrets.GITHUB_TOKEN }} password: ${{ secrets.HARBOR_PASSWORD }}
- uses: "sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad" # v4.0.0 - uses: "sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad" # v4.0.0
- name: "Compute image tag" - name: "Compute image tag"
id: tag id: tag
run: | run: |
VERSION="${GITHUB_REF_NAME##*/v}" VERSION="${GITHUB_REF_NAME##*/v}"
echo "image_tag=probod-v${VERSION}" >> "$GITHUB_OUTPUT" echo "image_tag=v${VERSION}" >> "$GITHUB_OUTPUT"
- name: "Create and push manifest" - name: "Create and push manifest"
env: env:
IMAGE_TAG: ${{ steps.tag.outputs.image_tag }} IMAGE_TAG: ${{ steps.tag.outputs.image_tag }}
run: | run: |
docker buildx imagetools create \ docker buildx imagetools create \
--tag "ghcr.io/getprobo/probo:${IMAGE_TAG}" \ --tag "artifact.probo.inc/probo/probo:${IMAGE_TAG}" \
--tag "ghcr.io/getprobo/probo:latest" \ --tag "artifact.probo.inc/probo/probo:latest" \
"ghcr.io/getprobo/probo:${IMAGE_TAG}-amd64" \ "artifact.probo.inc/probo/probo:${IMAGE_TAG}-amd64" \
"ghcr.io/getprobo/probo:${IMAGE_TAG}-arm64" "artifact.probo.inc/probo/probo:${IMAGE_TAG}-arm64"
- name: "Get manifest digest" - name: "Get manifest digest"
id: digest id: digest
env: env:
IMAGE_TAG: ${{ steps.tag.outputs.image_tag }} IMAGE_TAG: ${{ steps.tag.outputs.image_tag }}
run: | run: |
DIGEST=$(docker buildx imagetools inspect "ghcr.io/getprobo/probo:${IMAGE_TAG}" --format '{{json .Manifest.Digest}}' | jq -r) DIGEST=$(docker buildx imagetools inspect "artifact.probo.inc/probo/probo:${IMAGE_TAG}" --format '{{json .Manifest.Digest}}' | jq -r)
echo "digest=$DIGEST" >> "$GITHUB_OUTPUT" echo "digest=$DIGEST" >> "$GITHUB_OUTPUT"
- name: "Sign Docker manifest" - name: "Sign Docker manifest"
env: env:
DIGEST: ${{ steps.digest.outputs.digest }} DIGEST: ${{ steps.digest.outputs.digest }}
run: cosign sign "ghcr.io/getprobo/probo@${DIGEST}" --yes run: cosign sign "artifact.probo.inc/probo/probo@${DIGEST}" --yes
github-release: github-release:
name: "github-release" name: "github-release"
@@ -288,13 +285,13 @@ jobs:
- name: "Attest Docker image SBOM" - name: "Attest Docker image SBOM"
uses: "actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26" # v4.1.0 uses: "actions/attest@59d89421af93a897026c735860bf21b6eb4f7b26" # v4.1.0
with: with:
subject-name: "ghcr.io/getprobo/probo" subject-name: "artifact.probo.inc/probo/probo"
subject-digest: ${{ needs.docker-manifest.outputs.digest }} subject-digest: ${{ needs.docker-manifest.outputs.digest }}
sbom-path: "sbom.json" sbom-path: "sbom.json"
- name: "Trivy scan Docker image" - name: "Trivy scan Docker image"
uses: "aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25" # 0.36.0 uses: "aquasecurity/trivy-action@ed142fd0673e97e23eac54620cfb913e5ce36c25" # 0.36.0
with: with:
image-ref: "ghcr.io/getprobo/probo:${{ needs.docker-manifest.outputs.image_tag }}" image-ref: "artifact.probo.inc/probo/probo:${{ needs.docker-manifest.outputs.image_tag }}"
format: "sarif" format: "sarif"
output: "trivy-results.sarif" output: "trivy-results.sarif"
exit-code: 1 exit-code: 1
@@ -318,8 +315,8 @@ jobs:
cat >> release-notes.md << EOF cat >> release-notes.md << EOF
## Docker Images ## Docker Images
- \`ghcr.io/getprobo/probo:${IMAGE_TAG}\` (multi-arch: linux/amd64, linux/arm64) - \`artifact.probo.inc/probo/probo:${IMAGE_TAG}\` (multi-arch: linux/amd64, linux/arm64)
- \`ghcr.io/getprobo/probo:latest\` (multi-arch: linux/amd64, linux/arm64) - \`artifact.probo.inc/probo/probo:latest\` (multi-arch: linux/amd64, linux/arm64)
EOF EOF
- name: "Create GitHub release" - name: "Create GitHub release"
env: env:

View File

@@ -9,14 +9,16 @@ Each release track now keeps its own changelog. The history below 0.173.0 of the
- `probod-bootstrap` — [cmd/probod-bootstrap/CHANGELOG.md](cmd/probod-bootstrap/CHANGELOG.md) - `probod-bootstrap` — [cmd/probod-bootstrap/CHANGELOG.md](cmd/probod-bootstrap/CHANGELOG.md)
- `@probo/n8n-nodes-probo` — [packages/n8n-node/CHANGELOG.md](packages/n8n-node/CHANGELOG.md) - `@probo/n8n-nodes-probo` — [packages/n8n-node/CHANGELOG.md](packages/n8n-node/CHANGELOG.md)
- `@probo/cookie-banner` — [packages/cookie-banner/CHANGELOG.md](packages/cookie-banner/CHANGELOG.md) - `@probo/cookie-banner` — [packages/cookie-banner/CHANGELOG.md](packages/cookie-banner/CHANGELOG.md)
- Helm chart (`probo`) — [contrib/helm/charts/probo/CHANGELOG.md](contrib/helm/charts/probo/CHANGELOG.md)
## Tag scheme ## Tag scheme
Each track is published under its own annotated tag of the form `<track>/v<version>`: Each track is published under its own annotated tag of the form `<track>/v<version>`:
- `prb/vX.Y.Z` - `prb/vX.Y.Z`
- `probod/vX.Y.Z` (also tags the `ghcr.io/getprobo/probo` Docker image) - `probod/vX.Y.Z` (also tags the `artifact.probo.inc/probo/probo` Docker image)
- `probod-bootstrap/vX.Y.Z` - `probod-bootstrap/vX.Y.Z`
- `helm/vX.Y.Z` (also publishes the chart to `oci://artifact.probo.inc/probo/probo`)
- `@probo/n8n-nodes-probo/vX.Y.Z` - `@probo/n8n-nodes-probo/vX.Y.Z`
- `@probo/cookie-banner/vX.Y.Z` - `@probo/cookie-banner/vX.Y.Z`

View File

@@ -1,5 +1,6 @@
# ubuntu:24.04 - pinned to digest for reproducibility (2026-02-05) # ubuntu:24.04 - pinned to digest for reproducibility (2026-02-05)
FROM ubuntu:24.04@sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b ARG BASE_IMAGE=ubuntu:24.04@sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b
FROM ${BASE_IMAGE}
LABEL org.opencontainers.image.source="https://github.com/getprobo/probo" LABEL org.opencontainers.image.source="https://github.com/getprobo/probo"
LABEL org.opencontainers.image.licenses="MIT" LABEL org.opencontainers.image.licenses="MIT"

View File

@@ -49,7 +49,12 @@ TEST_FLAGS?= -race -cover -coverprofile=coverage.out
E2E_CONFIG ?= $(CURDIR)/e2e/console/testdata/config.yaml E2E_CONFIG ?= $(CURDIR)/e2e/console/testdata/config.yaml
E2E_COVER_DIR ?= $(CURDIR)/coverage/e2e E2E_COVER_DIR ?= $(CURDIR)/coverage/e2e
DOCKER_IMAGE_NAME= ghcr.io/getprobo/probo DOCKER_REGISTRY= artifact.probo.inc
DOCKER_PROXY= $(DOCKER_REGISTRY)/docker
DOCKER_BASE_IMAGE= ubuntu:24.04@sha256:c4a8d5503dfb2a3eb8ab5f807da5bc69a85730fb49b5cfca2330194ebcc41c7b
DOCKER_PROXY_BASE_IMAGE= $(DOCKER_PROXY)/library/$(DOCKER_BASE_IMAGE)
DOCKER_IMAGE_NAME= $(DOCKER_REGISTRY)/probo/probo
HELM_CHART_OCI= oci://$(DOCKER_REGISTRY)/probo
DOCKER_TAG_NAME?= latest DOCKER_TAG_NAME?= latest
GENERATED= pkg/server/api/connect/v1/schema/schema.go \ GENERATED= pkg/server/api/connect/v1/schema/schema.go \

View File

@@ -1,6 +1,6 @@
services: services:
probo: probo:
image: "ghcr.io/getprobo/probo:latest" image: "artifact.probo.inc/probo/probo:latest"
environment: environment:
# Required secrets (use secure values in production) # Required secrets (use secure values in production)
PROBOD_ENCRYPTION_KEY: ${PROBOD_ENCRYPTION_KEY} PROBOD_ENCRYPTION_KEY: ${PROBOD_ENCRYPTION_KEY}

View File

@@ -55,7 +55,7 @@ Individual codegen is driven by `go generate`:
| Target | Purpose | | Target | Purpose |
| ------------------- | ------------------------------------------------- | | ------------------- | ------------------------------------------------- |
| `make docker-build` | Build the Docker image (`ghcr.io/getprobo/probo`) | | `make docker-build` | Build the Docker image (`artifact.probo.inc/probo/probo`) |
| `make sbom` | Source SBOM (CycloneDX) | | `make sbom` | Source SBOM (CycloneDX) |
| `make sbom-docker` | Docker image SBOM | | `make sbom-docker` | Docker image SBOM |
| `make scan` | Vulnerability scan (Grype) on source + Docker | | `make scan` | Vulnerability scan (Grype) on source + Docker |

View File

@@ -1,6 +1,6 @@
# Release # Release
The repository ships six independently-versioned tracks. Each has its own The repository ships seven independently-versioned tracks. Each has its own
version source, its own `CHANGELOG.md`, its own tag pattern, and its own version source, its own `CHANGELOG.md`, its own tag pattern, and its own
release workflow. Cutting a release means: bump the version, write a release workflow. Cutting a release means: bump the version, write a
changelog entry, commit, tag, push. changelog entry, commit, tag, push.
@@ -13,6 +13,7 @@ changelog entry, commit, tag, push.
| `proboctl` | `proboctl/v*` | [proboctl.md](./proboctl.md) | | `proboctl` | `proboctl/v*` | [proboctl.md](./proboctl.md) |
| `@probo/n8n-nodes-probo` | `@probo/n8n-nodes-probo/v*` | [n8n-nodes-probo.md](./n8n-nodes-probo.md) | | `@probo/n8n-nodes-probo` | `@probo/n8n-nodes-probo/v*` | [n8n-nodes-probo.md](./n8n-nodes-probo.md) |
| `@probo/cookie-banner` | `@probo/cookie-banner/v*` | [cookie-banner.md](./cookie-banner.md) | | `@probo/cookie-banner` | `@probo/cookie-banner/v*` | [cookie-banner.md](./cookie-banner.md) |
| Helm chart (`probo`) | `helm/v*` | [helm.md](./helm.md) |
When the user asks for a release **without specifying a track**, follow When the user asks for a release **without specifying a track**, follow
[Step 1](#1-decide-which-tracks-to-release) below to detect which tracks [Step 1](#1-decide-which-tracks-to-release) below to detect which tracks
@@ -69,6 +70,10 @@ git log $(git describe --tags --abbrev=0 --match='@probo/n8n-nodes-probo/v*')..H
# @probo/cookie-banner # @probo/cookie-banner
git log $(git describe --tags --abbrev=0 --match='@probo/cookie-banner/v*')..HEAD --oneline \ git log $(git describe --tags --abbrev=0 --match='@probo/cookie-banner/v*')..HEAD --oneline \
-- packages/cookie-banner -- packages/cookie-banner
# helm chart
git log $(git describe --tags --abbrev=0 --match='helm/v*')..HEAD --oneline \
-- contrib/helm
``` ```
If a track returns no commits, skip it. If all commits for a track are If a track returns no commits, skip it. If all commits for a track are

View File

@@ -0,0 +1,34 @@
# Release Helm chart (`probo`)
After confirming commits below, follow the
[common steps](./README.md#3-common-steps-every-track).
## Track facts
- **Tag pattern**: `helm/v*`
- **Version source**: `contrib/helm/charts/probo/Chart.yaml` (`version` field)
- **Version bump**: Edit `version` in `contrib/helm/charts/probo/Chart.yaml`
- **Changelog**: `contrib/helm/charts/probo/CHANGELOG.md`
- **Files to stage**: `contrib/helm/charts/probo/Chart.yaml`,
`contrib/helm/charts/probo/CHANGELOG.md`
- **Workflow**: `.github/workflows/release-helm.yaml`
- **Path filter**: `contrib/helm`
## Detect commits
```shell
git log $(git describe --tags --abbrev=0 --match='helm/v*')..HEAD --oneline \
-- contrib/helm
```
If empty or non-user-facing only, do not release this track.
## Notes
The chart has its own SemVer (`version`). `appVersion` in `Chart.yaml` is
the default probod application version the chart deploys (image tag
`v<appVersion>`). Bump `appVersion` when the chart should default
to a newer probod release.
CI packages the chart and pushes it to
`oci://artifact.probo.inc/probo/probo`, then publishes a GitHub Release.

View File

@@ -32,6 +32,6 @@ The changelog covers changes across all four components (`probod`,
`@probo/console`, `@probo/trust`, `@probo/ui`). `@probo/console`, `@probo/trust`, `@probo/ui`).
CI builds the frontends and Go binaries, builds and pushes the CI builds the frontends and Go binaries, builds and pushes the
multi-arch image to `ghcr.io/getprobo/probo:probod-v<version>` (and multi-arch image to `artifact.probo.inc/probo/probo:v<version>` (and
`:latest`), runs Trivy + cosign + attestations, and publishes the GitHub `:latest`), runs Trivy + cosign + attestations, and publishes the GitHub
Release. Release.

View File

@@ -18,7 +18,20 @@ Before deploying Probo, ensure you have:
## Install ## Install
#### Using Local Chart ### From OCI Registry
```bash
helm install my-probo oci://artifact.probo.inc/probo/probo --version <chart-version>
```
Replace `<chart-version>` with a released chart version (e.g. `0.1.0`). The
chart defaults to the probod image tag `v<appVersion>` from
`Chart.yaml`.
Configure secrets and external services with `--set` flags or a values file
(see [Helm Chart Documentation](charts/probo/README.md)).
### From Local Chart
##### Generate Secrets ##### Generate Secrets
@@ -302,7 +315,7 @@ spec:
| Key | Type | Default | Description | | Key | Type | Default | Description |
|---------------------------------------------------------| ------- |----------------------------------------------------|-----------------------------------------------------------------------------------------------------| |---------------------------------------------------------| ------- |----------------------------------------------------|-----------------------------------------------------------------------------------------------------|
| replicaCount | int | `1` | Number of Probo application replicas | | replicaCount | int | `1` | Number of Probo application replicas |
| image.repository | string | `"ghcr.io/getprobo/probo"` | Container image repository | | image.repository | string | `"artifact.probo.inc/probo/probo"` | Container image repository |
| image.pullPolicy | string | `"IfNotPresent"` | Image pull policy | | image.pullPolicy | string | `"IfNotPresent"` | Image pull policy |
| image.tag | string | `"latest"` | Overrides the image tag whose default is the chart appVersion | | image.tag | string | `"latest"` | Overrides the image tag whose default is the chart appVersion |
| imagePullSecrets | list | `[]` | Image pull secrets for private registries | | imagePullSecrets | list | `[]` | Image pull secrets for private registries |

View File

@@ -0,0 +1,5 @@
# Changelog
All notable changes to the Probo Helm chart will be documented in this file.
## Unreleased

View File

@@ -3,7 +3,7 @@ name: probo
description: A Helm chart for deploying Probo - Open Source Compliance Platform description: A Helm chart for deploying Probo - Open Source Compliance Platform
type: application type: application
version: 0.1.0 version: 0.1.0
appVersion: "0.74.7" appVersion: "0.191.0"
keywords: keywords:
- compliance - compliance
- soc2 - soc2

View File

@@ -12,7 +12,25 @@ This Helm chart deploys Probo - an open-source SOC-2 compliance platform - on Ku
## Installing the Chart ## Installing the Chart
### Generate Required Secrets ### From OCI Registry
```bash
helm install probo oci://artifact.probo.inc/probo/probo --version <chart-version> \
--set probo.baseUrl="probo.example.com" \
--set probo.encryptionKey="$ENCRYPTION_KEY" \
--set probo.auth.cookieSecret="$COOKIE_SECRET" \
--set probo.auth.passwordPepper="$PASSWORD_PEPPER" \
--set probo.trustAuth.tokenSecret="$TRUST_TOKEN_SECRET" \
--set postgresql.host="postgres.example.com" \
--set postgresql.password="<db-password>" \
--set s3.bucket="probo-production" \
--set s3.accessKeyId="<aws-access-key-id>" \
--set s3.secretAccessKey="<aws-secret-access-key>"
```
### From Local Chart
#### Generate Required Secrets
```bash ```bash
# Generate required secrets # Generate required secrets
@@ -63,7 +81,7 @@ For production, create a `values-production.yaml` file:
```yaml ```yaml
# values-production.yaml # values-production.yaml
image: image:
repository: ghcr.io/getprobo/probo repository: artifact.probo.inc/probo/probo
tag: "0.74.7" tag: "0.74.7"
replicaCount: 3 replicaCount: 3
@@ -147,7 +165,7 @@ The following parameters **must** be configured:
| Parameter | Description | Default | | Parameter | Description | Default |
|------------------------|---------------------------------|---------| |------------------------|---------------------------------|---------|
| `image.repository` | Probo image repository | `ghcr.io/getprobo/probo` | | `image.repository` | Probo image repository | `artifact.probo.inc/probo/probo` |
| `image.tag` | Probo image tag | Chart appVersion | | `image.tag` | Probo image tag | Chart appVersion |
| `replicaCount` | Number of Probo replicas | `1` | | `replicaCount` | Number of Probo replicas | `1` |
| `probo.baseUrl` | Public baseUrl | `probo.example.com` | | `probo.baseUrl` | Public baseUrl | `probo.example.com` |

View File

@@ -35,7 +35,7 @@ spec:
- name: {{ .Chart.Name }} - name: {{ .Chart.Name }}
securityContext: securityContext:
{{- toYaml .Values.securityContext | nindent 12 }} {{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default .Chart.AppVersion }}" image: "{{ .Values.image.repository }}:{{ .Values.image.tag | default (printf "v%s" .Chart.AppVersion) }}"
imagePullPolicy: {{ .Values.image.pullPolicy }} imagePullPolicy: {{ .Values.image.pullPolicy }}
env: env:
- name: CONFIG_FILE - name: CONFIG_FILE

View File

@@ -4,7 +4,7 @@
# Use specific version tag # Use specific version tag
image: image:
repository: ghcr.io/getprobo/probo repository: artifact.probo.inc/probo/probo
tag: "0.74.7" tag: "0.74.7"
pullPolicy: IfNotPresent pullPolicy: IfNotPresent

View File

@@ -5,10 +5,10 @@
replicaCount: 1 replicaCount: 1
image: image:
repository: ghcr.io/getprobo/probo repository: artifact.probo.inc/probo/probo
pullPolicy: Always pullPolicy: Always
# Overrides the image tag whose default is the chart appVersion. # Overrides the image tag whose default is the chart appVersion.
tag: "latest" tag: ""
imagePullSecrets: [] imagePullSecrets: []
nameOverride: "" nameOverride: ""