From 04320bd45adcc37432fd46089ee276869df166f7 Mon Sep 17 00:00:00 2001 From: Unlock Music Dev Date: Sun, 27 Nov 2022 07:45:44 +0800 Subject: [PATCH] ci: add release pipeline --- .drone.jsonnet | 63 ++++++++++++++++++++------- .drone.yml | 114 +++++++++++++++++++++++++++++++++++++++++++++---- 2 files changed, 152 insertions(+), 25 deletions(-) diff --git a/.drone.jsonnet b/.drone.jsonnet index ab6711e..9d71e93 100644 --- a/.drone.jsonnet +++ b/.drone.jsonnet @@ -2,22 +2,22 @@ // drone jsonnet --format --stream -// local CreateRelease() = { -// name: 'create release', -// image: 'plugins/gitea-release', -// settings: { -// api_key: { from_secret: 'GITEA_API_KEY' }, -// base_url: 'https://git.unlock-music.dev', -// files: 'dist/*', -// checksum: 'sha256', -// draft: true, -// title: '${DRONE_TAG}', -// }, -// }; +local CreateRelease() = { + name: 'create release', + image: 'plugins/gitea-release', + settings: { + api_key: { from_secret: 'GITEA_API_KEY' }, + base_url: 'https://git.unlock-music.dev', + files: 'dist/*', + checksum: 'sha256', + draft: true, + title: '${DRONE_TAG}', + }, +}; local StepGoBuild(GOOS, GOARCH) = { - local filename = 'um-%s-%s.tar.gz' % [GOOS, GOARCH], + local filepath = 'dist/um-%s-%s.tar.gz' % [GOOS, GOARCH], name: 'go build', image: 'golang:1.19', @@ -28,12 +28,13 @@ local StepGoBuild(GOOS, GOARCH) = { commands: [ 'DIST_DIR=$(mktemp -d)', 'go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags --always)" -o $DIST_DIR ./cmd/um', - 'tar cz -f %s -C $DIST_DIR .' % filename, + 'tar cz -f %s -C $DIST_DIR .' % filepath, ], }; local StepUploadArtifact(GOOS, GOARCH) = { local filename = 'um-%s-%s.tar.gz' % [GOOS, GOARCH], + local filepath = 'dist/%s' % filename, local pkgname = '${DRONE_REPO_NAME}-build', name: 'upload artifact', @@ -44,9 +45,9 @@ local StepUploadArtifact(GOOS, GOARCH) = { }, commands: [ 'curl --fail --include --user "um-release-bot:$GITEA_API_KEY" ' + - '--upload-file "%s" ' % filename + + '--upload-file "%s" ' % filepath + '"$DRONE_GITEA_SERVER/api/packages/${DRONE_REPO_NAMESPACE}/generic/%s/${DRONE_BUILD_NUMBER}/%s"' % [pkgname, filename], - 'sha256sum %s' % filename, + 'sha256sum %s' % filepath, 'echo $DRONE_GITEA_SERVER/${DRONE_REPO_NAMESPACE}/-/packages/generic/%s/${DRONE_BUILD_NUMBER}' % pkgname, ], }; @@ -80,8 +81,38 @@ local PipelineBuild(GOOS, GOARCH, RUN_TEST) = { }, }; +local PipelineRelease() = { + name: 'release', + kind: 'pipeline', + type: 'docker', + steps: [ + { + name: 'fetch tags', + image: 'alpine/git', + commands: ['git fetch --tags'], + }, + { + name: 'go test', + image: 'golang:1.19', + commands: ['go test -v ./...'], + }, + StepGoBuild('linux', 'amd64'), + StepGoBuild('linux', 'arm64'), + StepGoBuild('linux', '386'), + StepGoBuild('windows', 'amd64'), + StepGoBuild('windows', '386'), + StepGoBuild('darwin', 'amd64'), + StepGoBuild('darwin', 'arm64'), + CreateRelease(), + ], + trigger: { + event: ['tag'], + }, +}; + [ PipelineBuild('linux', 'amd64', true), PipelineBuild('windows', 'amd64', false), PipelineBuild('darwin', 'amd64', false), + PipelineRelease(), ] diff --git a/.drone.yml b/.drone.yml index dd6f9cf..da2d84e 100644 --- a/.drone.yml +++ b/.drone.yml @@ -14,16 +14,16 @@ steps: - DIST_DIR=$(mktemp -d) - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags --always)" -o $DIST_DIR ./cmd/um - - tar cz -f um-linux-amd64.tar.gz -C $DIST_DIR . + - tar cz -f dist/um-linux-amd64.tar.gz -C $DIST_DIR . environment: GOARCH: amd64 GOOS: linux image: golang:1.19 name: go build - commands: - - curl --fail --include --user "um-release-bot:$GITEA_API_KEY" --upload-file "um-linux-amd64.tar.gz" + - curl --fail --include --user "um-release-bot:$GITEA_API_KEY" --upload-file "dist/um-linux-amd64.tar.gz" "$DRONE_GITEA_SERVER/api/packages/${DRONE_REPO_NAMESPACE}/generic/${DRONE_REPO_NAME}-build/${DRONE_BUILD_NUMBER}/um-linux-amd64.tar.gz" - - sha256sum um-linux-amd64.tar.gz + - sha256sum dist/um-linux-amd64.tar.gz - echo $DRONE_GITEA_SERVER/${DRONE_REPO_NAMESPACE}/-/packages/generic/${DRONE_REPO_NAME}-build/${DRONE_BUILD_NUMBER} environment: DRONE_GITEA_SERVER: https://git.unlock-music.dev @@ -48,16 +48,16 @@ steps: - DIST_DIR=$(mktemp -d) - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags --always)" -o $DIST_DIR ./cmd/um - - tar cz -f um-windows-amd64.tar.gz -C $DIST_DIR . + - tar cz -f dist/um-windows-amd64.tar.gz -C $DIST_DIR . environment: GOARCH: amd64 GOOS: windows image: golang:1.19 name: go build - commands: - - curl --fail --include --user "um-release-bot:$GITEA_API_KEY" --upload-file "um-windows-amd64.tar.gz" + - curl --fail --include --user "um-release-bot:$GITEA_API_KEY" --upload-file "dist/um-windows-amd64.tar.gz" "$DRONE_GITEA_SERVER/api/packages/${DRONE_REPO_NAMESPACE}/generic/${DRONE_REPO_NAME}-build/${DRONE_BUILD_NUMBER}/um-windows-amd64.tar.gz" - - sha256sum um-windows-amd64.tar.gz + - sha256sum dist/um-windows-amd64.tar.gz - echo $DRONE_GITEA_SERVER/${DRONE_REPO_NAMESPACE}/-/packages/generic/${DRONE_REPO_NAME}-build/${DRONE_BUILD_NUMBER} environment: DRONE_GITEA_SERVER: https://git.unlock-music.dev @@ -82,16 +82,16 @@ steps: - DIST_DIR=$(mktemp -d) - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags --always)" -o $DIST_DIR ./cmd/um - - tar cz -f um-darwin-amd64.tar.gz -C $DIST_DIR . + - tar cz -f dist/um-darwin-amd64.tar.gz -C $DIST_DIR . environment: GOARCH: amd64 GOOS: darwin image: golang:1.19 name: go build - commands: - - curl --fail --include --user "um-release-bot:$GITEA_API_KEY" --upload-file "um-darwin-amd64.tar.gz" + - curl --fail --include --user "um-release-bot:$GITEA_API_KEY" --upload-file "dist/um-darwin-amd64.tar.gz" "$DRONE_GITEA_SERVER/api/packages/${DRONE_REPO_NAMESPACE}/generic/${DRONE_REPO_NAME}-build/${DRONE_BUILD_NUMBER}/um-darwin-amd64.tar.gz" - - sha256sum um-darwin-amd64.tar.gz + - sha256sum dist/um-darwin-amd64.tar.gz - echo $DRONE_GITEA_SERVER/${DRONE_REPO_NAMESPACE}/-/packages/generic/${DRONE_REPO_NAME}-build/${DRONE_BUILD_NUMBER} environment: DRONE_GITEA_SERVER: https://git.unlock-music.dev @@ -104,3 +104,99 @@ trigger: - push - pull_request type: docker +--- +kind: pipeline +name: release +steps: +- commands: + - git fetch --tags + image: alpine/git + name: fetch tags +- commands: + - go test -v ./... + image: golang:1.19 + name: go test +- commands: + - DIST_DIR=$(mktemp -d) + - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags + --always)" -o $DIST_DIR ./cmd/um + - tar cz -f dist/um-linux-amd64.tar.gz -C $DIST_DIR . + environment: + GOARCH: amd64 + GOOS: linux + image: golang:1.19 + name: go build +- commands: + - DIST_DIR=$(mktemp -d) + - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags + --always)" -o $DIST_DIR ./cmd/um + - tar cz -f dist/um-linux-arm64.tar.gz -C $DIST_DIR . + environment: + GOARCH: arm64 + GOOS: linux + image: golang:1.19 + name: go build +- commands: + - DIST_DIR=$(mktemp -d) + - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags + --always)" -o $DIST_DIR ./cmd/um + - tar cz -f dist/um-linux-386.tar.gz -C $DIST_DIR . + environment: + GOARCH: "386" + GOOS: linux + image: golang:1.19 + name: go build +- commands: + - DIST_DIR=$(mktemp -d) + - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags + --always)" -o $DIST_DIR ./cmd/um + - tar cz -f dist/um-windows-amd64.tar.gz -C $DIST_DIR . + environment: + GOARCH: amd64 + GOOS: windows + image: golang:1.19 + name: go build +- commands: + - DIST_DIR=$(mktemp -d) + - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags + --always)" -o $DIST_DIR ./cmd/um + - tar cz -f dist/um-windows-386.tar.gz -C $DIST_DIR . + environment: + GOARCH: "386" + GOOS: windows + image: golang:1.19 + name: go build +- commands: + - DIST_DIR=$(mktemp -d) + - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags + --always)" -o $DIST_DIR ./cmd/um + - tar cz -f dist/um-darwin-amd64.tar.gz -C $DIST_DIR . + environment: + GOARCH: amd64 + GOOS: darwin + image: golang:1.19 + name: go build +- commands: + - DIST_DIR=$(mktemp -d) + - go build -v -trimpath -ldflags="-w -s -X main.AppVersion=$(git describe --tags + --always)" -o $DIST_DIR ./cmd/um + - tar cz -f dist/um-darwin-arm64.tar.gz -C $DIST_DIR . + environment: + GOARCH: arm64 + GOOS: darwin + image: golang:1.19 + name: go build +- image: plugins/gitea-release + name: create release + settings: + api_key: + from_secret: GITEA_API_KEY + base_url: https://git.unlock-music.dev + checksum: sha256 + draft: true + files: dist/* + title: ${DRONE_TAG} +trigger: + event: + - tag +type: docker