Compare commits

...

9 Commits

10 changed files with 169 additions and 34 deletions

View File

@ -162,7 +162,14 @@ jobs:
- name: Release GitLab - name: Release GitLab
run: | run: |
./cicd-release-linux-amd64 pre-release gitlab --release-name=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --tag=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --auto-create-tag --gitlab-repository=$GITHUB_REPOSITORY --gitlab-username=$GITHUB_ACTOR --gitlab-token=${{ secrets.PRIVATE_GITLAB_TOKEN }} --release-body=${{ needs.build.outputs.RELEASE_BODY }} --package-name=cicd-release --artifacts=cicd-release-windows-amd64.exe --artifacts=cicd-release-windows-arm64.exe --artifacts=cicd-release-linux-amd64 --artifacts=cicd-release-linux-arm64 --artifacts=cicd-release-darwin-amd64 --artifacts=cicd-release-darwin-arm64 --artifacts=cicd-release-loong64 ./cicd-release-linux-amd64 pre-release gitlab --release-name=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --tag=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --auto-create-tag --gitlab-repository=$GITHUB_REPOSITORY --gitlab-username=$GITHUB_ACTOR --gitlab-token=${{ secrets.PRIVATE_GITLAB_TOKEN }} --release-body=${{ needs.build.outputs.RELEASE_BODY }} --package-name=cicd-release --artifacts=cicd-release-windows-amd64.exe --artifacts=cicd-release-windows-arm64.exe --artifacts=cicd-release-linux-amd64 --artifacts=cicd-release-linux-arm64 --artifacts=cicd-release-darwin-amd64 --artifacts=cicd-release-darwin-arm64 --artifacts=cicd-release-loong64 --gitlab-export-assets-file-name=gitlab-release-assets.json
- name: Upload Artifactsgitlab-release-assets.json
uses: actions/upload-artifact@v3
with:
name: gitlab-release-assets
path: |
gitlab-release-assets.json
release-gitlink: release-gitlink:
needs: build needs: build
@ -192,14 +199,52 @@ jobs:
- name: Release GitLink - name: Release GitLink
run: | run: |
./cicd-release-linux-amd64 pre-release gitlink --release-name=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --tag=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --auto-create-tag --gitlink-repository=$GITHUB_REPOSITORY --gitlink-username=${{ secrets.PRIVATE_GITLINK_USERNAME }} --gitlink-token=${{ secrets.PRIVATE_GITLINK_TOKEN }} --release-body=${{ needs.build.outputs.RELEASE_BODY }} --artifacts=cicd-release-windows-amd64.exe --artifacts=cicd-release-windows-arm64.exe --artifacts=cicd-release-linux-amd64 --artifacts=cicd-release-linux-arm64 --artifacts=cicd-release-darwin-amd64 --artifacts=cicd-release-darwin-arm64 --artifacts=cicd-release-loong64 --gitlink-cookie=${{ secrets.PRIVATE_GITLINK_COOKIE }} --gitlink-export-assets-file-name=cicd-release-assets.json ./cicd-release-linux-amd64 pre-release gitlink --release-name=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --tag=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --auto-create-tag --gitlink-repository=$GITHUB_REPOSITORY --gitlink-username=${{ secrets.PRIVATE_GITLINK_USERNAME }} --gitlink-token=${{ secrets.PRIVATE_GITLINK_TOKEN }} --release-body=${{ needs.build.outputs.RELEASE_BODY }} --artifacts=cicd-release-windows-amd64.exe --artifacts=cicd-release-windows-arm64.exe --artifacts=cicd-release-linux-amd64 --artifacts=cicd-release-linux-arm64 --artifacts=cicd-release-darwin-amd64 --artifacts=cicd-release-darwin-arm64 --artifacts=cicd-release-loong64 --gitlink-cookie=${{ secrets.PRIVATE_GITLINK_COOKIE }} --gitlink-export-assets-file-name=gitlink-release-assets.json
- name: Upload Artifactscicd-release-assets.json - name: Upload Artifactsgitlink-release-assets.json
uses: actions/upload-artifact@v3 uses: actions/upload-artifact@v3
with: with:
name: cicd-release-assets name: gitlink-release-assets
path: | path: |
cicd-release-assets.json gitlink-release-assets.json
release-framagit:
needs:
- build
- release-gitlab
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
with:
# 获取所有的代码历史记录,包括分支和标签
fetch-depth: 0
- name: Download Artifacts
uses: actions/download-artifact@v3
with:
name: cicd-release
path: .
- name: ls -l
run: ls -l
- name: chmod +x cicd-release-linux-amd64
run: chmod +x cicd-release-linux-amd64
- name: ls -l
run: ls -l
- name: Download Artifactsgitlab-release-assets.json
uses: actions/download-artifact@v3
with:
name: gitlab-release-assets
path: .
- name: Release FramaGit
run: |
./cicd-release-linux-amd64 pre-release gitlab --gitlab-instance=https://framagit.org --release-name=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --tag=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --auto-create-tag --gitlab-repository=$GITHUB_REPOSITORY --gitlab-username=xuxiaowei --gitlab-token=${{ secrets.PRIVATE_FRAMAGIT_TOKEN }} --release-body=${{ needs.build.outputs.RELEASE_BODY }} --gitlab-import-assets-file-name=gitlab-release-assets.json
release-gitee: release-gitee:
needs: needs:
@ -229,12 +274,12 @@ jobs:
- name: ls -l - name: ls -l
run: ls -l run: ls -l
- name: Download Artifactscicd-release-assets.json - name: Download Artifactsgitlink-release-assets.json
uses: actions/download-artifact@v3 uses: actions/download-artifact@v3
with: with:
name: cicd-release-assets name: gitlink-release-assets
path: . path: .
- name: Release Gitee - name: Release Gitee
run: | run: |
./cicd-release-linux-amd64 pre-release gitee --release-name=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --tag=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --auto-create-tag --gitee-repository=$GITHUB_REPOSITORY --gitee-username=$GITHUB_ACTOR --gitee-token=${{ secrets.PRIVATE_GITEE_TOKEN }} --release-body=${{ needs.build.outputs.RELEASE_BODY }} --gitlink-export-assets-file-name=cicd-release-assets.json ./cicd-release-linux-amd64 pre-release gitee --release-name=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --tag=v0.0.0-${{ needs.build.outputs.YEAR_MONTH_DAY_HOUR_MINUTE }} --auto-create-tag --gitee-repository=$GITHUB_REPOSITORY --gitee-username=$GITHUB_ACTOR --gitee-token=${{ secrets.PRIVATE_GITEE_TOKEN }} --release-body=${{ needs.build.outputs.RELEASE_BODY }} --gitlink-export-assets-file-name=gitlink-release-assets.json

View File

@ -141,7 +141,9 @@
```shell ```shell
go env -w GOPROXY=https://goproxy.cn,direct go env -w GOPROXY=https://goproxy.cn,direct
# go env -w GOPROXY=https://proxy.golang.org,direct # go env -w GOPROXY=https://proxy.golang.org,direct
# go env -w GOPROXY=https://goproxy.io,direct
# go env -w GOPROXY=https://mirrors.aliyun.com/goproxy,direct # go env -w GOPROXY=https://mirrors.aliyun.com/goproxy,direct
# go env -w GOPROXY=https://mirrors.cloud.tencent.com/go,direct
go get -u github.com/urfave/cli/v2 go get -u github.com/urfave/cli/v2
go get -u github.com/xuxiaowei-com-cn/git-go@main go get -u github.com/xuxiaowei-com-cn/git-go@main
go get -u github.com/xuxiaowei-com-cn/go-gitlink/v2 go get -u github.com/xuxiaowei-com-cn/go-gitlink/v2
@ -242,6 +244,9 @@ OPTIONS:
--gitlab-export-assets-file-name value Gitlab 导出资源文件名称。 --gitlab-export-assets-file-name value Gitlab 导出资源文件名称。
主要用于发布到 Gitee 时在版本发布中新增产物下载地址Gitee 没有上传产物的 API 主要用于发布到 Gitee 时在版本发布中新增产物下载地址Gitee 没有上传产物的 API
导出格式为 map代表文件名代表下载链接 导出格式为 map代表文件名代表下载链接
--gitlab-import-assets-file-name value Gitlab 导入资源文件名称。
主要用于发布到未启用 GitLab 软件包库时,发布中产物下载地址。
导入格式为 map代表文件名代表下载链接
--github-repository value Github 仓库。 --github-repository value Github 仓库。
https://github.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为xuxiaowei-com-cn/cicd-release [%GITHUB_REPOSITORY%] https://github.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为xuxiaowei-com-cn/cicd-release [%GITHUB_REPOSITORY%]
--github-username value Github 用户名 [%GITHUB_ACTOR%] --github-username value Github 用户名 [%GITHUB_ACTOR%]
@ -300,6 +305,9 @@ OPTIONS:
--gitlab-export-assets-file-name value Gitlab 导出资源文件名称。 --gitlab-export-assets-file-name value Gitlab 导出资源文件名称。
主要用于发布到 Gitee 时在版本发布中新增产物下载地址Gitee 没有上传产物的 API 主要用于发布到 Gitee 时在版本发布中新增产物下载地址Gitee 没有上传产物的 API
导出格式为 map代表文件名代表下载链接 导出格式为 map代表文件名代表下载链接
--gitlab-import-assets-file-name value Gitlab 导入资源文件名称。
主要用于发布到未启用 GitLab 软件包库时,发布中产物下载地址。
导入格式为 map代表文件名代表下载链接
--github-repository value Github 仓库。 --github-repository value Github 仓库。
https://github.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为xuxiaowei-com-cn/cicd-release [%GITHUB_REPOSITORY%] https://github.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为xuxiaowei-com-cn/cicd-release [%GITHUB_REPOSITORY%]
--github-username value Github 用户名 [%GITHUB_ACTOR%] --github-username value Github 用户名 [%GITHUB_ACTOR%]

View File

@ -6,6 +6,7 @@ import (
"log" "log"
"math/big" "math/big"
"net/url" "net/url"
"os"
"os/exec" "os/exec"
"strings" "strings"
) )
@ -71,7 +72,10 @@ func GitPushTag(instance string, repository string, username, token, tag string)
log.Printf("Git 推送远端 标签 %s 开始\n", tag) log.Printf("Git 推送远端 标签 %s 开始\n", tag)
cmdPush := exec.Command("git", "push", origin, tag) cmdPush := exec.Command("git", "push", origin, tag)
_, err = cmdPush.Output() cmdPush.Stdout = os.Stdout
cmdPush.Stderr = os.Stderr
err = cmdPush.Run()
if err != nil { if err != nil {
log.Printf("Git 推送远端 %s 标签 %s 异常:\n%s", origin, tag, err) log.Printf("Git 推送远端 %s 标签 %s 异常:\n%s", origin, tag, err)
return err return err

View File

@ -48,6 +48,7 @@ func Gitlab(prerelease bool, context *cli.Context) error {
var gitlabUsername = context.String(constant.GitlabUsername) var gitlabUsername = context.String(constant.GitlabUsername)
var gitlabToken = context.String(constant.GitlabToken) var gitlabToken = context.String(constant.GitlabToken)
var gitlabExportAssetsFileName = context.String(constant.GitlabExportAssetsFileName) var gitlabExportAssetsFileName = context.String(constant.GitlabExportAssetsFileName)
var gitlabImportAssetsFileName = context.String(constant.GitlabImportAssetsFileName)
log.Printf("是否是预发布版本:%v", prerelease) log.Printf("是否是预发布版本:%v", prerelease)
log.Printf("发布到 GitLab实例%s路径%s", gitlabInstance, gitlabRepository) log.Printf("发布到 GitLab实例%s路径%s", gitlabInstance, gitlabRepository)
@ -95,7 +96,7 @@ func Gitlab(prerelease bool, context *cli.Context) error {
// 发布 // 发布
err = GitlabReleases(releaseName, releaseBody, tag, milestones, err = GitlabReleases(releaseName, releaseBody, tag, milestones,
baseUrl, gitlabApi, gitlabRepositoryEscape, gitlabToken, genericPackages) baseUrl, gitlabApi, gitlabRepositoryEscape, gitlabToken, genericPackages, gitlabImportAssetsFileName)
if err != nil { if err != nil {
return err return err
} }
@ -219,7 +220,7 @@ func GitlabGetReleases(getReleasesUrl string, gitlabToken string) error {
// 发布 // 发布
func GitlabReleases(releaseName string, releaseBody string, tag string, milestones []string, func GitlabReleases(releaseName string, releaseBody string, tag string, milestones []string,
baseUrl *url.URL, gitlabApi string, gitlabRepositoryEscape string, gitlabToken string, baseUrl *url.URL, gitlabApi string, gitlabRepositoryEscape string, gitlabToken string,
genericPackages map[string]interface{}) error { genericPackages map[string]interface{}, gitlabImportAssetsFileName string) error {
data := Data{ data := Data{
Name: releaseName, Name: releaseName,
@ -238,6 +239,31 @@ func GitlabReleases(releaseName string, releaseBody string, tag string, mileston
assets.Links = append(assets.Links, link) assets.Links = append(assets.Links, link)
} }
} }
readResult := make(map[string]interface{})
if gitlabImportAssetsFileName != "" {
jsonData, err := os.ReadFile(gitlabImportAssetsFileName)
if err != nil {
log.Printf("ReadFile %s Error:\n%s", gitlabImportAssetsFileName, err)
return err
}
err = json.Unmarshal(jsonData, &readResult)
if err != nil {
log.Printf("Unmarshal %s Error:\n%s", gitlabImportAssetsFileName, err)
return err
}
}
for key, value := range readResult {
link := Link{
Name: key,
Url: value.(string),
}
assets.Links = append(assets.Links, link)
}
data.Assets = assets data.Assets = assets
jsonData, err := json.Marshal(data) jsonData, err := json.Marshal(data)

View File

@ -62,13 +62,13 @@ func Gitlink(prerelease bool, context *cli.Context) error {
} }
// 上传产物 // 上传产物
attachments, err := GitlinkAttachments(artifacts, gitlinkExportAssetsFileName, gitlinkAttachmentsPrefix, gitlinkCookie, gitlinkRepository) attachmentIds, _, err := GitlinkAttachments(artifacts, gitlinkExportAssetsFileName, gitlinkCookie)
if err != nil { if err != nil {
return err return err
} }
// 发布 // 发布
err = GitlinkReleases(prerelease, releaseName, releaseBody, tag, gitlinkRepository, gitlinkCookie, attachments, draft) err = GitlinkReleases(prerelease, releaseName, releaseBody, tag, gitlinkRepository, gitlinkCookie, attachmentIds, draft)
if err != nil { if err != nil {
return err return err
} }
@ -92,47 +92,45 @@ func GitlinkGetTag(gitlinkCookie string, tag string) error {
// GitlinkAttachments // GitlinkAttachments
// 上传产物 // 上传产物
func GitlinkAttachments(artifacts []string, gitlinkExportAssetsFileName string, gitlinkAttachmentsPrefix string, gitlinkCookie string, gitlinkRepository string) ([]int64, error) { func GitlinkAttachments(artifacts []string, gitlinkExportAssetsFileName string, gitlinkCookie string) ([]string, map[string]interface{}, error) {
gitClient, err := gitlink.NewClient("") gitClient, err := gitlink.NewClient("")
if err != nil { if err != nil {
return nil, err return nil, nil, err
} }
gitClient.Cookie = gitlinkCookie gitClient.Cookie = gitlinkCookie
var attachmentsIds []int64 var attachmentIds []string
result := make(map[string]interface{}) var attachments = make(map[string]interface{})
gitlinkAttachmentsPrefixUrl := strings.TrimRight(gitlinkAttachmentsPrefix, "/")
for _, artifact := range artifacts { for _, artifact := range artifacts {
attachmentsData, _, err := gitClient.Attachments.PostAttachments(artifact, "") attachmentsData, _, err := gitClient.Attachments.PostAttachments(artifact, "")
if err != nil { if err != nil {
return nil, err return nil, nil, err
} }
if attachmentsData.Status == 0 { if attachmentsData.Status == nil || *attachmentsData.Status == 0 {
attachmentsIds = append(attachmentsIds, attachmentsData.Id) attachmentIds = append(attachmentIds, attachmentsData.Id)
fileName := filepath.Base(artifact) fileName := filepath.Base(artifact)
result[fileName] = fmt.Sprintf("%s/%d", gitlinkAttachmentsPrefixUrl, attachmentsData.Id) attachments[fileName] = attachmentsData.Url
} else { } else {
return nil, errors.New(attachmentsData.Message) return nil, nil, errors.New(attachmentsData.Message)
} }
} }
if gitlinkExportAssetsFileName != "" { if gitlinkExportAssetsFileName != "" {
jsonData, err := json.Marshal(result) jsonData, err := json.Marshal(attachments)
if err != nil { if err != nil {
log.Println("Error marshal JSON:", err) log.Println("Error marshal JSON:", err)
return nil, err return nil, nil, err
} }
file, err := os.Create(gitlinkExportAssetsFileName) file, err := os.Create(gitlinkExportAssetsFileName)
if err != nil { if err != nil {
log.Printf("Create %s Error:\n%s", gitlinkExportAssetsFileName, err) log.Printf("Create %s Error:\n%s", gitlinkExportAssetsFileName, err)
return nil, err return nil, nil, err
} }
defer file.Close() defer file.Close()
@ -140,16 +138,16 @@ func GitlinkAttachments(artifacts []string, gitlinkExportAssetsFileName string,
_, err = file.Write(jsonData) _, err = file.Write(jsonData)
if err != nil { if err != nil {
log.Printf("Write %s Error:\n%s", gitlinkExportAssetsFileName, err) log.Printf("Write %s Error:\n%s", gitlinkExportAssetsFileName, err)
return nil, err return nil, nil, err
} }
} }
return attachmentsIds, nil return attachmentIds, attachments, nil
} }
// GitlinkReleases // GitlinkReleases
// 发布 // 发布
func GitlinkReleases(prerelease bool, releaseName string, releaseBody string, tag string, gitlinkRepository string, gitlinkCookie string, attachments []int64, draft bool) error { func GitlinkReleases(prerelease bool, releaseName string, releaseBody string, tag string, gitlinkRepository string, gitlinkCookie string, attachmentIds []string, draft bool) error {
gitClient, err := gitlink.NewClient("") gitClient, err := gitlink.NewClient("")
if err != nil { if err != nil {
@ -176,7 +174,7 @@ func GitlinkReleases(prerelease bool, releaseName string, releaseBody string, ta
} }
requestBody := &gitlink.PostReleasesRequestBody{ requestBody := &gitlink.PostReleasesRequestBody{
AttachmentIds: attachments, AttachmentIds: attachmentIds,
Body: releaseBody, Body: releaseBody,
Name: releaseName, Name: releaseName,
TagName: tag, TagName: tag,

View File

@ -23,6 +23,7 @@ const (
GitlabApi = "gitlab-api" // Gitlab API GitlabApi = "gitlab-api" // Gitlab API
GitlabRepository = "gitlab-repository" // Gitee 仓库https://gitlab.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为xuxiaowei-com-cn/cicd-release GitlabRepository = "gitlab-repository" // Gitee 仓库https://gitlab.com/xuxiaowei-com-cn/cicd-release.git 仓库应该为xuxiaowei-com-cn/cicd-release
GitlabExportAssetsFileName = "gitlab-export-assets-file-name" // Gitlab 导出资源文件名称 GitlabExportAssetsFileName = "gitlab-export-assets-file-name" // Gitlab 导出资源文件名称
GitlabImportAssetsFileName = "gitlab-import-assets-file-name" // Gitlab 导入资源文件名称
GitlinkUsername = "gitlink-username" // gitlink 用户名 GitlinkUsername = "gitlink-username" // gitlink 用户名
GitlinkToken = "gitlink-token" // gitlink Token GitlinkToken = "gitlink-token" // gitlink Token
GitlinkCookie = "gitlink-cookie" // gitlink Cookie GitlinkCookie = "gitlink-cookie" // gitlink Cookie

View File

@ -169,6 +169,13 @@ func GitlabExportAssetsNameFlag() cli.Flag {
} }
} }
func GitlabImportAssetsFileNameFlag() cli.Flag {
return &cli.StringFlag{
Name: constant.GitlabImportAssetsFileName,
Usage: "Gitlab 导入资源文件名称。\n\t主要用于发布到未启用 GitLab 软件包库时,发布中产物下载地址。\n\t导入格式为 map代表文件名代表下载链接",
}
}
func GitlinkRepositoryFlag(required bool) cli.Flag { func GitlinkRepositoryFlag(required bool) cli.Flag {
return &cli.StringFlag{ return &cli.StringFlag{
Name: constant.GitlinkRepository, Name: constant.GitlinkRepository,
@ -247,6 +254,7 @@ func GitlabFlag() []cli.Flag {
GitlabUsernameFlag(true), GitlabUsernameFlag(true),
GitlabTokenFlag(true), GitlabTokenFlag(true),
GitlabExportAssetsNameFlag(), GitlabExportAssetsNameFlag(),
GitlabImportAssetsFileNameFlag(),
} }
} }
@ -304,6 +312,7 @@ func CommonFlag() []cli.Flag {
GitlabUsernameFlag(false), GitlabUsernameFlag(false),
GitlabTokenFlag(false), GitlabTokenFlag(false),
GitlabExportAssetsNameFlag(), GitlabExportAssetsNameFlag(),
GitlabImportAssetsFileNameFlag(),
GithubRepositoryFlag(false), GithubRepositoryFlag(false),
GithubUsernameFlag(false), GithubUsernameFlag(false),

2
go.mod
View File

@ -5,7 +5,7 @@ go 1.21
require ( require (
github.com/urfave/cli/v2 v2.26.0 github.com/urfave/cli/v2 v2.26.0
github.com/xuxiaowei-com-cn/git-go v0.0.0-20231127015559-635f5e3143dc github.com/xuxiaowei-com-cn/git-go v0.0.0-20231127015559-635f5e3143dc
github.com/xuxiaowei-com-cn/go-gitlink/v2 v2.1.5 github.com/xuxiaowei-com-cn/go-gitlink/v2 v2.1.7
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
) )

8
go.sum
View File

@ -1,5 +1,6 @@
github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM= github.com/cpuguy83/go-md2man/v2 v2.0.3 h1:qMCsGGgs+MAzDFyp9LpAe1Lqy/fY/qCovCm0qnXZOBM=
github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@ -11,18 +12,21 @@ github.com/hashicorp/go-hclog v0.9.2 h1:CG6TE5H9/JXsFWJCfoIVpKFIkFe6ysEuHirp4DxC
github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ= github.com/hashicorp/go-hclog v0.9.2/go.mod h1:5CU+agLiy3J7N7QjHK5d05KxGsuXiQLrjA0H7acj2lQ=
github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M= github.com/hashicorp/go-retryablehttp v0.7.5 h1:bJj+Pj19UZMIweq/iie+1u5YCdGrnxCT9yvm0e+Nd5M=
github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8= github.com/hashicorp/go-retryablehttp v0.7.5/go.mod h1:Jy/gPYAdjqffZ/yFGCFV2doI5wjtH1ewM9u8iYVjtX8=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/urfave/cli/v2 v2.26.0 h1:3f3AMg3HpThFNT4I++TKOejZO8yU55t3JnnSr4S4QEI= github.com/urfave/cli/v2 v2.26.0 h1:3f3AMg3HpThFNT4I++TKOejZO8yU55t3JnnSr4S4QEI=
github.com/urfave/cli/v2 v2.26.0/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ= github.com/urfave/cli/v2 v2.26.0/go.mod h1:8qnjx1vcq5s2/wpsqoZFndg2CE5tNFyrTvS6SinrnYQ=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
github.com/xuxiaowei-com-cn/git-go v0.0.0-20231127015559-635f5e3143dc h1:2D2D/n8SYY91dl3NAX4NtGhxdgx8Tgl5Bd6y8KLYzDo= github.com/xuxiaowei-com-cn/git-go v0.0.0-20231127015559-635f5e3143dc h1:2D2D/n8SYY91dl3NAX4NtGhxdgx8Tgl5Bd6y8KLYzDo=
github.com/xuxiaowei-com-cn/git-go v0.0.0-20231127015559-635f5e3143dc/go.mod h1:1EL7YDsw6C+ctxYYqfBHz2Q0CTK6qjZmq//DYFp4kmo= github.com/xuxiaowei-com-cn/git-go v0.0.0-20231127015559-635f5e3143dc/go.mod h1:1EL7YDsw6C+ctxYYqfBHz2Q0CTK6qjZmq//DYFp4kmo=
github.com/xuxiaowei-com-cn/go-gitlink/v2 v2.1.5 h1:8LD4+YdFXEmFiiiNGLN8XOZhsxBRv6sScSQ7optnCvY= github.com/xuxiaowei-com-cn/go-gitlink/v2 v2.1.7 h1:LiEmRdaNuwD+ejiE7J3Dxu0xYGOfsxJl8GR3c9WqDq4=
github.com/xuxiaowei-com-cn/go-gitlink/v2 v2.1.5/go.mod h1:u7XGA9i8nHbmzN+bdFcMN9z7Yxe3/qOyS8I9NblK+ZU= github.com/xuxiaowei-com-cn/go-gitlink/v2 v2.1.7/go.mod h1:CE9iNPXiXL01uzbKfNL2y0lSxF3xa20rghiBRbLXNGA=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=

View File

@ -191,3 +191,43 @@ sync-github:
retry: 2 retry: 2
# 允许失败 # 允许失败
allow_failure: true allow_failure: true
sync-framagit:
stage: sync
variables:
GIT_DEPTH: 0 # 取消浅层克隆
image: bitnami/git:2.40.1
script:
- git config --global user.email $GITLAB_USER_EMAIL
- git config --global user.name $GITLAB_USER_NAME
- git config --global user.email
- git config --global user.name
- git remote add framagit https://xuxiaowei:$FRAMAGIT_PRIVATE_TOKEN@framagit.org/$CI_PROJECT_PATH.git
- echo 当前分支:$CI_COMMIT_BRANCH
- echo 当前标签:$CI_COMMIT_TAG
- if [ "$CI_COMMIT_BRANCH" ]; then
git checkout -b $CI_COMMIT_BRANCH;
git pull --progress -v --no-rebase framagit $CI_COMMIT_BRANCH || echo 远端不存在$CI_COMMIT_BRANCH分支;
git push -u framagit $CI_COMMIT_BRANCH;
fi
- if [ "$CI_COMMIT_TAG" ]; then
git push -u framagit $CI_COMMIT_TAG;
fi
rules:
# GitCode 实例不执行
- if: $CI_SERVER_HOST == 'gitcode.net'
# 不执行
when: never
# framagit.org 不同步到自己
- if: $CI_SERVER_HOST == 'framagit.org'
# 不执行
when: never
# 匹配以 dependabot 开头的分支
- if: $CI_SERVER_HOST == 'gitlab.helm.xuxiaowei.cn' && $CI_COMMIT_BRANCH =~ /^dependabot*/
# 不执行
when: never
# 非 PR 时触发
- if: $CI_SERVER_HOST == 'gitlab.helm.xuxiaowei.cn' && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == null
retry: 2
# 允许失败
allow_failure: true