feat: initial commit — tcb_devportal Next.js app
Some checks failed
homelab-k8s-services/tcb_devportal/pipeline/head There was a failure building this commit

Includes Helm chart (tcb-devportal), Jenkinsfile with homelab CI pipeline,
and Next.js app source.
This commit is contained in:
2026-05-10 14:49:10 +07:00
commit c90a36a54f
572 changed files with 67582 additions and 0 deletions

102
Jenkinsfile vendored Normal file
View File

@@ -0,0 +1,102 @@
@Library('homelab') _
import vn.fireflylab.pipeline.BranchStrategy
// ── Stage functions ────────────────────────────────────────────────
def executeInstall() {
stage('Install') {
container('node') { runNodeInstall() }
}
}
def executeUnitTest() {
stage('Unit Test') {
container('node') { runNodeTest(testCmd: 'run test:coverage') }
}
}
def executeScanCodeQuality() {
stage('Scan Code Quality') {
container('sonar') {
scanCodeQuality(projectKey: 'tcb_devportal')
}
}
}
def executeBuildPush() {
stage('Build & Push') {
container('docker') {
def tag = BranchStrategy.imageTag(env.BRANCH_NAME)
env.IMAGE_TAG = tag
dockerBuildPush(appName: 'tcb_devportal', tag: tag)
}
}
}
def executeBumpChart() {
stage('Bump Helm Chart') {
container('tools') {
bumpHelmChart(imageTag: env.IMAGE_TAG)
gitCommitPush(
files: ['manifest/helm/Chart.yaml', 'manifest/helm/values.yaml'],
message: "ci: bump tcb_devportal chart to ${env.IMAGE_TAG}"
)
}
}
}
// ── Pipeline ───────────────────────────────────────────────────────
// PR-* → install + test
// feature/* → install + test + scan + build + push
// develop → install + test + scan + build + push
// main → install + test + scan + build + push
// release/x.y.z → install + test + scan + build + push
// hotfix/* → install + test + scan + build + push
podTemplate(yaml: homelabK8sAgent(withTools: true, withSonar: true)) {
node(POD_LABEL) {
withEnv(['DOCKER_HOST=tcp://localhost:2375']) {
checkout scm
BranchStrategy.prStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
}
BranchStrategy.featureStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
BranchStrategy.developStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
BranchStrategy.mainStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
BranchStrategy.releaseStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
BranchStrategy.hotfixStrategy(env.BRANCH_NAME) {
executeInstall()
executeUnitTest()
executeScanCodeQuality()
executeBuildPush()
}
}
}
}