From 88eae036e5073bf6c64cfdd791a12d8dcf9b75f5 Mon Sep 17 00:00:00 2001 From: ppaul Date: Wed, 13 Apr 2022 15:35:42 -0400 Subject: [PATCH 1/7] feat: support arm64 --- .goreleaser.yml | 1 + screwdriver.yaml | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.goreleaser.yml b/.goreleaser.yml index c0be8dd3..9a78ea88 100644 --- a/.goreleaser.yml +++ b/.goreleaser.yml @@ -6,6 +6,7 @@ builds: - darwin goarch: - amd64 + - arm64 # Include the default settings from https://goreleaser.com/#builds # Also include static compilation # ldflags: -d -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{.Date}} -extldflags "-static" diff --git a/screwdriver.yaml b/screwdriver.yaml index 76c576ff..450f2d54 100644 --- a/screwdriver.yaml +++ b/screwdriver.yaml @@ -4,7 +4,7 @@ shared: GO111MODULE: on jobs: main: - image: golang:1.14 + image: golang:1.17 environment: SD_SONAR_OPTS: "-Dsonar.sources=./ -Dsonar.exclusions=**/*_test.go,**/vendor/** -Dsonar.tests=./ -Dsonar.test.inclusions=**/*_test.go -Dsonar.test.exclusions=**/vendor/** -Dsonar.go.coverage.reportPaths=${SD_ARTIFACTS_DIR}/coverage.out -Dsonar.go.tests.reportPaths=${SD_ARTIFACTS_DIR}/report.json" requires: [~commit, ~pr] @@ -20,7 +20,7 @@ jobs: # Test cross-compiling as well - test-release: "curl -sL https://git.io/goreleaser | bash -s -- --snapshot" publish: - image: golang:1.14 + image: golang:1.17 requires: main steps: - setup-ci: git clone https://github.com/screwdriver-cd/toolbox.git ci From 889186e9409160b775b55a91f20a70dc219e6883 Mon Sep 17 00:00:00 2001 From: ppaul Date: Mon, 18 Apr 2022 11:14:04 -0400 Subject: [PATCH 2/7] feat: Add arm support for launcher image --- Dockerfile | 46 ++++++++++++++++++++++++---------------------- screwdriver.yaml | 19 ++++++++++++++++++- 2 files changed, 42 insertions(+), 23 deletions(-) diff --git a/Dockerfile b/Dockerfile index a7694dec..d07c90bb 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,8 @@ FROM alpine:3.12 LABEL MAINTAINER="Screwdriver Team " +ARG ARCH + WORKDIR /opt/sd RUN set -x \ # Alpine ships with musl instead of glibc (this fixes the symlink) @@ -11,58 +13,58 @@ RUN set -x \ && apk add --no-cache --virtual .build-dependencies wget gpgme unzip \ # Download Launcher && wget -q -O - https://github.com/screwdriver-cd/launcher/releases/latest \ - | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_linux_amd64' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/launcher_linux_amd64/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_linux_${ARCH}' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/launcher_linux_${ARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/launcher/releases/latest \ - | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_linux_amd64' \ + | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_linux_${ARCH}' \ | wget --base=http://github.com/ -i - -O launch \ && chmod +x launch \ # Download Log Service && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ - | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_linux_amd64' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/log-service_linux_amd64/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_linux_${ARCH}' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/log-service_linux_${ARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ - | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_linux_amd64' \ + | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_linux_${ARCH}' \ | wget --base=http://github.com/ -i - -O logservice \ && chmod +x logservice \ # Download Meta CLI && wget -q -O - https://github.com/screwdriver-cd/meta-cli/releases/latest \ - | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_linux_amd64' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/meta-cli_linux_amd64/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_linux_${ARCH}' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/meta-cli_linux_${ARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/meta-cli/releases/latest \ - | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_linux_amd64' \ + | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_linux_${ARCH}' \ | wget --base=http://github.com/ -i - -O meta \ && chmod +x meta \ # Download sd-step && wget -q -O - https://github.com/screwdriver-cd/sd-step/releases/latest \ - | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_linux_amd64' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-step_linux_amd64/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_linux_${ARCH}' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-step_linux_${ARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/sd-step/releases/latest \ - | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_linux_amd64' \ + | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_linux_${ARCH}' \ | wget --base=http://github.com/ -i - -O sd-step \ && chmod +x sd-step \ # Download sd-cmd && wget -q -O - https://github.com/screwdriver-cd/sd-cmd/releases/latest \ - | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_linux_amd64' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-cmd_linux_amd64/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_linux_${ARCH}' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-cmd_linux_${ARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/sd-cmd/releases/latest \ - | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_linux_amd64' \ + | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_linux_${ARCH}' \ | wget --base=http://github.com/ -i - -O sd-cmd \ && chmod +x sd-cmd \ # Download store-cli && wget -q -O - https://github.com/screwdriver-cd/store-cli/releases/latest \ - | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_linux_amd64' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/store-cli_linux_amd64/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_linux_${ARCH}' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/store-cli_linux_${ARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/store-cli/releases/latest \ - | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_linux_amd64' \ + | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_linux_${ARCH}' \ | wget --base=http://github.com/ -i - -O store-cli \ && chmod +x store-cli \ # Download gitversion && wget -q -O - https://github.com/screwdriver-cd/gitversion/releases/latest \ - | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_linux_amd64' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/gitversion_linux_amd64/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_linux_${ARCH}' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/gitversion_linux_${ARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/gitversion/releases/latest \ - | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_linux_amd64' \ + | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_linux_${ARCH}' \ | wget --base=http://github.com/ -i - -O gitversion \ && chmod +x gitversion \ # Download Tini Static @@ -89,7 +91,7 @@ RUN set -x \ && mv tini-static tini \ && chmod +x tini \ # Download dumb-init - && wget -O /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 \ + && wget -O /usr/local/bin/dumb-init 'https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_${ARCH}' \ && chmod +x /usr/local/bin/dumb-init \ && cp /usr/local/bin/dumb-init /opt/sd/dumb-init \ # Install Habitat diff --git a/screwdriver.yaml b/screwdriver.yaml index 450f2d54..7c42ce78 100644 --- a/screwdriver.yaml +++ b/screwdriver.yaml @@ -6,7 +6,7 @@ jobs: main: image: golang:1.17 environment: - SD_SONAR_OPTS: "-Dsonar.sources=./ -Dsonar.exclusions=**/*_test.go,**/vendor/** -Dsonar.tests=./ -Dsonar.test.inclusions=**/*_test.go -Dsonar.test.exclusions=**/vendor/** -Dsonar.go.coverage.reportPaths=${SD_ARTIFACTS_DIR}/coverage.out -Dsonar.go.tests.reportPaths=${SD_ARTIFACTS_DIR}/report.json" + SD_SONAR_OPTS: "-Dsonar.sources=./ -Dsonar.exclusions=**/*_test.go,**/vendor/** -Dsonar.tests=./ -Dsonar.test.inclusions=**/*_test.go -Dsonar.test.exclusions=**/vendor/** -Dsonar.go.coverage.reportPaths=${SD_ARTIFACTS_DIR}/coverage.out -Dsonar.go.tests.reportPaths=${SD_ARTIFACTS_DIR}/report.json" requires: [~commit, ~pr] steps: - gover: go version @@ -33,5 +33,22 @@ jobs: # Pushing releases to GitHub - GITHUB_TOKEN docker-publish: + environment: + DOCKER_MULTI_PLATFORM_BUILDS_ENABLED: 1 requires: publish template: sd/dind@latest + steps: + - build-push: | + docker login --username $DOCKER_REGISTRY_USER --password $DOCKER_REGISTRY_TOKEN + DOCKER_TAG=`cat VERSION` + if [[ $DOCKER_MULTI_PLATFORM_BUILDS_ENABLED -eq 1 ]]; then + for PLATFORM in ${DOCKER_TARGET_PLATFORMS//,/ } + do + ITEMS=(${PLATFORM//\// }) + ARCH=${ITEMS[1]} + echo $PLATFORM $ARCH + docker buildx build --push --progress plain --platform $PLATFORM --cache-from $DOCKER_REPO:latest --build-arg BUILDKIT_INLINE_CACHE=1 ARCH=$ARCH $DOCKER_BUILD_EXTRA_FLAGS -t $DOCKER_REPO:latest -f $DOCKERFILE_NAME $DOCKERFILE_PATH + sleep 10 + docker buildx build --push --progress plain --platform $PLATFORM --cache-from $DOCKER_REPO:latest --build-arg BUILDKIT_INLINE_CACHE=1 ARCH=$ARCH -t $DOCKER_REPO:$DOCKER_TAG -f $DOCKERFILE_NAME $DOCKERFILE_PATH + done + fi From 09e7a4548835af430020ada8fe4e7f31455c5061 Mon Sep 17 00:00:00 2001 From: ppaul Date: Mon, 18 Apr 2022 11:25:09 -0400 Subject: [PATCH 3/7] feat: use automatic platform args --- Dockerfile | 46 +++++++++++++++++++++++----------------------- screwdriver.yaml | 15 --------------- 2 files changed, 23 insertions(+), 38 deletions(-) diff --git a/Dockerfile b/Dockerfile index d07c90bb..2d5c52d9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM alpine:3.12 LABEL MAINTAINER="Screwdriver Team " -ARG ARCH +ARG TARGETOS TARGETARCH WORKDIR /opt/sd RUN set -x \ @@ -13,58 +13,58 @@ RUN set -x \ && apk add --no-cache --virtual .build-dependencies wget gpgme unzip \ # Download Launcher && wget -q -O - https://github.com/screwdriver-cd/launcher/releases/latest \ - | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_linux_${ARCH}' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/launcher_linux_${ARCH}/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_$TARGETOS_$TARGETARCH' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/launcher_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/launcher/releases/latest \ - | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_linux_${ARCH}' \ + | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_$TARGETOS_$TARGETARCH' \ | wget --base=http://github.com/ -i - -O launch \ && chmod +x launch \ # Download Log Service && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ - | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_linux_${ARCH}' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/log-service_linux_${ARCH}/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_$TARGETOS_$TARGETARCH' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/log-service_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ - | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_linux_${ARCH}' \ + | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_$TARGETOS_$TARGETARCH' \ | wget --base=http://github.com/ -i - -O logservice \ && chmod +x logservice \ # Download Meta CLI && wget -q -O - https://github.com/screwdriver-cd/meta-cli/releases/latest \ - | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_linux_${ARCH}' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/meta-cli_linux_${ARCH}/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_$TARGETOS_$TARGETARCH' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/meta-cli_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/meta-cli/releases/latest \ - | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_linux_${ARCH}' \ + | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_$TARGETOS_$TARGETARCH' \ | wget --base=http://github.com/ -i - -O meta \ && chmod +x meta \ # Download sd-step && wget -q -O - https://github.com/screwdriver-cd/sd-step/releases/latest \ - | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_linux_${ARCH}' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-step_linux_${ARCH}/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_$TARGETOS_$TARGETARCH' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-step_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/sd-step/releases/latest \ - | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_linux_${ARCH}' \ + | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_$TARGETOS_$TARGETARCH' \ | wget --base=http://github.com/ -i - -O sd-step \ && chmod +x sd-step \ # Download sd-cmd && wget -q -O - https://github.com/screwdriver-cd/sd-cmd/releases/latest \ - | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_linux_${ARCH}' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-cmd_linux_${ARCH}/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_$TARGETOS_$TARGETARCH' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-cmd_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/sd-cmd/releases/latest \ - | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_linux_${ARCH}' \ + | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_$TARGETOS_$TARGETARCH' \ | wget --base=http://github.com/ -i - -O sd-cmd \ && chmod +x sd-cmd \ # Download store-cli && wget -q -O - https://github.com/screwdriver-cd/store-cli/releases/latest \ - | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_linux_${ARCH}' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/store-cli_linux_${ARCH}/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_$TARGETOS_$TARGETARCH' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/store-cli_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/store-cli/releases/latest \ - | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_linux_${ARCH}' \ + | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_$TARGETOS_$TARGETARCH' \ | wget --base=http://github.com/ -i - -O store-cli \ && chmod +x store-cli \ # Download gitversion && wget -q -O - https://github.com/screwdriver-cd/gitversion/releases/latest \ - | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_linux_${ARCH}' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/gitversion_linux_${ARCH}/\1 \2/" >> tool-versions \ + | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_$TARGETOS_$TARGETARCH' \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/gitversion_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/gitversion/releases/latest \ - | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_linux_${ARCH}' \ + | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_$TARGETOS_$TARGETARCH' \ | wget --base=http://github.com/ -i - -O gitversion \ && chmod +x gitversion \ # Download Tini Static @@ -91,7 +91,7 @@ RUN set -x \ && mv tini-static tini \ && chmod +x tini \ # Download dumb-init - && wget -O /usr/local/bin/dumb-init 'https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_${ARCH}' \ + && wget -O /usr/local/bin/dumb-init 'https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_$TARGETARCH' \ && chmod +x /usr/local/bin/dumb-init \ && cp /usr/local/bin/dumb-init /opt/sd/dumb-init \ # Install Habitat diff --git a/screwdriver.yaml b/screwdriver.yaml index 7c42ce78..8a17bb0f 100644 --- a/screwdriver.yaml +++ b/screwdriver.yaml @@ -37,18 +37,3 @@ jobs: DOCKER_MULTI_PLATFORM_BUILDS_ENABLED: 1 requires: publish template: sd/dind@latest - steps: - - build-push: | - docker login --username $DOCKER_REGISTRY_USER --password $DOCKER_REGISTRY_TOKEN - DOCKER_TAG=`cat VERSION` - if [[ $DOCKER_MULTI_PLATFORM_BUILDS_ENABLED -eq 1 ]]; then - for PLATFORM in ${DOCKER_TARGET_PLATFORMS//,/ } - do - ITEMS=(${PLATFORM//\// }) - ARCH=${ITEMS[1]} - echo $PLATFORM $ARCH - docker buildx build --push --progress plain --platform $PLATFORM --cache-from $DOCKER_REPO:latest --build-arg BUILDKIT_INLINE_CACHE=1 ARCH=$ARCH $DOCKER_BUILD_EXTRA_FLAGS -t $DOCKER_REPO:latest -f $DOCKERFILE_NAME $DOCKERFILE_PATH - sleep 10 - docker buildx build --push --progress plain --platform $PLATFORM --cache-from $DOCKER_REPO:latest --build-arg BUILDKIT_INLINE_CACHE=1 ARCH=$ARCH -t $DOCKER_REPO:$DOCKER_TAG -f $DOCKERFILE_NAME $DOCKERFILE_PATH - done - fi From 77cc90e3ef82c57014473170ff960f1760c69571 Mon Sep 17 00:00:00 2001 From: ppaul Date: Tue, 19 Apr 2022 15:10:18 -0400 Subject: [PATCH 4/7] feat: add buildkit flag --- screwdriver.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/screwdriver.yaml b/screwdriver.yaml index 8a17bb0f..d4ae5fd5 100644 --- a/screwdriver.yaml +++ b/screwdriver.yaml @@ -35,5 +35,6 @@ jobs: docker-publish: environment: DOCKER_MULTI_PLATFORM_BUILDS_ENABLED: 1 + DOCKER_BUILDKIT: 1 requires: publish template: sd/dind@latest From d686e756df867d3ab2fe8868cd078b133324dbc2 Mon Sep 17 00:00:00 2001 From: ppaul Date: Tue, 19 Apr 2022 15:46:09 -0400 Subject: [PATCH 5/7] feat: fix dockerfile to read ARGS --- Dockerfile | 61 +++++++++++++++++++++++++++--------------------------- 1 file changed, 31 insertions(+), 30 deletions(-) diff --git a/Dockerfile b/Dockerfile index 2d5c52d9..30f2f403 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,7 @@ FROM alpine:3.12 LABEL MAINTAINER="Screwdriver Team " ARG TARGETOS TARGETARCH +RUN echo "Building for ${TARGETOS}_${TARGETARCH}" WORKDIR /opt/sd RUN set -x \ @@ -13,67 +14,67 @@ RUN set -x \ && apk add --no-cache --virtual .build-dependencies wget gpgme unzip \ # Download Launcher && wget -q -O - https://github.com/screwdriver-cd/launcher/releases/latest \ - | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_$TARGETOS_$TARGETARCH' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/launcher_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/launcher_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/launcher/releases/latest \ - | egrep -o '/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_$TARGETOS_$TARGETARCH' \ + | egrep -o "/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O launch \ && chmod +x launch \ # Download Log Service && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ - | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_$TARGETOS_$TARGETARCH' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/log-service_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/log-service_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ - | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_$TARGETOS_$TARGETARCH' \ + | egrep -o "/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O logservice \ && chmod +x logservice \ # Download Meta CLI && wget -q -O - https://github.com/screwdriver-cd/meta-cli/releases/latest \ - | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_$TARGETOS_$TARGETARCH' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/meta-cli_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/meta-cli_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/meta-cli/releases/latest \ - | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_$TARGETOS_$TARGETARCH' \ + | egrep -o "/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O meta \ && chmod +x meta \ # Download sd-step && wget -q -O - https://github.com/screwdriver-cd/sd-step/releases/latest \ - | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_$TARGETOS_$TARGETARCH' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-step_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-step_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/sd-step/releases/latest \ - | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_$TARGETOS_$TARGETARCH' \ + | egrep -o "/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O sd-step \ && chmod +x sd-step \ # Download sd-cmd && wget -q -O - https://github.com/screwdriver-cd/sd-cmd/releases/latest \ - | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_$TARGETOS_$TARGETARCH' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-cmd_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-cmd_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/sd-cmd/releases/latest \ - | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_$TARGETOS_$TARGETARCH' \ + | egrep -o "/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O sd-cmd \ && chmod +x sd-cmd \ # Download store-cli && wget -q -O - https://github.com/screwdriver-cd/store-cli/releases/latest \ - | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_$TARGETOS_$TARGETARCH' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/store-cli_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/store-cli_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/store-cli/releases/latest \ - | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_$TARGETOS_$TARGETARCH' \ + | egrep -o "/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O store-cli \ && chmod +x store-cli \ # Download gitversion && wget -q -O - https://github.com/screwdriver-cd/gitversion/releases/latest \ - | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_$TARGETOS_$TARGETARCH' \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/gitversion_$TARGETOS_$TARGETARCH/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/gitversion_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/gitversion/releases/latest \ - | egrep -o '/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_$TARGETOS_$TARGETARCH' \ + | egrep -o "/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O gitversion \ && chmod +x gitversion \ # Download Tini Static && wget -q -O - https://github.com/krallin/tini/releases/latest \ - | egrep -o '/krallin/tini/releases/download/v[0-9.]*/tini-static' \ + | egrep -o "/krallin/tini/releases/download/v[0-9.]*/tini-static" \ | head -1 \ | wget --base=http://github.com/ -i - -O tini-static \ && wget -q -O - https://github.com/krallin/tini/releases/latest \ - | egrep -o '/krallin/tini/releases/download/v[0-9.]*/tini-static.asc' \ + | egrep -o "/krallin/tini/releases/download/v[0-9.]*/tini-static.asc" \ | wget --base=http://github.com/ -i - -O tini-static.asc \ && found=''; \ ( \ @@ -91,13 +92,13 @@ RUN set -x \ && mv tini-static tini \ && chmod +x tini \ # Download dumb-init - && wget -O /usr/local/bin/dumb-init 'https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_$TARGETARCH' \ + && wget -O /usr/local/bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_$TARGETARCH" \ && chmod +x /usr/local/bin/dumb-init \ && cp /usr/local/bin/dumb-init /opt/sd/dumb-init \ # Install Habitat && mkdir -p /hab/bin /opt/sd/bin \ # Download Habitat Binary - && wget -O hab.tar.gz 'https://packages.chef.io/files/stable/habitat/0.79.1/hab-x86_64-linux.tar.gz' \ + && wget -O hab.tar.gz "https://packages.chef.io/files/stable/habitat/0.79.1/hab-x86_64-linux.tar.gz" \ && tar -C . -ozxvf hab.tar.gz \ && mv hab-*/hab /hab/bin/hab \ && chmod +x /hab/bin/hab \ @@ -109,19 +110,19 @@ RUN set -x \ # https://github.com/screwdriver-cd/artifact-bookend/blob/master/commands.txt && /hab/bin/hab pkg install core/curl/7.54.1 \ # Install Sonar scanner cli - && wget -O sonarscanner-cli-linux.zip 'https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip' \ - && wget -O sonarscanner-cli-macosx.zip 'https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-macosx.zip' \ + && wget -O sonarscanner-cli-linux.zip "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip" \ + && wget -O sonarscanner-cli-macosx.zip "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-macosx.zip" \ && unzip -q sonarscanner-cli-linux.zip \ && unzip -q sonarscanner-cli-macosx.zip \ && mv sonar-scanner-*-linux sonarscanner-cli-linux \ && mv sonar-scanner-*-macosx sonarscanner-cli-macosx \ # Install skope - && wget -q -O skopeo-linux.tar.gz 'https://github.com/screwdriver-cd/sd-packages/releases/download/v0.0.30/skopeo-linux.tar.gz' \ + && wget -q -O skopeo-linux.tar.gz "https://github.com/screwdriver-cd/sd-packages/releases/download/v0.0.30/skopeo-linux.tar.gz" \ && tar -C . -ozxvf skopeo-linux.tar.gz \ && chmod +x skopeo \ # Install zstd - && wget -q -O zstd-cli-linux.tar.gz 'https://github.com/screwdriver-cd/sd-packages/releases/download/v0.0.30/zstd-cli-linux.tar.gz' \ - && wget -q -O zstd-cli-macosx.tar.gz 'https://github.com/screwdriver-cd/sd-packages/releases/download/v0.0.30/zstd-cli-macosx.tar.gz' \ + && wget -q -O zstd-cli-linux.tar.gz "https://github.com/screwdriver-cd/sd-packages/releases/download/v0.0.30/zstd-cli-linux.tar.gz" \ + && wget -q -O zstd-cli-macosx.tar.gz "https://github.com/screwdriver-cd/sd-packages/releases/download/v0.0.30/zstd-cli-macosx.tar.gz" \ && tar -C . -ozxvf zstd-cli-linux.tar.gz \ && mv zstd zstd-cli-linux \ && tar -C . -ozxvf zstd-cli-macosx.tar.gz \ From 6ca3ab3a2909a81d66a6ef1322071ca41accb3d2 Mon Sep 17 00:00:00 2001 From: ppaul Date: Tue, 19 Apr 2022 15:49:43 -0400 Subject: [PATCH 6/7] update sdlocal docker file --- Dockerfile | 2 +- Dockerfile.local | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/Dockerfile b/Dockerfile index 30f2f403..e814067e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -92,7 +92,7 @@ RUN set -x \ && mv tini-static tini \ && chmod +x tini \ # Download dumb-init - && wget -O /usr/local/bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_$TARGETARCH" \ + && wget -O /usr/local/bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_${TARGETARCH}" \ && chmod +x /usr/local/bin/dumb-init \ && cp /usr/local/bin/dumb-init /opt/sd/dumb-init \ # Install Habitat diff --git a/Dockerfile.local b/Dockerfile.local index 1d877faf..27c0a9fc 100644 --- a/Dockerfile.local +++ b/Dockerfile.local @@ -1,6 +1,9 @@ FROM alpine:3.12 LABEL MAINTAINER="Screwdriver Team " +ARG TARGETOS TARGETARCH +RUN echo "Building for ${TARGETOS}_${TARGETARCH}" + WORKDIR /opt/sd RUN set -x \ # Alpine ships with musl instead of glibc (this fixes the symlink) @@ -11,27 +14,27 @@ RUN set -x \ && apk add --no-cache --virtual .build-dependencies wget gpgme unzip \ # Download Log Service && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ - | egrep -o '/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_linux_amd64' \ + | egrep -o "/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O logservice \ && chmod +x logservice \ # Download Meta CLI && wget -q -O - https://github.com/screwdriver-cd/meta-cli/releases/latest \ - | egrep -o '/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_linux_amd64' \ + | egrep -o "/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O meta \ && chmod +x meta \ # Download sd-step && wget -q -O - https://github.com/screwdriver-cd/sd-step/releases/latest \ - | egrep -o '/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_linux_amd64' \ + | egrep -o "/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O sd-step \ && chmod +x sd-step \ # Download sd-cmd && wget -q -O - https://github.com/screwdriver-cd/sd-cmd/releases/latest \ - | egrep -o '/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_linux_amd64' \ + | egrep -o "/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O sd-cmd \ && chmod +x sd-cmd \ # Download store-cli && wget -q -O - https://github.com/screwdriver-cd/store-cli/releases/latest \ - | egrep -o '/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_linux_amd64' \ + | egrep -o "/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_${TARGETOS}_${TARGETARCH}" \ | wget --base=http://github.com/ -i - -O store-cli \ && chmod +x store-cli \ # Download Tini Static @@ -58,7 +61,7 @@ RUN set -x \ && mv tini-static tini \ && chmod +x tini \ # Download dumb-init - && wget -O /usr/local/bin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64 \ + && wget -O /usr/local/bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_${TARGETARCH}" \ && chmod +x /usr/local/bin/dumb-init \ && cp /usr/local/bin/dumb-init /opt/sd/dumb-init \ # Install Habitat From ee77705440f49118c15b862230c6670d80b01178 Mon Sep 17 00:00:00 2001 From: ppaul Date: Thu, 28 Apr 2022 19:01:30 -0400 Subject: [PATCH 7/7] feat: make the docker file multi arch compatible --- Dockerfile | 150 ++++++++++++++++++++++++++--------------------- Dockerfile.local | 64 ++++++++++++-------- 2 files changed, 123 insertions(+), 91 deletions(-) diff --git a/Dockerfile b/Dockerfile index e814067e..604de013 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,10 +1,12 @@ -FROM alpine:3.12 +FROM alpine:3.12 AS base LABEL MAINTAINER="Screwdriver Team " ARG TARGETOS TARGETARCH RUN echo "Building for ${TARGETOS}_${TARGETARCH}" WORKDIR /opt/sd + +FROM base AS base-amd64 RUN set -x \ # Alpine ships with musl instead of glibc (this fixes the symlink) && mkdir /lib64 \ @@ -12,82 +14,118 @@ RUN set -x \ # Also, missing https for some magic reason && apk add --no-cache --update ca-certificates \ && apk add --no-cache --virtual .build-dependencies wget gpgme unzip \ + # Install Habitat + && mkdir -p /hab/bin /opt/sd/bin \ + # Download Habitat Binary + && wget -O hab.tar.gz "https://packages.chef.io/files/stable/habitat/0.79.1/hab-x86_64-linux.tar.gz" \ + && tar -C . -ozxvf hab.tar.gz \ + && mv hab-*/hab /hab/bin/hab \ + && chmod +x /hab/bin/hab \ + # @TODO Remove this, I don't think it belongs here. We should use /hab/bin/hab instead. + && cp /hab/bin/hab /opt/sd/bin/hab \ + # Install Habitat packages + && /hab/bin/hab pkg install core/bash core/git core/zip core/unzip core/kmod core/iptables core/docker/19.03.8 core/wget core/sed core/jq-static/1.6 \ + # Install curl 7.54.1 since we use that version in artifact-bookend + # https://github.com/screwdriver-cd/artifact-bookend/blob/master/commands.txt + && /hab/bin/hab pkg install core/curl/7.54.1 \ + # Cleanup Habitat Files + && rm -rf /hab/cache /opt/sd/hab.tar.gz /opt/sd/hab-* \ + # Cleanup docs and man pages (how could this go wrong) + && find /hab -name doc -exec rm -r {} + \ + && find /hab -name docs -exec rm -r {} + \ + && find /hab -name man -exec rm -r {} + \ + # bin link bash if not present + && if [[ -z $(command -v bash) ]]; then /hab/bin/hab pkg binlink core/bash bash ; fi + +FROM base AS base-arm64 +RUN set -x \ + # Alpine ships with musl instead of glibc (this fixes the symlink) + && mkdir /lib64 \ + && ln -s /lib/libc.musl-aarch64.so.1 /lib64/ld-linux-aarch64.so.1 \ + && apk add --no-cache --update ca-certificates \ + && apk add --no-cache --virtual .build-dependencies gpgme \ + # Donwload pkgs needed in container + && apk add --no-cache composer wget zip unzip git bash iptables sed docker jq curl kmod + +# Install common dependencies by target architcture +FROM base-${TARGETARCH} AS final +RUN set -x \ # Download Launcher && wget -q -O - https://github.com/screwdriver-cd/launcher/releases/latest \ - | egrep -o "/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_${TARGETOS}_${TARGETARCH}" \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/launcher_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/launcher_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/launcher/releases/latest \ - | egrep -o "/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_${TARGETOS}_${TARGETARCH}" \ - | wget --base=http://github.com/ -i - -O launch \ + | egrep -o "/screwdriver-cd/launcher/releases/download/v[0-9.]*/launcher_${TARGETOS}_${TARGETARCH}" \ + | wget --base=http://github.com/ -i - -O launch \ && chmod +x launch \ # Download Log Service && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ - | egrep -o "/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_${TARGETOS}_${TARGETARCH}" \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/log-service_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/log-service_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ - | egrep -o "/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_${TARGETOS}_${TARGETARCH}" \ - | wget --base=http://github.com/ -i - -O logservice \ + | egrep -o "/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_${TARGETOS}_${TARGETARCH}" \ + | wget --base=http://github.com/ -i - -O logservice \ && chmod +x logservice \ # Download Meta CLI && wget -q -O - https://github.com/screwdriver-cd/meta-cli/releases/latest \ - | egrep -o "/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_${TARGETOS}_${TARGETARCH}" \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/meta-cli_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/meta-cli_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/meta-cli/releases/latest \ - | egrep -o "/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_${TARGETOS}_${TARGETARCH}" \ - | wget --base=http://github.com/ -i - -O meta \ + | egrep -o "/screwdriver-cd/meta-cli/releases/download/v[0-9.]*/meta-cli_${TARGETOS}_${TARGETARCH}" \ + | wget --base=http://github.com/ -i - -O meta \ && chmod +x meta \ # Download sd-step && wget -q -O - https://github.com/screwdriver-cd/sd-step/releases/latest \ - | egrep -o "/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_${TARGETOS}_${TARGETARCH}" \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-step_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-step_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/sd-step/releases/latest \ - | egrep -o "/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_${TARGETOS}_${TARGETARCH}" \ - | wget --base=http://github.com/ -i - -O sd-step \ + | egrep -o "/screwdriver-cd/sd-step/releases/download/v[0-9.]*/sd-step_${TARGETOS}_${TARGETARCH}" \ + | wget --base=http://github.com/ -i - -O sd-step \ && chmod +x sd-step \ # Download sd-cmd && wget -q -O - https://github.com/screwdriver-cd/sd-cmd/releases/latest \ - | egrep -o "/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_${TARGETOS}_${TARGETARCH}" \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-cmd_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/sd-cmd_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/sd-cmd/releases/latest \ - | egrep -o "/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_${TARGETOS}_${TARGETARCH}" \ - | wget --base=http://github.com/ -i - -O sd-cmd \ + | egrep -o "/screwdriver-cd/sd-cmd/releases/download/v[0-9.]*/sd-cmd_${TARGETOS}_${TARGETARCH}" \ + | wget --base=http://github.com/ -i - -O sd-cmd \ && chmod +x sd-cmd \ # Download store-cli && wget -q -O - https://github.com/screwdriver-cd/store-cli/releases/latest \ - | egrep -o "/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_${TARGETOS}_${TARGETARCH}" \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/store-cli_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/store-cli_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/store-cli/releases/latest \ - | egrep -o "/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_${TARGETOS}_${TARGETARCH}" \ - | wget --base=http://github.com/ -i - -O store-cli \ + | egrep -o "/screwdriver-cd/store-cli/releases/download/v[0-9.]*/store-cli_${TARGETOS}_${TARGETARCH}" \ + | wget --base=http://github.com/ -i - -O store-cli \ && chmod +x store-cli \ # Download gitversion && wget -q -O - https://github.com/screwdriver-cd/gitversion/releases/latest \ - | egrep -o "/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_${TARGETOS}_${TARGETARCH}" \ - | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/gitversion_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ + | egrep -o "/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_${TARGETOS}_${TARGETARCH}" \ + | sed -e "s/\/screwdriver-cd\/\([a-zA-Z-]*\)\/releases\/download\/\(v[0-9.]*\)\/gitversion_${TARGETOS}_${TARGETARCH}/\1 \2/" >> tool-versions \ && wget -q -O - https://github.com/screwdriver-cd/gitversion/releases/latest \ - | egrep -o "/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_${TARGETOS}_${TARGETARCH}" \ - | wget --base=http://github.com/ -i - -O gitversion \ + | egrep -o "/screwdriver-cd/gitversion/releases/download/v[0-9.]*/gitversion_${TARGETOS}_${TARGETARCH}" \ + | wget --base=http://github.com/ -i - -O gitversion \ && chmod +x gitversion \ # Download Tini Static && wget -q -O - https://github.com/krallin/tini/releases/latest \ - | egrep -o "/krallin/tini/releases/download/v[0-9.]*/tini-static" \ - | head -1 \ - | wget --base=http://github.com/ -i - -O tini-static \ + | egrep -o "/krallin/tini/releases/download/v[0-9.]*/tini-static" \ + | head -1 \ + | wget --base=http://github.com/ -i - -O tini-static \ && wget -q -O - https://github.com/krallin/tini/releases/latest \ - | egrep -o "/krallin/tini/releases/download/v[0-9.]*/tini-static.asc" \ - | wget --base=http://github.com/ -i - -O tini-static.asc \ + | egrep -o "/krallin/tini/releases/download/v[0-9.]*/tini-static.asc" \ + | wget --base=http://github.com/ -i - -O tini-static.asc \ && found=''; \ - ( \ - gpg --no-tty --keyserver keyserver.ubuntu.com --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ - gpg --no-tty --keyserver pgp.mit.edu --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ - gpg --no-tty --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ - gpg --no-tty --keyserver keyserver.pgp.com --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ - gpg --no-tty --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ - gpg --no-tty --keyserver ha.pool.sks-keyservers.net --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 \ - ) \ + ( \ + gpg --no-tty --keyserver keyserver.ubuntu.com --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ + gpg --no-tty --keyserver pgp.mit.edu --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ + gpg --no-tty --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ + gpg --no-tty --keyserver keyserver.pgp.com --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ + gpg --no-tty --keyserver hkp://ipv4.pool.sks-keyservers.net --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 || \ + gpg --no-tty --keyserver ha.pool.sks-keyservers.net --recv-keys 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7 \ + ) \ && found=yes && break; \ - test -z "$found" && echo >&2 "error: failed to fetch GPG key 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7" && exit 1; \ - gpg --verify tini-static.asc \ + test -z "$found" && echo >&2 "error: failed to fetch GPG key 595E85A6B1B4779EA4DAAEC70B588DFF0527A9B7" && exit 1; \ + gpg --verify tini-static.asc \ && rm tini-static.asc \ && mv tini-static tini \ && chmod +x tini \ @@ -95,20 +133,6 @@ RUN set -x \ && wget -O /usr/local/bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_${TARGETARCH}" \ && chmod +x /usr/local/bin/dumb-init \ && cp /usr/local/bin/dumb-init /opt/sd/dumb-init \ - # Install Habitat - && mkdir -p /hab/bin /opt/sd/bin \ - # Download Habitat Binary - && wget -O hab.tar.gz "https://packages.chef.io/files/stable/habitat/0.79.1/hab-x86_64-linux.tar.gz" \ - && tar -C . -ozxvf hab.tar.gz \ - && mv hab-*/hab /hab/bin/hab \ - && chmod +x /hab/bin/hab \ - # @TODO Remove this, I don't think it belongs here. We should use /hab/bin/hab instead. - && cp /hab/bin/hab /opt/sd/bin/hab \ - # Install Habitat packages - && /hab/bin/hab pkg install core/bash core/git core/zip core/unzip core/kmod core/iptables core/docker/19.03.8 core/wget core/sed core/jq-static/1.6 \ - # Install curl 7.54.1 since we use that version in artifact-bookend - # https://github.com/screwdriver-cd/artifact-bookend/blob/master/commands.txt - && /hab/bin/hab pkg install core/curl/7.54.1 \ # Install Sonar scanner cli && wget -O sonarscanner-cli-linux.zip "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-linux.zip" \ && wget -O sonarscanner-cli-macosx.zip "https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.6.2.2472-macosx.zip" \ @@ -129,20 +153,12 @@ RUN set -x \ && mv zstd zstd-cli-macosx \ && chmod +x zstd-cli-linux \ && chmod +x zstd-cli-macosx \ - # Cleanup Habitat Files - && rm -rf /hab/cache /opt/sd/hab.tar.gz /opt/sd/hab-* \ - # Cleanup docs and man pages (how could this go wrong) - && find /hab -name doc -exec rm -r {} + \ - && find /hab -name docs -exec rm -r {} + \ - && find /hab -name man -exec rm -r {} + \ # Cleanup Skopeo and Sonar scanner cli files && rm -rf /opt/sd/skopeo-linux.tar.gz /opt/sd/sonarscanner-cli-linux.zip /opt/sd/sonarscanner-cli-macosx.zip /opt/sd/sonar-scanner-*-linux /opt/sd/sonar-scanner-*-macosx \ # Cleanup Zstd cli files && rm -rf /opt/sd/zstd-cli-linux.tar.gz /opt/sd/zstd-cli-macosx.tar.gz \ # Cleanup packages - && apk del --purge .build-dependencies \ - # bin link bash if not present - && if [[ -z $(command -v bash) ]]; then /hab/bin/hab pkg binlink core/bash bash ; fi + && apk del --purge .build-dependencies # Copy optional entrypoint script to the image COPY Docker/launcher_entrypoint.sh /opt/sd/launcher_entrypoint.sh diff --git a/Dockerfile.local b/Dockerfile.local index 27c0a9fc..c876d535 100644 --- a/Dockerfile.local +++ b/Dockerfile.local @@ -1,10 +1,12 @@ -FROM alpine:3.12 +FROM alpine:3.12 AS base LABEL MAINTAINER="Screwdriver Team " ARG TARGETOS TARGETARCH RUN echo "Building for ${TARGETOS}_${TARGETARCH}" WORKDIR /opt/sd + +FROM base AS base-amd64 RUN set -x \ # Alpine ships with musl instead of glibc (this fixes the symlink) && mkdir /lib64 \ @@ -12,6 +14,42 @@ RUN set -x \ # Also, missing https for some magic reason && apk add --no-cache --update ca-certificates \ && apk add --no-cache --virtual .build-dependencies wget gpgme unzip \ + # Install Habitat + && mkdir -p /hab/bin /opt/sd/bin \ + # Download Habitat Binary + && wget -O hab.tar.gz 'https://packages.chef.io/files/stable/habitat/0.79.1/hab-x86_64-linux.tar.gz' \ + && tar -C . -ozxvf hab.tar.gz \ + && mv hab-*/hab /hab/bin/hab \ + && chmod +x /hab/bin/hab \ + # @TODO Remove this, I don't think it belongs here. We should use /hab/bin/hab instead. + && cp /hab/bin/hab /opt/sd/bin/hab \ + # Install Habitat packages + && /hab/bin/hab pkg install core/bash core/git core/zip core/unzip core/kmod core/iptables core/docker/19.03.8 core/wget core/sed core/jq-static/1.6 \ + # Install curl 7.54.1 since we use that version in artifact-bookend + # https://github.com/screwdriver-cd/artifact-bookend/blob/master/commands.txt + && /hab/bin/hab pkg install core/curl/7.54.1 \ + # Cleanup Habitat Files + && rm -rf /hab/cache /opt/sd/hab.tar.gz /opt/sd/hab-* \ + # Cleanup docs and man pages (how could this go wrong) + && find /hab -name doc -exec rm -r {} + \ + && find /hab -name docs -exec rm -r {} + \ + && find /hab -name man -exec rm -r {} + \ + # bin link bash if not present + && if [[ -z $(command -v bash) ]]; then /hab/bin/hab pkg binlink core/bash bash ; fi + +FROM base AS base-arm64 +RUN set -x \ + # Alpine ships with musl instead of glibc (this fixes the symlink) + && mkdir /lib64 \ + && ln -s /lib/libc.musl-aarch64.so.1 /lib64/ld-linux-aarch64.so.1 \ + && apk add --no-cache --update ca-certificates \ + && apk add --no-cache --virtual .build-dependencies gpgme \ + # Donwload pkgs needed in container + && apk add --no-cache composer wget zip unzip git bash iptables sed docker jq curl kmod + +# Install common dependencies by target architcture +FROM base-${TARGETARCH} AS final +RUN set -x \ # Download Log Service && wget -q -O - https://github.com/screwdriver-cd/log-service/releases/latest \ | egrep -o "/screwdriver-cd/log-service/releases/download/v[0-9.]*/log-service_${TARGETOS}_${TARGETARCH}" \ @@ -64,20 +102,6 @@ RUN set -x \ && wget -O /usr/local/bin/dumb-init "https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_${TARGETARCH}" \ && chmod +x /usr/local/bin/dumb-init \ && cp /usr/local/bin/dumb-init /opt/sd/dumb-init \ - # Install Habitat - && mkdir -p /hab/bin /opt/sd/bin \ - # Download Habitat Binary - && wget -O hab.tar.gz 'https://packages.chef.io/files/stable/habitat/0.79.1/hab-x86_64-linux.tar.gz' \ - && tar -C . -ozxvf hab.tar.gz \ - && mv hab-*/hab /hab/bin/hab \ - && chmod +x /hab/bin/hab \ - # @TODO Remove this, I don't think it belongs here. We should use /hab/bin/hab instead. - && cp /hab/bin/hab /opt/sd/bin/hab \ - # Install Habitat packages - && /hab/bin/hab pkg install core/bash core/git core/zip core/unzip core/kmod core/iptables core/docker/19.03.8 core/wget core/sed core/jq-static/1.6 \ - # Install curl 7.54.1 since we use that version in artifact-bookend - # https://github.com/screwdriver-cd/artifact-bookend/blob/master/commands.txt - && /hab/bin/hab pkg install core/curl/7.54.1 \ # Install Sonar scanner cli && wget -O sonarscanner-cli-linux.zip 'https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.4.0.2170-linux.zip' \ && wget -O sonarscanner-cli-macosx.zip 'https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-4.4.0.2170-macosx.zip' \ @@ -98,20 +122,12 @@ RUN set -x \ && mv zstd zstd-cli-macosx \ && chmod +x zstd-cli-linux \ && chmod +x zstd-cli-macosx \ - # Cleanup Habitat Files - && rm -rf /hab/cache /opt/sd/hab.tar.gz /opt/sd/hab-* \ - # Cleanup docs and man pages (how could this go wrong) - && find /hab -name doc -exec rm -r {} + \ - && find /hab -name docs -exec rm -r {} + \ - && find /hab -name man -exec rm -r {} + \ # Cleanup Skopeo and Sonar scanner cli files && rm -rf /opt/sd/skopeo-linux.tar.gz /opt/sd/sonarscanner-cli-linux.zip /opt/sd/sonarscanner-cli-macosx.zip /opt/sd/sonar-scanner-*-linux /opt/sd/sonar-scanner-*-macosx \ # Cleanup Zstd cli files && rm -rf /opt/sd/zstd-cli-linux.tar.gz /opt/sd/zstd-cli-macosx.tar.gz \ # Cleanup packages - && apk del --purge .build-dependencies \ - # bin link bash if not present - && if [[ -z $(command -v bash) ]]; then /hab/bin/hab pkg binlink core/bash bash ; fi + && apk del --purge .build-dependencies # Copy optional entrypoint script to the image COPY Docker/launcher_entrypoint.sh /opt/sd/launcher_entrypoint.sh