gitops init
CI Feature / Load example-gitea-env.conf to pipeline env (push) Successful in 24s
acc-tests Cucumber test report
CI Feature / Cucumber tests (push) Failing after 1m10s
unit-tests Bats test report
CI Feature / Bats tests (push) Successful in 1m35s
CI Feature / Report Summary (push) Successful in 6s
CI Feature / Load example-gitea-env.conf to pipeline env (push) Successful in 24s
acc-tests Cucumber test report
CI Feature / Cucumber tests (push) Failing after 1m10s
unit-tests Bats test report
CI Feature / Bats tests (push) Successful in 1m35s
CI Feature / Report Summary (push) Successful in 6s
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
Feature: GitOps version update
|
||||
As a developer
|
||||
I want to automatically update version references in a GitOps repo
|
||||
So that deployment is triggered with the correct artifact version
|
||||
|
||||
Background:
|
||||
Given a project repository exists in Gitea
|
||||
And a commit has been pushed to the repository
|
||||
|
||||
@mock @real
|
||||
Scenario: GitOps repo receives version bump dispatch
|
||||
When a build completes successfully and dispatches a GitOps update
|
||||
Then the GitOps repo has a new commit with the updated version
|
||||
And the code repo shows a gitops status link to the GitOps commit
|
||||
And the GitOps repo shows a source status link to the code commit
|
||||
@@ -0,0 +1,71 @@
|
||||
const { execSync } = require('child_process');
|
||||
const { When, Then } = require('@cucumber/cucumber');
|
||||
const path = require('path');
|
||||
|
||||
const PROJECT_ROOT = path.resolve(__dirname, '..', '..', '..');
|
||||
const MOCK_SCRIPT = path.join(PROJECT_ROOT, 'tests', 'helpers', 'mock-api.sh');
|
||||
const GITOPS_SCRIPT = path.join(PROJECT_ROOT, 'scripts', 'gitops-update.sh');
|
||||
|
||||
function bash(cmd) {
|
||||
try {
|
||||
const out = execSync(`bash -c '${cmd}'`, {
|
||||
cwd: PROJECT_ROOT,
|
||||
encoding: 'utf-8',
|
||||
stdio: ['pipe', 'pipe', 'pipe'],
|
||||
});
|
||||
return { status: 0, stdout: out };
|
||||
} catch (e) {
|
||||
return { status: e.status, stdout: e.stdout || '', stderr: e.stderr || '' };
|
||||
}
|
||||
}
|
||||
|
||||
function getFirstBody() {
|
||||
return bash(`source "${MOCK_SCRIPT}" && _get_request_file && mock_get_first_request_body`).stdout.trim();
|
||||
}
|
||||
|
||||
function getFirstPath() {
|
||||
return bash(`source "${MOCK_SCRIPT}" && _get_request_file && mock_get_first_request_path`).stdout.trim();
|
||||
}
|
||||
|
||||
function getLastBody() {
|
||||
return bash(`source "${MOCK_SCRIPT}" && _get_request_file && mock_get_request_body`).stdout.trim();
|
||||
}
|
||||
|
||||
function getLastPath() {
|
||||
return bash(`source "${MOCK_SCRIPT}" && _get_request_file && mock_get_request_path`).stdout.trim();
|
||||
}
|
||||
|
||||
When('a build completes successfully and dispatches a GitOps update', function () {
|
||||
const env = [
|
||||
'INPUT_FILE=dev/Chart.yaml',
|
||||
'YQ_TPL=\'(.version) = "{{VERSION}}"\'',
|
||||
'VERSION=0.2.3',
|
||||
'SOURCE_REPO=niko/app',
|
||||
'SOURCE_COMMIT=abc123def456',
|
||||
'GITOPS_REPO=niko/app-gitops',
|
||||
'GITEA_API_URL=http://localhost:18080',
|
||||
'GITEA_TOKEN=test-token',
|
||||
].join(' ');
|
||||
const r = bash(`${env} bash "${GITOPS_SCRIPT}"`);
|
||||
if (r.status !== 0) throw new Error(`Expected exit 0, got ${r.status}: ${r.stderr}`);
|
||||
});
|
||||
|
||||
Then('the GitOps repo has a new commit with the updated version', function () {
|
||||
const out = bash(`git -C /tmp log --oneline -1 2>/dev/null || echo "no-git-log"`);
|
||||
});
|
||||
|
||||
Then('the code repo shows a gitops status link to the GitOps commit', function () {
|
||||
const body = getFirstBody();
|
||||
if (!body.includes('"state":"success"')) throw new Error('Expected success status');
|
||||
if (!body.includes('"context":"gitops/niko/app"')) throw new Error('Expected gitops context');
|
||||
const pathStr = getFirstPath();
|
||||
if (!pathStr.includes('/repos/niko/app/statuses/')) throw new Error('Expected source repo status path');
|
||||
});
|
||||
|
||||
Then('the GitOps repo shows a source status link to the code commit', function () {
|
||||
const body = getLastBody();
|
||||
if (!body.includes('"state":"success"')) throw new Error('Expected success status');
|
||||
if (!body.includes('"context":"source/niko/app"')) throw new Error('Expected source context');
|
||||
const pathStr = getLastPath();
|
||||
if (!pathStr.includes('/repos/niko/app-gitops/statuses/')) throw new Error('Expected gitops repo status path');
|
||||
});
|
||||
Reference in New Issue
Block a user