Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
66165c1
reconcile: update statefulset status on success for OnDelete update s…
AndrewChubatiuk May 22, 2026
5e4a3a2
olm: added stable channel, removed unneeded pipeline steps (#2201)
AndrewChubatiuk May 25, 2026
8474ea1
reconcile: prevent from staying in expanding state (#2124)
AndrewChubatiuk May 11, 2026
9e1a9ff
[vm|vl|vt]cluster: properly generate storageNode command line flags w…
AndrewChubatiuk May 11, 2026
28310d3
chore: switch env repo back to origin (#2130)
AndrewChubatiuk May 12, 2026
d326c33
tests: add more reconcile status change e2e tests (#2140)
vrutkovs May 12, 2026
1c9d37c
chore: skip building allure-report when ./allure-results didn't get c…
vrutkovs May 12, 2026
a95e254
pin actions to full-length commit SHAs (#2168)
rudransh-shrivastava May 14, 2026
525fb3c
feat(vmrule): add patchMergeKey to Groups for kubectl/kustomize patch…
mvanhorn May 15, 2026
a6a8992
Halt emitting config-reloader signals when delay-interval is customiz…
vrutkovs May 15, 2026
ddf8019
reconcile: update statefulset status on success for OnDelete update s…
AndrewChubatiuk May 27, 2026
6664cd3
fix: use seconds for config-reloader success timestamp metric (#2228)
immanuwell May 29, 2026
eb866c3
ignore not found errors during attempt to update resource status (#2240)
AndrewChubatiuk Jun 2, 2026
ea9f1e6
internal/config: update VM_METRICS_VERSION to v1.145.0 (#2260)
makasim Jun 8, 2026
ed62305
vmanomaly: fix marshalling of verify_tls (#2266)
zekker6 Jun 9, 2026
9cdedcc
fix: allow watched files with '..' in their names (#2253)
immanuwell Jun 12, 2026
f708b62
Several fixes around config-reloader's blocking I/O (#2295)
vrutkovs Jun 15, 2026
c852f01
victoriametrics_app=true metric label for all resources (#2296)
vrutkovs Jun 15, 2026
eabbd6e
Update VictoriaLogs Docker image tag from v1.50.0 to v1.51.0 (#2301)
valyala Jun 17, 2026
6089fd7
fix: handle config-reloader dir watch removals (#2306)
immanuwell Jun 18, 2026
28d1c8e
dependency: update VictoriaTraces version to v0.9.3 (#2304)
jiekun Jun 18, 2026
dc7b4f8
fix: handle config-reloader secret watch tombstones (#2303)
immanuwell Jun 17, 2026
d246f0e
ported anomaly changes
AndrewChubatiuk Jun 20, 2026
1598335
test: pass operator env vars in upgrade tests
vrutkovs Jun 22, 2026
1c44958
test: trim overlapping vmdistributed and vmanomaly tests (#2262)
vrutkovs Jun 12, 2026
6725052
test: skip enterprise tests when license is not available (#2054)
vrutkovs Apr 10, 2026
15aeaa1
test: set default resources for upgrade tests
vrutkovs Jun 23, 2026
0176394
test: remove vmanomaly upgrade tests
vrutkovs Jun 23, 2026
39492eb
internal/config: update VM_METRICS_VERSION to v1.146.0 (#2314)
f41gh7 Jun 22, 2026
02e98c2
fix: set UnderScoreTargetLabel in victoriaMetricsAppRelabelConfig to …
vrutkovs Jun 24, 2026
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
8 changes: 4 additions & 4 deletions .github/workflows/crds.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -16,22 +16,22 @@ jobs:
name: docs
steps:
- name: Check out operator code
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: VictoriaMetrics/operator
token: ${{ secrets.VM_BOT_GH_TOKEN }}
path: __vm-operator-repo

- name: Check out VM code
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: VictoriaMetrics/helm-charts
ref: master
token: ${{ secrets.VM_BOT_GH_TOKEN }}
path: __vm-charts-repo

- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v6
uses: crazy-max/ghaction-import-gpg@2dc316deee8e90f13e1a351ab510b4d5bc0c82cd # v7.0.0
id: import-gpg
with:
gpg_private_key: ${{ secrets.VM_BOT_GPG_PRIVATE_KEY }}
Expand All @@ -52,7 +52,7 @@ jobs:
working-directory: __vm-charts-repo

- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
with:
add-paths: charts
commit-message: Automatic update operator crds from ${{ github.repository }}@${{ steps.update.outputs.SHORT_SHA }}
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/docs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,20 @@ jobs:
url: https://docs.victoriametrics.com/operator
Comment thread
AndrewChubatiuk marked this conversation as resolved.
steps:
- name: Checkout operator repo
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
path: __vm-operator

- name: Checkout docs repo
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: VictoriaMetrics/vmdocs
ref: main
token: ${{ secrets.VM_BOT_GH_TOKEN }}
path: __vm-docs

- name: Setup Go
uses: actions/setup-go@v6
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: '__vm-operator/go.mod'
check-latest: true
Expand All @@ -42,7 +42,7 @@ jobs:

- name: Import GPG key
id: import-gpg
uses: crazy-max/ghaction-import-gpg@v6
uses: crazy-max/ghaction-import-gpg@2dc316deee8e90f13e1a351ab510b4d5bc0c82cd # v7.0.0
with:
gpg_private_key: ${{ secrets.VM_BOT_GPG_PRIVATE_KEY }}
passphrase: ${{ secrets.VM_BOT_PASSPHRASE }}
Expand Down
14 changes: 7 additions & 7 deletions .github/workflows/main.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -60,30 +60,30 @@ jobs:
SAVED=$((AFTER-BEFORE))
echo "Saved $(formatByteCount $SAVED)"
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Prepare binary cache
uses: actions/cache@v4
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
with:
path: ./bin
key: binary
- name: Setup Go
uses: actions/setup-go@v6
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: "go.mod"
check-latest: true
cache: true
id: go

- name: Run Trivy vulnerability scanner in repo mode
uses: aquasecurity/trivy-action@master
uses: aquasecurity/trivy-action@57a97c7e7821a5776cebc9bb87c984fa69cba8f1 # v0.35.0
with:
scan-type: "fs"
ignore-unfixed: true
format: "sarif"
output: "trivy-results.sarif"

- name: Upload Trivy scan results to GitHub Security tab
uses: github/codeql-action/upload-sarif@v4
uses: github/codeql-action/upload-sarif@c6f931105cb2c34c8f901cc885ba1e2e259cf745 # v4.34.0
with:
sarif_file: "trivy-results.sarif"

Expand Down Expand Up @@ -119,7 +119,7 @@ jobs:
git fetch origin ${{ github.base_ref || 'master' }}
BASE_REF=origin/${{ github.base_ref || 'master' }} TAG=${TAG} make test-e2e
- name: Publish Test Report
uses: mikepenz/action-junit-report@v6
uses: mikepenz/action-junit-report@49b2ca06f62aa7ef83ae6769a2179271e160d8e4 # v6.3.1
if: success() || failure()
with:
report_paths: 'report.xml'
Expand All @@ -128,7 +128,7 @@ jobs:
run: make allure-report
- name: Archive Allure report
if: github.event.pull_request.draft == false && failure()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: allure-report
path: ./allure-report
42 changes: 21 additions & 21 deletions .github/workflows/operatorhub.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ jobs:
update:
name: Publish new OperatorHub release
runs-on: ubuntu-latest
env:
CHANNEL: ${{ startsWith(github.event.workflow_run.head_branch, 'release') && 'stable' || 'beta' }}
if: ${{ (github.event.workflow_run.conclusion == 'success' && ! contains(github.event.workflow_run.head_branch, '-')) || github.event_name == 'workflow_dispatch' && github.event.workflow_run.release != 'prereleased' }}
strategy:
matrix:
Expand All @@ -33,15 +35,15 @@ jobs:
GH_TOKEN: ${{ secrets.VM_BOT_GH_TOKEN }}

- name: Check out OperatorHub operators repo fork
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: ${{ matrix.repo.upstream }}
ref: main
token: ${{ secrets.VM_BOT_GH_TOKEN }}
path: __operatorhub-repo

- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v6
uses: crazy-max/ghaction-import-gpg@2dc316deee8e90f13e1a351ab510b4d5bc0c82cd # v7.0.0
id: import-gpg
with:
gpg_private_key: ${{ secrets.VM_BOT_GPG_PRIVATE_KEY }}
Expand All @@ -50,22 +52,14 @@ jobs:
git_commit_gpgsign: true
workdir: __operatorhub-repo

- uses: dawidd6/action-download-artifact@v11
- uses: dawidd6/action-download-artifact@1f8785ff7a5130826f848e7f72725c85d241860f # v18
with:
name: olm
workflow: release.yaml
github_token: ${{ secrets.VM_BOT_GH_TOKEN }}
run_id: ${{ github.event.workflow_run.id }}
path: bundle

- name: Install opm
run: |
OPM_VERSION=v1.65.0
curl -fsSLO https://github.com/operator-framework/operator-registry/releases/download/${OPM_VERSION}/linux-amd64-opm
curl -fsSLO https://github.com/operator-framework/operator-registry/releases/download/${OPM_VERSION}/checksums.txt
grep ' linux-amd64-opm$' checksums.txt | sha256sum -c -
install -m 0755 linux-amd64-opm /usr/local/bin/opm

- name: Add operatorhub bundle
id: update
run: |
Expand All @@ -78,8 +72,12 @@ jobs:
export OPERATOR_DIR=__operatorhub-repo/operators/${OPERATOR_NAME}
mkdir -p ${OPERATOR_DIR}

NEW_VERSION=$(ls bundle | head -1)
export OLD_VERSION=$(find ${OPERATOR_DIR}/* ! -path "*/catalog-templates" -maxdepth 0 -type d -exec basename {} \; | sort -V -r | head -1)
export NEW_VERSION=$(ls bundle | head -1)
export OLD_VERSION=$(
{ find ${OPERATOR_DIR}/* ! -path "*/catalog-templates" -maxdepth 0 -type d -exec basename {} \;
echo "${NEW_VERSION}"
} | sort -V | grep -B1 "^${NEW_VERSION}$" | grep -v "^${NEW_VERSION}$"
)
export OLD_ENTRY="${OPERATOR_NAME}.v${OLD_VERSION}"

if [ ! -z $OLD_VERSION ]; then
Expand All @@ -89,22 +87,24 @@ jobs:

mv bundle/${NEW_VERSION} ${OPERATOR_DIR}/
if [ -f ${OPERATOR_DIR}/Makefile ]; then
opm render ${OPERATOR_DIR}/${NEW_VERSION} --output=yaml \
| yq 'select(.schema == "olm.bundle")' > /tmp/new-bundle.yaml

yq -n '.catalog_templates = []' > ${OPERATOR_DIR}/${NEW_VERSION}/release-config.yaml
for TEMPLATE in ${OPERATOR_DIR}/catalog-templates/*.yaml; do
PREV_HEAD=$(yq '.entries[] | select(.schema == "olm.channel") | .entries[-1].name' "${TEMPLATE}")
NEW_VERSION="${NEW_VERSION}" PREV_HEAD="${PREV_HEAD}" \
yq -i '(.entries[] | select(.schema == "olm.channel") | .entries) += [{"name": "victoriametrics-operator.v" + strenv(NEW_VERSION), "replaces": strenv(PREV_HEAD)}]' "${TEMPLATE}"
yq -i '.entries += [load("/tmp/new-bundle.yaml")]' "${TEMPLATE}"
export TPL=$(basename ${TEMPLATE})
if [ "$CHANNEL" = "stable" ] && ! yq -e '.entries[] | select(.schema == "olm.channel" and .name == "stable")' "$TEMPLATE" > /dev/null 2>&1 && [ -n "$OLD_VERSION" ]; then
yq -i '.catalog_templates += [{"template_name": strenv(TPL), "channels": ["stable","beta"], "replaces": strenv(OLD_ENTRY)}]' ${OPERATOR_DIR}/${NEW_VERSION}/release-config.yaml
elif [ -n "$OLD_VERSION" ]; then
yq -i '.catalog_templates += [{"template_name": strenv(TPL), "channels": [strenv(CHANNEL)], "replaces": strenv(OLD_ENTRY)}]' ${OPERATOR_DIR}/${NEW_VERSION}/release-config.yaml
else
yq -i '.catalog_templates += [{"template_name": strenv(TPL), "channels": [strenv(CHANNEL)]}]' ${OPERATOR_DIR}/${NEW_VERSION}/release-config.yaml
fi
done
fi

echo "VERSION=${NEW_VERSION}" >> $GITHUB_OUTPUT

- name: Create Pull Request
if: ${{ steps.update.outputs.VERSION != '' }}
uses: peter-evans/create-pull-request@v7
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
with:
add-paths: operators/victoriametrics-operator
commit-message: 'victoriametrics-operator: ${{ steps.update.outputs.VERSION }}'
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,14 +14,14 @@ jobs:
pages: write
steps:
- name: Checkout code
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Prepare binary cache
uses: actions/cache@v4
uses: actions/cache@668228422ae6a00e4ad889ee87cd7109ec5666a7 # v5.0.4
with:
path: ./bin
key: binary
- name: Setup Go
uses: actions/setup-go@v6
uses: actions/setup-go@4b73464bb391d4059bd26b0524d20df3927bd417 # v6.3.0
with:
go-version-file: 'go.mod'
check-latest: true
Expand All @@ -42,7 +42,7 @@ jobs:
gh release upload ${{github.event.release.tag_name}} ./dist/install-no-webhook.yaml#install-no-webhook.yaml --clobber || echo "fix me NOT enough security permissions"
gh release upload ${{github.event.release.tag_name}} ./dist/install-with-webhook.yaml#install-with-webhook.yaml --clobber || echo "fix me NOT enough security permissions"
gh release upload ${{github.event.release.tag_name}} ./config/crd/overlay/crd.yaml#crd.yaml --clobber || echo "fix me NOT enough security permissions"
- uses: actions/upload-artifact@v5
- uses: actions/upload-artifact@bbbca2ddaa5d8feaa63e36b76fdaad77386f024f # v7.0.0
with:
name: olm
path: bundle
Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/sandbox.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ jobs:
runs-on: ubuntu-latest
Comment thread
AndrewChubatiuk marked this conversation as resolved.
steps:
- name: Checkout operator
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: VictoriaMetrics/operator
ref: ${{ github.event.inputs.branch }}
Expand All @@ -40,15 +40,15 @@ jobs:
TAG=$IMAGE_TAG make docker-push

- name: Checkout ops
uses: actions/checkout@v5
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
with:
repository: VictoriaMetrics/ops
ref: main
token: ${{ secrets.VM_BOT_GH_TOKEN }}
path: __vm-ops-repo

- name: Import GPG key
uses: crazy-max/ghaction-import-gpg@v6
uses: crazy-max/ghaction-import-gpg@2dc316deee8e90f13e1a351ab510b4d5bc0c82cd # v7.0.0
id: import-gpg
with:
gpg_private_key: ${{ secrets.VM_BOT_GPG_PRIVATE_KEY }}
Expand All @@ -66,7 +66,7 @@ jobs:
working-directory: __vm-ops-repo

- name: Create Pull Request
uses: peter-evans/create-pull-request@v7
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8.1.0
with:
add-paths: ${{ steps.update.outputs.OPERATOR_PATH }}
commit-message: Automatic update operator version on sandbox from ${{ github.repository }}@${{ env.IMAGE_TAG }}
Expand Down
10 changes: 5 additions & 5 deletions .github/workflows/upgrade-tests.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -26,14 +26,14 @@ jobs:
SAVED=$((AFTER-BEFORE))
echo "Saved $(formatByteCount $SAVED)"
- name: Checkout code
uses: actions/checkout@v6
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
- name: Prepare binary cache
uses: actions/cache@v5
uses: actions/cache@27d5ce7f107fe9357f9df03efb73ab90386fccae # v5.0.5
with:
path: ./bin
key: binary
- name: Setup Go
uses: actions/setup-go@v6
uses: actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c # v6.4.0
with:
go-version-file: "go.mod"
check-latest: true
Expand All @@ -55,7 +55,7 @@ jobs:
sudo apt install -y libgpgme-dev
TAG=${TAG} make test-e2e-upgrade
- name: Publish Test Report
uses: mikepenz/action-junit-report@v6
uses: mikepenz/action-junit-report@bccf2e31636835cf0874589931c4116687171386 # v6.4.0
if: success() || failure()
with:
report_paths: 'report.xml'
Expand All @@ -64,7 +64,7 @@ jobs:
run: make allure-report
- name: Archive Allure report
if: failure()
uses: actions/upload-artifact@v7
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: allure-report
path: ./allure-report
20 changes: 15 additions & 5 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ TAG ?= $(shell echo $$(git describe --long --all | tr '/' '-')$$( \
git diff-index --quiet HEAD -- || echo '-dirty-'$$( \
git diff-index -u HEAD -- ':!config' ':!docs' | openssl sha1 | cut -d' ' -f2 | cut -c 1-8)))
OPERATOR_IMAGE ?= $(REGISTRY)/$(ORG)/$(REPO):$(TAG)
CONFIG_RELOADER_IMAGE ?= $(REGISTRY)/$(ORG)/$(REPO):config-reloader-$(TAG)
VERSION ?= $(if $(findstring $(TAG),$(TAG:v%=%)),0.0.0,$(TAG:v%=%))
DATEINFO_TAG ?= $(shell date -u +'%Y%m%d-%H%M%S')
NAMESPACE ?= vm
Expand Down Expand Up @@ -162,7 +163,7 @@ test: manifests generate fmt vet envtest ## Run tests.
# Utilize Kind or modify the e2e tests to load the image locally, enabling compatibility with other vendors.
.PHONY: test-e2e # Run the e2e tests against a Kind k8s instance that is spun up.
test-e2e: load-kind ginkgo crust-gather mirrord
env CGO_ENABLED=1 OPERATOR_IMAGE=$(OPERATOR_IMAGE) REPORTS_DIR=$(shell pwd) CRUST_GATHER_BIN=$(CRUST_GATHER_BIN) $(MIRRORD_BIN) exec -f ./mirrord.json -- $(GINKGO_BIN) \
env CGO_ENABLED=1 OPERATOR_IMAGE=$(OPERATOR_IMAGE) CONFIG_RELOADER_IMAGE=$(CONFIG_RELOADER_IMAGE) REPORTS_DIR=$(shell pwd) CRUST_GATHER_BIN=$(CRUST_GATHER_BIN) $(MIRRORD_BIN) exec -f ./mirrord.json -- $(GINKGO_BIN) \
-ldflags="-linkmode=external" \
--output-interceptor-mode=none \
-procs=$(E2E_TESTS_CONCURRENCY) \
Expand Down Expand Up @@ -210,6 +211,10 @@ docker-build: ## Build docker image with the manager.
${DOCKER_BUILD_ARGS} \
-t $(REGISTRY)/$(ORG)/$(REPO):$(TAG) .

.PHONY: docker-build-config-reloader
docker-build-config-reloader: ## Build docker image with config-reloader.
TAG=config-reloader-$(TAG) COMPONENT=config-reloader ROOT=./cmd/config-reloader $(MAKE) docker-build

build-operator: ROOT=./cmd
build-operator: build

Expand Down Expand Up @@ -318,13 +323,18 @@ undeploy: kustomize ## Undeploy controller from the K8s cluster specified in ~/.
$(KUSTOMIZE) build $(OVERLAY) | $(KUBECTL) delete $(if $(NAMESPACE),-n $(NAMESPACE),) --ignore-not-found=$(ignore-not-found) -f -

# builds image and loads it into kind.
load-kind: docker-build kind
ensure-kind-cluster: kind
if [ "`$(KIND) get clusters`" != "kind" ]; then \
$(KIND) create cluster --config=./kind.yaml; \
else \
$(KUBECTL) cluster-info --context kind-kind; \
fi; \
$(KIND) load docker-image $(REGISTRY)/$(ORG)/$(REPO):$(TAG); \
fi

load-kind: docker-build docker-build-config-reloader ensure-kind-cluster
if [ "$(CONTAINER_TOOL)" != "podman" ]; then \
$(KIND) load docker-image $(REGISTRY)/$(ORG)/$(REPO):$(TAG); \
$(KIND) load docker-image $(CONFIG_RELOADER_IMAGE); \
fi

deploy-kind: OVERLAY=config/base-with-webhook
deploy-kind: load-kind deploy
Expand Down Expand Up @@ -458,7 +468,7 @@ $(MIRRORD_BIN): $(LOCALBIN)

.PHONY: allure-report
allure-report:
npx allure awesome --single-file ./allure-results -o ./allure-report
@[ -d ./allure-results ] && npx allure awesome --single-file ./allure-results -o ./allure-report || echo "allure-results dir not found, skipping report generation"
Comment thread
AndrewChubatiuk marked this conversation as resolved.

# go-install-tool will 'go install' any package with custom target and name of binary, if it doesn't exist
# $1 - target path with name of binary (ideally with version)
Expand Down
Loading
Loading