forgeboot/.gitlab/workflows/.gitlab-ci.main.yml
gewuyou e92a53b194 feat(http): 添加 Ktor HTTP客户端模块
- 新增 forgeboot-http 模块,包含 Ktor HTTP 客户端相关代码
- 实现了简单的 HTTP 客户端类和配置类
- 添加了 HTTP 请求重试机制
- 集成了日志记录和 JSON 序列化功能
- 编写了单元测试用例
- 更新了项目配置文件,添加了新模块的依赖
2025-08-13 16:27:59 +08:00

126 lines
3.7 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

stages:
- tag
- publish
- reset
- mirror
variables:
GRADLE_USER_HOME: "$CI_PROJECT_DIR/.gradle"
before_script:
- rm -rf $GRADLE_USER_HOME/.tmp || true
# 🏷️ 自动打标签
tag:
stage: tag
image: alpine:latest
rules:
- if: '$CI_COMMIT_BRANCH == "main" && $CI_COMMIT_MESSAGE !~ /ci/i'
script:
- set -euo pipefail
- apk add --no-cache git
- git config --global user.email "pipeline@${GITLAB_URL}"
- git config --global user.name "Project Pipeline Bot"
- git fetch --tags
- git fetch origin main
- MAIN_COMMIT=$(git rev-parse origin/main)
- echo "🔗 main commit -> $MAIN_COMMIT"
- LATEST_TAG=$(git tag --list '*' --sort=-v:refname | head -n1 || true)
- if [ -z "$LATEST_TAG" ]; then LATEST_TAG="0.0.0"; fi
- echo "🔖 最新 tag -> $LATEST_TAG"
- VERSION=${LATEST_TAG#v}
- MAJOR=$(echo "$VERSION" | cut -d. -f1)
- MINOR=$(echo "$VERSION" | cut -d. -f2)
- PATCH=$(echo "$VERSION" | cut -d. -f3)
- PATCH=$((PATCH + 1))
- if [ "$PATCH" -ge 10 ]; then PATCH=0; MINOR=$((MINOR+1)); echo "🔁 patch 达到 10进位MINOR=$MINOR, PATCH=$PATCH"; fi
- NEW_TAG="${MAJOR}.${MINOR}.${PATCH}"
- echo "🏷️ 新 tag -> $NEW_TAG"
- if git tag --points-at "$MAIN_COMMIT" | grep -E '^[0-9]+\.[0-9]+\.[0-9]+$' > /dev/null; then
echo "⏭️ 已存在 tag跳过创建";
exit 0;
fi
- git tag $NEW_TAG $MAIN_COMMIT
- git push https://oauth2:${PIPELINE_BOT_TOKEN}@${GITLAB_URL}/${CI_PROJECT_PATH}.git $NEW_TAG
- echo "✅ tag $NEW_TAG 已推送"
# 添加 GitHub 远程并推送 tag
- git remote add github https://x-access-token:${GITHUB_PUSH_TOKEN}@github.com/GeWuYou/forgeboot.git
- git push github $NEW_TAG
- echo "✅ tag $NEW_TAG 已同步至 GitHub"
tags:
- java
# 📦 发布至 GitLab 与 GitHub Maven 仓库
publish:
stage: publish
needs: [ "tag" ]
rules:
- if: '$CI_COMMIT_BRANCH == "main" && $CI_COMMIT_MESSAGE !~ /ci/i'
cache:
key:
files:
- gradle/libs.versions.toml
- "**/*.gradle.kts"
prefix: lab-agent
paths:
- .gradle/caches/
- .gradle/wrapper/
- .gradle/kotlin-profile/
- .kotlin/
policy: pull-push
script:
- echo "🔧 授予 gradlew 执行权限..."
- chmod +x gradlew
- ./gradlew publishMavenJavaPublicationToGitLabRepository
- ./gradlew publishMavenJavaPublicationToGitHubRepository --continue
tags:
- java
# 🔄 重建 test 分支
reset:
stage: reset
image: alpine:latest
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
script:
- set -euo pipefail
- apk add --no-cache git
- git config --global user.email "pipeline@${GITLAB_URL}"
- git config --global user.name "Project Pipeline Bot"
- git clone --branch main https://oauth2:${PIPELINE_BOT_TOKEN}@${GITLAB_URL}/${CI_PROJECT_PATH}.git repo
- cd repo
- git checkout -B test
- git push origin test --force
- echo "✅ test 分支已重建完成"
tags:
- java
# Mirror to GitHub
mirror-to-github:
stage: mirror
image: alpine:latest
rules:
- if: '$CI_COMMIT_BRANCH == "main"'
script:
- set -euo pipefail
- apk add --no-cache git openssh
- git config --global user.name "Project Pipeline Bot"
- git config --global user.email "pipeline@${GITLAB_URL}"
- echo "🔄 正在 clone 当前 GitLab 仓库..."
- git clone --branch main https://oauth2:${PIPELINE_BOT_TOKEN}@${GITLAB_URL}/${CI_PROJECT_PATH}.git repo
- cd repo
- echo "🔗 添加 GitHub 远程地址..."
- git remote add github https://x-access-token:${GITHUB_PUSH_TOKEN}@github.com/GeWuYou/forgeboot.git
- echo "🚀 推送 main 分支到 GitHub..."
- git push github main --force
- echo "✅ GitHub 同步完成"
tags:
- java