mirror of
https://github.com/gravitational/teleport.git
synced 2026-09-24 16:17:11 +08:00
151 lines
5.2 KiB
Go
151 lines
5.2 KiB
Go
// Copyright 2021 Gravitational, Inc
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"path/filepath"
|
|
"strings"
|
|
)
|
|
|
|
func darwinPkgPipeline(name, makeTarget string, pkgGlobs []string) pipeline {
|
|
b := buildType{
|
|
arch: "amd64",
|
|
os: "darwin",
|
|
}
|
|
p := newDarwinPipeline(name)
|
|
p.Trigger = triggerTag
|
|
p.DependsOn = []string{"build-darwin-amd64"}
|
|
p.Steps = []step{
|
|
setUpExecStorageStep(p.Workspace.Path),
|
|
{
|
|
Name: "Check out code",
|
|
Environment: map[string]value{
|
|
"WORKSPACE_DIR": {raw: p.Workspace.Path},
|
|
"GITHUB_PRIVATE_KEY": {fromSecret: "GITHUB_PRIVATE_KEY"},
|
|
},
|
|
Commands: darwinTagCheckoutCommands(),
|
|
},
|
|
{
|
|
Name: "Download built tarball artifacts from S3",
|
|
Environment: map[string]value{
|
|
"AWS_REGION": {raw: "us-west-2"},
|
|
"AWS_S3_BUCKET": {fromSecret: "AWS_S3_BUCKET"},
|
|
"AWS_ACCESS_KEY_ID": {fromSecret: "AWS_ACCESS_KEY_ID"},
|
|
"AWS_SECRET_ACCESS_KEY": {fromSecret: "AWS_SECRET_ACCESS_KEY"},
|
|
"GITHUB_PRIVATE_KEY": {fromSecret: "GITHUB_PRIVATE_KEY"},
|
|
"WORKSPACE_DIR": {raw: p.Workspace.Path},
|
|
},
|
|
Commands: darwinTagDownloadArtifactCommands(),
|
|
},
|
|
{
|
|
Name: "Build Mac pkg release artifacts",
|
|
Environment: map[string]value{
|
|
"WORKSPACE_DIR": {raw: p.Workspace.Path},
|
|
"APPLE_USERNAME": {fromSecret: "APPLE_USERNAME"},
|
|
"APPLE_PASSWORD": {fromSecret: "APPLE_PASSWORD"},
|
|
"BUILDBOX_PASSWORD": {fromSecret: "BUILDBOX_PASSWORD"},
|
|
"OSS_TARBALL_PATH": {raw: filepath.Join(p.Workspace.Path, "go/artifacts")},
|
|
"ENT_TARBALL_PATH": {raw: filepath.Join(p.Workspace.Path, "go/artifacts")},
|
|
"OS": {raw: b.os},
|
|
"ARCH": {raw: b.arch},
|
|
},
|
|
Commands: darwinTagPackageCommands(makeTarget),
|
|
},
|
|
{
|
|
Name: "Copy Mac pkg artifacts",
|
|
Environment: map[string]value{
|
|
"WORKSPACE_DIR": {raw: p.Workspace.Path},
|
|
},
|
|
Commands: darwinTagCopyPkgArtifactCommands(pkgGlobs),
|
|
},
|
|
{
|
|
Name: "Upload to S3",
|
|
Environment: map[string]value{
|
|
"AWS_REGION": {raw: "us-west-2"},
|
|
"AWS_S3_BUCKET": {fromSecret: "AWS_S3_BUCKET"},
|
|
"AWS_ACCESS_KEY_ID": {fromSecret: "AWS_ACCESS_KEY_ID"},
|
|
"AWS_SECRET_ACCESS_KEY": {fromSecret: "AWS_SECRET_ACCESS_KEY"},
|
|
"WORKSPACE_DIR": {raw: p.Workspace.Path},
|
|
},
|
|
Commands: []string{
|
|
`set -u`,
|
|
`cd $WORKSPACE_DIR/go/artifacts`,
|
|
`aws s3 sync . s3://$AWS_S3_BUCKET/teleport/tag/${DRONE_TAG##v}`,
|
|
},
|
|
},
|
|
{
|
|
Name: "Register artifacts",
|
|
Commands: tagCreateReleaseAssetCommands(b),
|
|
Failure: "ignore",
|
|
Environment: map[string]value{
|
|
"WORKSPACE_DIR": {raw: p.Workspace.Path},
|
|
"RELEASES_CERT": value{fromSecret: "RELEASES_CERT_STAGING"},
|
|
"RELEASES_KEY": value{fromSecret: "RELEASES_KEY_STAGING"},
|
|
},
|
|
},
|
|
cleanUpExecStorageStep(p.Workspace.Path),
|
|
}
|
|
|
|
return p
|
|
}
|
|
|
|
func darwinTeleportPkgPipeline() pipeline {
|
|
return darwinPkgPipeline("build-darwin-amd64-pkg", "pkg", []string{"build/teleport*.pkg", "e/build/teleport-ent*.pkg"})
|
|
}
|
|
|
|
func darwinTshPkgPipeline() pipeline {
|
|
return darwinPkgPipeline("build-darwin-amd64-pkg-tsh", "pkg-tsh", []string{"build/tsh*.pkg"})
|
|
}
|
|
|
|
func darwinTagDownloadArtifactCommands() []string {
|
|
return []string{
|
|
`set -u`,
|
|
`export VERSION=$(cat $WORKSPACE_DIR/go/.version.txt)`,
|
|
`export S3_PATH="tag/$${DRONE_TAG##v}/"`,
|
|
`aws s3 cp s3://$AWS_S3_BUCKET/teleport/$${S3_PATH}teleport-v$${VERSION}-darwin-amd64-bin.tar.gz $WORKSPACE_DIR/go/artifacts/`,
|
|
`aws s3 cp s3://$AWS_S3_BUCKET/teleport/$${S3_PATH}teleport-ent-v$${VERSION}-darwin-amd64-bin.tar.gz $WORKSPACE_DIR/go/artifacts/`,
|
|
}
|
|
}
|
|
|
|
func darwinTagPackageCommands(target string) []string {
|
|
return []string{
|
|
`set -u`,
|
|
`cd $WORKSPACE_DIR/go/src/github.com/gravitational/teleport`,
|
|
`export VERSION=$(cat $WORKSPACE_DIR/go/.version.txt)`,
|
|
// set HOME explicitly (as Drone overrides it normally)
|
|
`export HOME=/Users/build`,
|
|
// unlock login keychain
|
|
`security unlock-keychain -p $${BUILDBOX_PASSWORD} login.keychain`,
|
|
// show available certificates
|
|
`security find-identity -v`,
|
|
// build pkg, target is `pkg` for teleport, `pkg-tsh` for tsh
|
|
fmt.Sprintf(`make %s OS=$OS ARCH=$ARCH`, target),
|
|
}
|
|
}
|
|
|
|
func darwinTagCopyPkgArtifactCommands(pkgGlobs []string) []string {
|
|
return []string{
|
|
`set -u`,
|
|
`cd $WORKSPACE_DIR/go/src/github.com/gravitational/teleport`,
|
|
// delete temporary tarball artifacts so we don't re-upload them in the next stage
|
|
`rm -rf $WORKSPACE_DIR/go/artifacts/*.tar.gz`,
|
|
// copy release archives to artifact directory
|
|
fmt.Sprintf(`cp %s $WORKSPACE_DIR/go/artifacts/`, strings.Join(pkgGlobs, " ")),
|
|
// generate checksums (for mac)
|
|
`cd $WORKSPACE_DIR/go/artifacts && for FILE in *.pkg; do shasum -a 256 $FILE > $FILE.sha256; done && ls -l`,
|
|
}
|
|
}
|