|
1 | 1 | VERSION=v$(shell cat shared/version.txt) |
2 | | -LOCAL_OS=$(shell go env GOOS)-$(shell go env GOARCH) |
| 2 | +LOCAL_OS=$(shell go env GOOS) |
| 3 | +LOCAL_ARCH=$(shell go env GOARCH) |
| 4 | +# Needed for binary artifacts of format `rocketpool-cli-linux-amd64` |
| 5 | +LOCAL_TARGET=${LOCAL_OS}-${LOCAL_ARCH} |
| 6 | +# Needed for docker --platform arguments of format `linux/amd64` |
| 7 | +LOCAL_PLATFORM=${LOCAL_OS}/${LOCAL_ARCH} |
3 | 8 |
|
4 | 9 | BUILD_DIR=build |
5 | 10 | BIN_DIR=${BUILD_DIR}/${VERSION}/bin |
@@ -35,17 +40,17 @@ all: ${BUILD_DIR}/rocketpool-cli ${BUILD_DIR}/rocketpool-daemon ${BUILD_DIR}/tre |
35 | 40 | release: ${CLI_TARGET_STRINGS} ${DAEMON_TARGET_STRINGS} ${TREEGEN_TARGET_STRINGS} ${BUILD_DIR}/rocketpool-cli ${BUILD_DIR}/rocketpool-daemon ${BUILD_DIR}/treegen |
36 | 41 |
|
37 | 42 | # Target for build/rocketpool-cli which is a symlink to an os-specific build |
38 | | -${BUILD_DIR}/rocketpool-cli: ${BIN_DIR}/rocketpool-cli-${LOCAL_OS} |
39 | | - ln -sf $(shell pwd)/${BIN_DIR}/rocketpool-cli-${LOCAL_OS} ${BUILD_DIR}/rocketpool-cli |
| 43 | +${BUILD_DIR}/rocketpool-cli: ${BIN_DIR}/rocketpool-cli-${LOCAL_TARGET} |
| 44 | + ln -sf $(shell pwd)/${BIN_DIR}/rocketpool-cli-${LOCAL_TARGET} ${BUILD_DIR}/rocketpool-cli |
40 | 45 |
|
41 | 46 |
|
42 | 47 | # Target for build/rocketpool-daemon which is a symlink to an os-specific build |
43 | | -${BUILD_DIR}/rocketpool-daemon: ${BIN_DIR}/rocketpool-daemon-${LOCAL_OS} |
44 | | - ln -sf $(shell pwd)/${BIN_DIR}/rocketpool-daemon-${LOCAL_OS} ${BUILD_DIR}/rocketpool-daemon |
| 48 | +${BUILD_DIR}/rocketpool-daemon: ${BIN_DIR}/rocketpool-daemon-${LOCAL_TARGET} |
| 49 | + ln -sf $(shell pwd)/${BIN_DIR}/rocketpool-daemon-${LOCAL_TARGET} ${BUILD_DIR}/rocketpool-daemon |
45 | 50 |
|
46 | 51 | # Target for build/treegen which is a symlink to a version-specific build |
47 | | -${BUILD_DIR}/treegen: ${BIN_DIR}/treegen-${LOCAL_OS} |
48 | | - ln -sf $(shell pwd)/${BIN_DIR}/treegen-${LOCAL_OS} ${BUILD_DIR}/treegen |
| 52 | +${BUILD_DIR}/treegen: ${BIN_DIR}/treegen-${LOCAL_TARGET} |
| 53 | + ln -sf $(shell pwd)/${BIN_DIR}/treegen-${LOCAL_TARGET} ${BUILD_DIR}/treegen |
49 | 54 |
|
50 | 55 | # docker-builder container |
51 | 56 | .PHONY: docker-builder |
@@ -111,32 +116,27 @@ endif |
111 | 116 |
|
112 | 117 | # Multiarch builder |
113 | 118 | ${BUILD_DIR}/docker-buildx-builder: ${BUILD_DIR} |
114 | | - docker buildx create --name smartnode-builder --driver docker-container --platform linux/amd64,linux/arm64 |
| 119 | + docker buildx create --name smartnode-builder --driver docker-container --platform linux/amd64,linux/arm64 || true |
115 | 120 | touch ${BUILD_DIR}/docker-buildx-builder |
116 | 121 |
|
117 | 122 | # Docker containers |
118 | 123 | .PHONY: docker |
119 | 124 | docker: ${BUILD_DIR}/docker-buildx-builder |
120 | | - VERSION=${VERSION} docker bake --builder smartnode-builder -f docker/daemon-bake.hcl smartnode |
| 125 | + # override the platform so we can load the resulting image into docker |
| 126 | + VERSION=${VERSION} docker bake --builder smartnode-builder -f docker/daemon-bake.hcl smartnode --set "smartnode.platform=${LOCAL_PLATFORM}" |
121 | 127 |
|
122 | 128 | .PHONY: docker-push |
123 | | -docker-push: docker |
124 | | - echo |
125 | | - echo -n "Publishing smartnode:${VERSION} containers. Continue? [yN]: " && read ans && if [ $${ans:-'N'} != 'y' ]; then exit 1; fi |
126 | | - rm -rf ~/.docker/manifests/docker.io_rocketpool_smartnode-${VERSION} |
127 | | - docker push rocketpool/smartnode:${VERSION}-amd64 |
128 | | - docker push rocketpool/smartnode:${VERSION}-arm64 |
129 | | - docker manifest create rocketpool/smartnode:${VERSION} --amend rocketpool/smartnode:${VERSION}-amd64 --amend rocketpool/smartnode:${VERSION}-arm64 |
130 | | - docker manifest push --purge rocketpool/smartnode:${VERSION} |
| 129 | +docker-push: ${BUILD_DIR}/docker-buildx-builder |
| 130 | + echo -n "Building ${VERSION} and publishing containers. Continue? [yN]: " && read ans && if [ $${ans:-'N'} != 'y' ]; then exit 1; fi |
| 131 | + # override the output type to push to dockerhub |
| 132 | + VERSION=${VERSION} docker bake --builder smartnode-builder -f docker/daemon-bake.hcl smartnode --set "smartnode.output=type=registry" |
131 | 133 | echo "Done!" |
132 | 134 |
|
133 | 135 | .PHONY: docker-latest |
134 | | -docker-latest: docker-push |
135 | | - echo |
136 | | - echo -n "Publishing smartnode:${VERSION} as latest. Continue? [yN]: " && read ans && if [ $${ans:-'N'} != 'y' ]; then exit 1; fi |
137 | | - rm -rf ~/.docker/manifests/docker.io_rocketpool_smartnode-latest |
138 | | - docker manifest create rocketpool/smartnode:latest --amend rocketpool/smartnode:${VERSION}-amd64 --amend rocketpool/smartnode:${VERSION}-arm64 |
139 | | - docker manifest push --purge rocketpool/smartnode:latest |
| 136 | +docker-latest: ${BUILD_DIR}/docker-buildx-builder |
| 137 | + echo -n "Building ${VERSION}, tagging as latest, and publishing. Continue? [yN]: " && read ans && if [ $${ans:-'N'} != 'y' ]; then exit 1; fi |
| 138 | + # override the output type to push to dockerhub, and the tags array to tag latest |
| 139 | + VERSION=${VERSION} docker bake --builder smartnode-builder -f docker/daemon-bake.hcl smartnode --set "smartnode.output=type=registry" --set "smartnode.tags=rocketpool/smartnode:latest" |
140 | 140 |
|
141 | 141 | .PHONY: docker-prune |
142 | 142 | docker-prune: |
|
0 commit comments