From 292aa492a72f4e180bb92d109a73ebf7c8a0451d Mon Sep 17 00:00:00 2001 From: Dilip Gowda Bhagavan <110233170+dilipgb@users.noreply.github.com> Date: Thu, 5 Oct 2023 19:53:33 +0530 Subject: [PATCH] Add support for s390x (#1142) * installing docker and jq Signed-off-by: Dilip Gowda Bhagavan * added support for s390x Signed-off-by: Dilip Gowda Bhagavan * adding back newline at end of file Signed-off-by: Dilip Gowda Bhagavan * adding back newline at end of file Signed-off-by: Dilip Gowda Bhagavan * updated release workflows Signed-off-by: Dilip Gowda Bhagavan * Running build and publish flow on fork Signed-off-by: Dilip Gowda Bhagavan * corrected typo Signed-off-by: Dilip Gowda Bhagavan * installing docker and jq Signed-off-by: Dilip Gowda Bhagavan * adding back newline at end of file Signed-off-by: Dilip Gowda Bhagavan * adding back newline at end of file Signed-off-by: Dilip Gowda Bhagavan * updated release workflows Signed-off-by: Dilip Gowda Bhagavan * corrected typo Signed-off-by: Dilip Gowda Bhagavan * reverting docker repo to buildpacksio Signed-off-by: Dilip Gowda Bhagavan * seperated s390x job to different file Signed-off-by: Dilip Gowda Bhagavan * removing hard coded values to secret Signed-off-by: Dilip Gowda Bhagavan * removed s390x conditon Signed-off-by: Dilip Gowda Bhagavan * adding s390x conditon Signed-off-by: Dilip Gowda Bhagavan * correcting alignment in build.yml Signed-off-by: Dilip Gowda Bhagavan --------- Signed-off-by: Dilip Gowda Bhagavan Signed-off-by: Dilip Gowda Bhagavan <110233170+dilipgb@users.noreply.github.com> --- .github/workflows/build.yml | 12 ++++ .github/workflows/draft-release.yml | 6 +- .github/workflows/post-release.yml | 4 ++ .github/workflows/test-s390x.yml | 87 +++++++++++++++++++++++++++++ Makefile | 66 +++++++++++++++++++++- 5 files changed, 169 insertions(+), 6 deletions(-) create mode 100644 .github/workflows/test-s390x.yml diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index da15035d..85921034 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -160,6 +160,14 @@ jobs: name: lifecycle-linux-arm64-sha256 path: out/lifecycle-v*+linux.arm64.tgz.sha256 - uses: actions/upload-artifact@v3 + with: + name: lifecycle-linux-s390x + path: out/lifecycle-v*+linux.s390x.tgz + - uses: actions/upload-artifact@v2 + with: + name: lifecycle-linux-s390x-sha256 + path: out/lifecycle-v*+linux.s390x.tgz.sha256 + - uses: actions/upload-artifact@v2 with: name: lifecycle-windows-x86-64 path: out/lifecycle-v*+windows.x86-64.tgz @@ -206,12 +214,16 @@ jobs: LINUX_ARM64_SHA=$(go run ./tools/image/main.go -lifecyclePath ./out/lifecycle-v*+linux.arm64.tgz -tag buildpacksio/lifecycle:${LIFECYCLE_IMAGE_TAG}-linux-arm64 -arch arm64 | awk '{print $NF}') echo "LINUX_ARM64_SHA: $LINUX_ARM64_SHA" + LINUX_S390X_SHA=$(go run ./tools/image/main.go -lifecyclePath ./out/lifecycle-v*+linux.s390x.tgz -tag buildpacksio/lifecycle:${LIFECYCLE_IMAGE_TAG}-linux-s390x -arch s390x | awk '{print $NF}') + echo "LINUX_S390X_SHA: $LINUX_S390X_SHA" + WINDOWS_AMD64_SHA=$(go run ./tools/image/main.go -lifecyclePath ./out/lifecycle-v*+windows.x86-64.tgz -tag buildpacksio/lifecycle:${LIFECYCLE_IMAGE_TAG}-windows -os windows | awk '{print $NF}') echo "WINDOWS_AMD64_SHA: $WINDOWS_AMD64_SHA" docker manifest create buildpacksio/lifecycle:${LIFECYCLE_IMAGE_TAG} \ buildpacksio/lifecycle:${LIFECYCLE_IMAGE_TAG}-linux-x86-64@${LINUX_AMD64_SHA} \ buildpacksio/lifecycle:${LIFECYCLE_IMAGE_TAG}-linux-arm64@${LINUX_ARM64_SHA} \ + buildpacksio/lifecycle:${LIFECYCLE_IMAGE_TAG}-linux-s390x@${LINUX_S390X_SHA} \ buildpacksio/lifecycle:${LIFECYCLE_IMAGE_TAG}-windows@${WINDOWS_AMD64_SHA} MANIFEST_SHA=$(docker manifest push buildpacksio/lifecycle:${LIFECYCLE_IMAGE_TAG}) diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml index 7406533c..858a50af 100644 --- a/.github/workflows/draft-release.yml +++ b/.github/workflows/draft-release.yml @@ -24,7 +24,7 @@ jobs: exit 1 fi echo "LIFECYCLE_VERSION=$version" >> $GITHUB_ENV - - name: Determine download urls for linux-x86-64, linux-arm64, and windows + - name: Determine download urls for linux-x86-64, linux-arm64, linux-s390x, and windows id: artifact-urls # FIXME: this script should be updated to work with actions/github-script@v6 uses: actions/github-script@v3 @@ -82,8 +82,8 @@ jobs: if (urlList.length === 0) { throw "no artifacts found" } - if (urlList.length != 8) { - throw "there should be exactly 8 artifacts" + if (urlList.length != 10) { + throw "there should be exactly 10 artifacts" } return urlList.join(",") }) diff --git a/.github/workflows/post-release.yml b/.github/workflows/post-release.yml index 442f06a1..20136abf 100644 --- a/.github/workflows/post-release.yml +++ b/.github/workflows/post-release.yml @@ -54,11 +54,13 @@ jobs: crane tag buildpacksio/lifecycle:${{ env.LIFECYCLE_IMAGE_TAG }}-linux-x86-64@${{ env.LINUX_AMD64_SHA }} ${{ env.LIFECYCLE_VERSION }}-linux-x86-64 crane tag buildpacksio/lifecycle:${{ env.LIFECYCLE_IMAGE_TAG }}-linux-arm64@${{ env.LINUX_ARM64_SHA }} ${{ env.LIFECYCLE_VERSION }}-linux-arm64 + crane tag buildpacksio/lifecycle:${{ env.LIFECYCLE_IMAGE_TAG }}-linux-s390x@${{ env.LINUX_S390X_SHA }} ${{ env.LIFECYCLE_VERSION }}-linux-s390x crane tag buildpacksio/lifecycle:${{ env.LIFECYCLE_IMAGE_TAG }}-windows@${{ env.WINDOWS_AMD64_SHA }} ${{ env.LIFECYCLE_VERSION }}-windows docker manifest create buildpacksio/lifecycle:${{ env.LIFECYCLE_VERSION }} \ buildpacksio/lifecycle:${{ env.LIFECYCLE_VERSION }}-linux-x86-64@${{ env.LINUX_AMD64_SHA }} \ buildpacksio/lifecycle:${{ env.LIFECYCLE_VERSION }}-linux-arm64@${{ env.LINUX_ARM64_SHA }} \ + buildpacksio/lifecycle:${{ env.LIFECYCLE_VERSION }}-linux-s390x@${{ env.LINUX_S390X_SHA }} \ buildpacksio/lifecycle:${{ env.LIFECYCLE_VERSION }}-windows@${{ env.WINDOWS_AMD64_SHA }} MANIFEST_SHA=$(docker manifest push buildpacksio/lifecycle:${{ env.LIFECYCLE_VERSION }}) @@ -89,11 +91,13 @@ jobs: crane tag buildpacksio/lifecycle:${{ env.LIFECYCLE_IMAGE_TAG }}-linux-x86-64@${{ env.LINUX_AMD64_SHA }} latest-linux-x86-64 crane tag buildpacksio/lifecycle:${{ env.LIFECYCLE_IMAGE_TAG }}-linux-arm64@${{ env.LINUX_ARM64_SHA }} latest-linux-arm64 + crane tag buildpacksio/lifecycle:${{ env.LIFECYCLE_IMAGE_TAG }}-linux-s390x@${{ env.LINUX_S390X_SHA }} latest-linux-s390x crane tag buildpacksio/lifecycle:${{ env.LIFECYCLE_IMAGE_TAG }}-windows@${{ env.WINDOWS_AMD64_SHA }} latest-windows docker manifest create buildpacksio/lifecycle:latest \ buildpacksio/lifecycle:latest-linux-x86-64@${{ env.LINUX_AMD64_SHA }} \ buildpacksio/lifecycle:latest-linux-arm64@${{ env.LINUX_ARM64_SHA }} \ + buildpacksio/lifecycle:latest-linux-s390x@${{ env.LINUX_S390X_SHA }} \ buildpacksio/lifecycle:latest-windows@${{ env.WINDOWS_AMD64_SHA }} MANIFEST_SHA=$(docker manifest push buildpacksio/lifecycle:latest) diff --git a/.github/workflows/test-s390x.yml b/.github/workflows/test-s390x.yml new file mode 100644 index 00000000..6db8f4fa --- /dev/null +++ b/.github/workflows/test-s390x.yml @@ -0,0 +1,87 @@ +name: test-s390x +on: + push: + branches: + - main + - 'release/**' + pull_request: + branches: + - main + - 'release/**' + +jobs: + test-linux-s390x: + if: (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/release*') + runs-on: ubuntu-latest + env: + ZVSI_FP_NAME: bp-floating-ci-${{ github.run_id }} + ZVSI_INSTANCE_NAME: bp-zvsi-ci-${{ github.run_id }} + ZVSI_ZONE_NAME: ca-tor-1 + ZVSI_PROFILE_NAME: bz2-4x16 + + strategy: + fail-fast: false + steps: + - uses: actions/checkout@v3 + - name: install ibmcli and setup ibm login + run: | + curl -fsSL https://clis.cloud.ibm.com/install/linux | sh + ibmcloud login -q --apikey ${{ secrets.IBMCLOUD_API_KEY }} -r ca-tor + ibmcloud plugin install vpc-infrastructure + - name: Creation of ZVSI + id: ZVSI + run: | + #creation of zvsi + ibmcloud is instance-create $ZVSI_INSTANCE_NAME ${{ secrets.ZVSI_VPC }} $ZVSI_ZONE_NAME $ZVSI_PROFILE_NAME ${{ secrets.ZVSI_SUBNET }} --image ${{ secrets.ZVSI_IMAGE }} --keys ${{ secrets.ZVSI_KEY }} --resource-group-id ${{ secrets.ZVSI_RG_ID }} --sgs ${{ secrets.ZVSI_SG }} + #Reserving a floating ip to the ZVSI + ibmcloud is floating-ip-reserve $ZVSI_FP_NAME --zone $ZVSI_ZONE_NAME --resource-group-id ${{ secrets.ZVSI_RG_ID }} --in $ZVSI_INSTANCE_NAME + #Bouding the Floating ip to the ZVSI + ibmcloud is floating-ip-update $ZVSI_FP_NAME --nic primary --in $ZVSI_INSTANCE_NAME + sleep 60 + #Saving the Floating IP to login ZVSI + ZVSI_HOST=$(ibmcloud is floating-ip $ZVSI_FP_NAME | awk '/Address/{print $2}') + echo $ZVSI_HOST + echo "IP=${ZVSI_HOST}" >> $GITHUB_OUTPUT + - name: Status of ZVSI + run: | + check=$(ibmcloud is ins| awk '/'$ZVSI_INSTANCE_NAME'/{print $3}') + while [[ $check != "running" ]] + do + check=$(ibmcloud is ins | awk '/'$ZVSI_INSTANCE_NAME'/{print $3}') + if [[ $check == 'failed' ]] + then + echo "Failed to run the ZVSI" + break + fi + done + - name: Install dependencies and run all tests on s390x ZVSI + uses: appleboy/ssh-action@v0.1.10 + env: + GH_REPOSITORY: ${{ github.server_url }}/${{ github.repository }} + GH_REF: ${{ github.ref }} + with: + host: ${{ steps.ZVSI.outputs.IP }} + username: ${{ secrets.ZVSI_SSH_USER }} + key: ${{ secrets.ZVSI_PR_KEY }} + envs: GH_REPOSITORY,GH_REF + command_timeout: 100m + script: | + apt-get update -y + apt-get install -y wget curl git make gcc jq docker.io + wget https://go.dev/dl/go1.20.6.linux-s390x.tar.gz + rm -rf /usr/local/go && tar -C /usr/local -xzf go1.20.6.linux-s390x.tar.gz + export PATH=$PATH:/usr/local/go/bin + git clone ${GH_REPOSITORY} lifecycle + cd lifecycle && git checkout ${GH_REF} + go env + export PATH=$PATH:~/go/bin + make format || true + make test + - name: Cleanup ZVSI + if: ${{ steps.ZVSI.conclusion == 'success' && always() }} + run: | + #Delete the created ZVSI + ibmcloud is instance-delete $ZVSI_INSTANCE_NAME --force + sleep 20 + #Release the created FP + ibmcloud is floating-ip-release $ZVSI_FP_NAME --force \ No newline at end of file diff --git a/Makefile b/Makefile index 01bf030e..8550d5f3 100644 --- a/Makefile +++ b/Makefile @@ -39,11 +39,12 @@ GOFILES := $(shell $(GOCMD) run tools$/lister$/main.go) all: test build package -build: build-linux-amd64 build-linux-arm64 build-windows-amd64 +build: build-linux-amd64 build-linux-arm64 build-windows-amd64 build-linux-s390x build-linux-amd64: build-linux-amd64-lifecycle build-linux-amd64-symlinks build-linux-amd64-launcher build-linux-arm64: build-linux-arm64-lifecycle build-linux-arm64-symlinks build-linux-arm64-launcher build-windows-amd64: build-windows-amd64-lifecycle build-windows-amd64-symlinks build-windows-amd64-launcher +build-linux-s390x: build-linux-s390x-lifecycle build-linux-s390x-symlinks build-linux-s390x-launcher build-image-linux-amd64: build-linux-amd64 package-linux-amd64 build-image-linux-amd64: ARCHIVE_PATH=$(BUILD_DIR)/lifecycle-v$(LIFECYCLE_VERSION)+linux.x86-64.tgz @@ -60,10 +61,17 @@ build-image-windows-amd64: ARCHIVE_PATH=$(BUILD_DIR)/lifecycle-v$(LIFECYCLE_VERS build-image-windows-amd64: $(GOCMD) run ./tools/image/main.go -daemon -lifecyclePath $(ARCHIVE_PATH) -os windows -arch amd64 -tag lifecycle:$(LIFECYCLE_IMAGE_TAG) +build-image-linux-s390x: build-linux-s390x package-linux-s390x +build-image-linux-s390x: ARCHIVE_PATH=$(BUILD_DIR)/lifecycle-v$(LIFECYCLE_VERSION)+linux.s390x.tgz +build-image-linux-s390x: + $(GOCMD) run ./tools/image/main.go -daemon -lifecyclePath $(ARCHIVE_PATH) -os linux -arch s390x -tag lifecycle:$(LIFECYCLE_IMAGE_TAG) + build-linux-amd64-lifecycle: $(BUILD_DIR)/linux-amd64/lifecycle/lifecycle build-linux-arm64-lifecycle: $(BUILD_DIR)/linux-arm64/lifecycle/lifecycle +build-linux-s390x-lifecycle: $(BUILD_DIR)/linux-s390x/lifecycle/lifecycle + $(BUILD_DIR)/linux-amd64/lifecycle/lifecycle: export GOOS:=linux $(BUILD_DIR)/linux-amd64/lifecycle/lifecycle: export GOARCH:=amd64 $(BUILD_DIR)/linux-amd64/lifecycle/lifecycle: OUT_DIR?=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle @@ -82,6 +90,15 @@ $(BUILD_DIR)/linux-arm64/lifecycle/lifecycle: mkdir -p $(OUT_DIR) $(GOENV) $(GOBUILD) -o $(OUT_DIR)/lifecycle -a ./cmd/lifecycle +$(BUILD_DIR)/linux-s390x/lifecycle/lifecycle: export GOOS:=linux +$(BUILD_DIR)/linux-s390x/lifecycle/lifecycle: export GOARCH:=s390x +$(BUILD_DIR)/linux-s390x/lifecycle/lifecycle: OUT_DIR?=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle +$(BUILD_DIR)/linux-s390x/lifecycle/lifecycle: $(GOFILES) +$(BUILD_DIR)/linux-s390x/lifecycle/lifecycle: + @echo "> Building lifecycle/lifecycle for $(GOOS)/$(GOARCH)..." + mkdir -p $(OUT_DIR) + $(GOENV) $(GOBUILD) -o $(OUT_DIR)/lifecycle -a ./cmd/lifecycle + build-linux-amd64-launcher: $(BUILD_DIR)/linux-amd64/lifecycle/launcher $(BUILD_DIR)/linux-amd64/lifecycle/launcher: export GOOS:=linux @@ -106,6 +123,18 @@ $(BUILD_DIR)/linux-arm64/lifecycle/launcher: $(GOENV) $(GOBUILD) -o $(OUT_DIR)/launcher -a ./cmd/launcher test $$(du -m $(OUT_DIR)/launcher|cut -f 1) -le 3 +build-linux-s390x-launcher: $(BUILD_DIR)/linux-s390x/lifecycle/launcher + +$(BUILD_DIR)/linux-s390x/lifecycle/launcher: export GOOS:=linux +$(BUILD_DIR)/linux-s390x/lifecycle/launcher: export GOARCH:=s390x +$(BUILD_DIR)/linux-s390x/lifecycle/launcher: OUT_DIR?=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle +$(BUILD_DIR)/linux-s390x/lifecycle/launcher: $(GOFILES) +$(BUILD_DIR)/linux-s390x/lifecycle/launcher: + @echo "> Building lifecycle/launcher for $(GOOS)/$(GOARCH)..." + mkdir -p $(OUT_DIR) + $(GOENV) $(GOBUILD) -o $(OUT_DIR)/launcher -a ./cmd/launcher + test $$(du -m $(OUT_DIR)/launcher|cut -f 1) -le 3 + build-linux-amd64-symlinks: export GOOS:=linux build-linux-amd64-symlinks: export GOARCH:=amd64 build-linux-amd64-symlinks: OUT_DIR?=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle @@ -134,6 +163,20 @@ build-linux-arm64-symlinks: ln -sf lifecycle $(OUT_DIR)/creator ln -sf lifecycle $(OUT_DIR)/extender +build-linux-s390x-symlinks: export GOOS:=linux +build-linux-s390x-symlinks: export GOARCH:=s390x +build-linux-s390x-symlinks: OUT_DIR?=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle +build-linux-s390x-symlinks: + @echo "> Creating phase symlinks for $(GOOS)/$(GOARCH)..." + ln -sf lifecycle $(OUT_DIR)/detector + ln -sf lifecycle $(OUT_DIR)/analyzer + ln -sf lifecycle $(OUT_DIR)/restorer + ln -sf lifecycle $(OUT_DIR)/builder + ln -sf lifecycle $(OUT_DIR)/exporter + ln -sf lifecycle $(OUT_DIR)/rebaser + ln -sf lifecycle $(OUT_DIR)/creator + ln -sf lifecycle $(OUT_DIR)/extender + build-windows-amd64-lifecycle: $(BUILD_DIR)/windows-amd64/lifecycle/lifecycle.exe $(BUILD_DIR)/windows-amd64/lifecycle/lifecycle.exe: export GOOS:=windows @@ -211,7 +254,7 @@ build-darwin-amd64-launcher: $(eval OUT_DIR := $(BUILD_DIR)/$(TARGET)/lifecycle) $(call build_launcher) -generate-sbom: run-syft-windows run-syft-linux-amd64 run-syft-linux-arm64 +generate-sbom: run-syft-windows run-syft-linux-amd64 run-syft-linux-arm64 run-syft-linux-s390x run-syft-windows: install-syft run-syft-windows: export GOOS:=windows @@ -237,6 +280,14 @@ run-syft-linux-arm64: syft $(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/lifecycle -o json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/lifecycle.sbom.syft.json -o spdx-json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/lifecycle.sbom.spdx.json -o cyclonedx-json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/lifecycle.sbom.cdx.json syft $(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/launcher -o json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/launcher.sbom.syft.json -o spdx-json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/launcher.sbom.spdx.json -o cyclonedx-json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/launcher.sbom.cdx.json +run-syft-linux-s390x: install-syft +run-syft-linux-s390x: export GOOS:=linux +run-syft-linux-s390x: export GOARCH:=s390x +run-syft-linux-s390x: + @echo "> Running syft..." + syft $(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/lifecycle -o json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/lifecycle.sbom.syft.json -o spdx-json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/lifecycle.sbom.spdx.json -o cyclonedx-json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/lifecycle.sbom.cdx.json + syft $(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/launcher -o json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/launcher.sbom.syft.json -o spdx-json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/launcher.sbom.spdx.json -o cyclonedx-json=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle/launcher.sbom.cdx.json + install-syft: @echo "> Installing syft..." curl -sSfL https://raw.githubusercontent.com/anchore/syft/main/install.sh | sh -s -- -b /usr/local/bin @@ -298,7 +349,7 @@ clean: @echo "> Cleaning workspace..." rm -rf $(BUILD_DIR) -package: generate-sbom package-linux-amd64 package-linux-arm64 package-windows-amd64 +package: generate-sbom package-linux-amd64 package-linux-arm64 package-windows-amd64 package-linux-s390x package-linux-amd64: GOOS:=linux package-linux-amd64: GOARCH:=amd64 @@ -318,6 +369,15 @@ package-linux-arm64: @echo "> Packaging lifecycle for $(GOOS)/$(GOARCH)..." $(GOCMD) run $(PACKAGER) --inputDir $(INPUT_DIR) -archivePath $(ARCHIVE_PATH) -descriptorPath $(LIFECYCLE_DESCRIPTOR_PATH) -version $(LIFECYCLE_VERSION) +package-linux-s390x: GOOS:=linux +package-linux-s390x: GOARCH:=s390x +package-linux-s390x: INPUT_DIR:=$(BUILD_DIR)/$(GOOS)-$(GOARCH)/lifecycle +package-linux-s390x: ARCHIVE_PATH=$(BUILD_DIR)/lifecycle-v$(LIFECYCLE_VERSION)+$(GOOS).s390x.tgz +package-linux-s390x: PACKAGER=./tools/packager/main.go +package-linux-s390x: + @echo "> Packaging lifecycle for $(GOOS)/$(GOARCH)..." + $(GOCMD) run $(PACKAGER) --inputDir $(INPUT_DIR) -archivePath $(ARCHIVE_PATH) -descriptorPath $(LIFECYCLE_DESCRIPTOR_PATH) -version $(LIFECYCLE_VERSION) + package-windows-amd64: GOOS:=windows package-windows-amd64: GOARCH:=amd64 package-windows-amd64: INPUT_DIR:=$(BUILD_DIR)$/$(GOOS)-$(GOARCH)$/lifecycle