diff --git a/.circleci/config.yml b/.circleci/config.yml index 66b6c7b0b1af..9a0e9779188a 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -32,6 +32,9 @@ parameters: sdk_dispatch: type: boolean default: false + docker_publish_dispatch: + type: boolean + default: false orbs: go: circleci/go@1.8.0 @@ -316,7 +319,10 @@ jobs: - run: command: mkdir -p /tmp/docker_images - when: - condition: "<>" + condition: + or: + - "<>" + - "<>" steps: - gcp-cli/install - when: @@ -2093,7 +2099,10 @@ workflows: scheduled-docker-publish: when: - equal: [ build_hourly, <> ] + or: + - equal: [ build_hourly, <> ] + # Trigger on manual triggers if explicitly requested + - equal: [ true, << pipeline.parameters.docker_publish_dispatch >> ] jobs: - docker-build: name: op-node-docker-publish @@ -2104,6 +2113,11 @@ workflows: context: - oplabs-gcr - slack + - check-cross-platform: + name: op-node-cross-platform + op_component: op-node + requires: + - op-node-docker-publish - docker-build: name: op-batcher-docker-publish docker_name: op-batcher @@ -2113,6 +2127,11 @@ workflows: context: - oplabs-gcr - slack + - check-cross-platform: + name: op-batcher-cross-platform + op_component: op-batcher + requires: + - op-batcher-docker-publish - docker-build: name: op-program-docker-publish docker_name: op-program @@ -2122,6 +2141,11 @@ workflows: context: - oplabs-gcr - slack + - check-cross-platform: + name: op-program-cross-platform + op_component: op-program + requires: + - op-program-docker-publish - docker-build: name: op-proposer-docker-publish docker_name: op-proposer @@ -2131,6 +2155,11 @@ workflows: context: - oplabs-gcr - slack + - check-cross-platform: + name: op-proposer-cross-platform + op_component: op-proposer + requires: + - op-proposer-docker-publish - docker-build: name: op-challenger-docker-publish docker_name: op-challenger @@ -2140,6 +2169,11 @@ workflows: context: - oplabs-gcr - slack + - check-cross-platform: + name: op-challenger-cross-platform + op_component: op-challenger + requires: + - op-challenger-docker-publish - docker-build: name: op-dispute-mon-docker-publish docker_name: op-dispute-mon @@ -2149,6 +2183,11 @@ workflows: context: - oplabs-gcr - slack + - check-cross-platform: + name: op-dispute-mon-cross-platform + op_component: op-dispute-mon + requires: + - op-dispute-mon-docker-publish - docker-build: name: op-conductor-docker-publish docker_name: op-conductor @@ -2158,6 +2197,11 @@ workflows: context: - oplabs-gcr - slack + - check-cross-platform: + name: op-conductor-cross-platform + op_component: op-conductor + requires: + - op-conductor-docker-publish - docker-build: name: op-heartbeat-docker-publish docker_name: op-heartbeat @@ -2167,6 +2211,11 @@ workflows: context: - oplabs-gcr - slack + - check-cross-platform: + name: op-heartbeat-cross-platform + op_component: op-heartbeat + requires: + - op-heartbeat-docker-publish - docker-build: name: op-supervisor-docker-publish docker_name: op-supervisor @@ -2176,6 +2225,11 @@ workflows: context: - oplabs-gcr - slack + - check-cross-platform: + name: op-supervisor-cross-platform + op_component: op-supervisor + requires: + - op-supervisor-docker-publish - docker-build: name: chain-mon-docker-publish docker_name: chain-mon diff --git a/docker-bake.hcl b/docker-bake.hcl index 3fe9fabaf172..c96164e765ce 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -26,7 +26,7 @@ variable "IMAGE_TAGS" { variable "PLATFORMS" { // You can override this as "linux/amd64,linux/arm64". - // Only a specify a single platform when `--load` ing into docker. + // Only specify a single platform when `--load` ing into docker. // Multi-platform is supported when outputting to disk or pushing to a registry. // Multi-platform builds can be tested locally with: --set="*.output=type=image,push=false" default = "" diff --git a/op-batcher/Makefile b/op-batcher/Makefile index 24d719c3b106..8e680ec2bec1 100644 --- a/op-batcher/Makefile +++ b/op-batcher/Makefile @@ -25,7 +25,7 @@ ifeq ($(shell uname),Darwin) endif op-batcher: - env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/op-batcher ./cmd + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v $(LDFLAGS) -o ./bin/op-batcher ./cmd clean: rm bin/op-batcher diff --git a/op-challenger/Makefile b/op-challenger/Makefile index 315521610c10..1a7422a4c879 100644 --- a/op-challenger/Makefile +++ b/op-challenger/Makefile @@ -14,7 +14,7 @@ ifeq ($(shell uname),Darwin) endif op-challenger: - env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/op-challenger ./cmd + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v $(LDFLAGS) -o ./bin/op-challenger ./cmd fuzz: go test $(FUZZLDFLAGS) -run NOTAREALTEST -v -fuzztime 10s -fuzz FuzzKeccak ./game/keccak/matrix diff --git a/op-conductor/Makefile b/op-conductor/Makefile index 5021e5706af5..6360df3da0c8 100644 --- a/op-conductor/Makefile +++ b/op-conductor/Makefile @@ -8,7 +8,7 @@ LDFLAGSSTRING +=-X main.Version=$(VERSION) LDFLAGS := -ldflags "$(LDFLAGSSTRING)" op-conductor: - env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/op-conductor ./cmd + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v $(LDFLAGS) -o ./bin/op-conductor ./cmd clean: rm bin/op-conductor diff --git a/op-dispute-mon/Makefile b/op-dispute-mon/Makefile index 377eb59b2b7d..d94a0fa95a96 100644 --- a/op-dispute-mon/Makefile +++ b/op-dispute-mon/Makefile @@ -9,7 +9,7 @@ LDFLAGSSTRING +=-X github.com/ethereum-optimism/optimism/op-dispute-mon/version. LDFLAGS := -ldflags "$(LDFLAGSSTRING)" op-dispute-mon: - env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/op-dispute-mon ./cmd + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v $(LDFLAGS) -o ./bin/op-dispute-mon ./cmd .PHONY: op-dispute-mon clean: diff --git a/op-heartbeat/Makefile b/op-heartbeat/Makefile index 95d57b25c040..b1929e8f4de5 100644 --- a/op-heartbeat/Makefile +++ b/op-heartbeat/Makefile @@ -8,7 +8,7 @@ LDFLAGSSTRING +=-X main.Version=$(VERSION) LDFLAGS := -ldflags "$(LDFLAGSSTRING)" op-heartbeat: - env GO111MODULE=on go build -v $(LDFLAGS) -o ./bin/op-heartbeat ./cmd + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v $(LDFLAGS) -o ./bin/op-heartbeat ./cmd clean: rm bin/op-heartbeat diff --git a/op-node/Makefile b/op-node/Makefile index 4c4cb9b3e9c3..75b152b2d53e 100644 --- a/op-node/Makefile +++ b/op-node/Makefile @@ -26,7 +26,7 @@ ifeq ($(shell uname),Darwin) endif op-node: - env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/op-node ./cmd/main.go + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v $(LDFLAGS) -o ./bin/op-node ./cmd/main.go clean: rm bin/op-node diff --git a/op-plasma/Makefile b/op-plasma/Makefile index 38b921f8d17f..c98ea24c2095 100644 --- a/op-plasma/Makefile +++ b/op-plasma/Makefile @@ -8,7 +8,7 @@ LDFLAGSSTRING +=-X main.Version=$(VERSION) LDFLAGS := -ldflags "$(LDFLAGSSTRING)" da-server: - env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/da-server ./cmd/daserver + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v $(LDFLAGS) -o ./bin/da-server ./cmd/daserver clean: rm bin/da-server diff --git a/op-program/Makefile b/op-program/Makefile index 01d190171e3e..f9a5c1fd6da4 100644 --- a/op-program/Makefile +++ b/op-program/Makefile @@ -21,7 +21,7 @@ op-program: \ op-program-client-mips op-program-host: - env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v -ldflags "$(LDFLAGSSTRING)" -o ./bin/op-program ./host/cmd/main.go + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v -ldflags "$(LDFLAGSSTRING)" -o ./bin/op-program ./host/cmd/main.go op-program-client: env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v -ldflags "$(PC_LDFLAGSSTRING)" -o ./bin/op-program-client ./client/cmd/main.go diff --git a/op-proposer/Makefile b/op-proposer/Makefile index dff47b41d799..561d7d32f301 100644 --- a/op-proposer/Makefile +++ b/op-proposer/Makefile @@ -20,7 +20,7 @@ LDFLAGSSTRING +=-X main.Version=$(VERSION) LDFLAGS := -ldflags "$(LDFLAGSSTRING)" op-proposer: - env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/op-proposer ./cmd + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v $(LDFLAGS) -o ./bin/op-proposer ./cmd clean: rm bin/op-proposer diff --git a/op-supervisor/Makefile b/op-supervisor/Makefile index 1f58b6f02384..de4f2d9d2612 100644 --- a/op-supervisor/Makefile +++ b/op-supervisor/Makefile @@ -8,9 +8,8 @@ LDFLAGSSTRING +=-X main.Version=$(VERSION) LDFLAGSSTRING +=-X main.Meta=$(VERSION_META) LDFLAGS := -ldflags "$(LDFLAGSSTRING)" - op-supervisor: - env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) go build -v $(LDFLAGS) -o ./bin/op-supervisor ./cmd + env GO111MODULE=on GOOS=$(TARGETOS) GOARCH=$(TARGETARCH) CGO_ENABLED=0 go build -v $(LDFLAGS) -o ./bin/op-supervisor ./cmd clean: rm bin/op-supervisor diff --git a/ops/docker/op-stack-go/Dockerfile b/ops/docker/op-stack-go/Dockerfile index 848d5ecc720c..e372ec84a698 100644 --- a/ops/docker/op-stack-go/Dockerfile +++ b/ops/docker/op-stack-go/Dockerfile @@ -4,15 +4,13 @@ # TARGETARCH # TARGETPLATFORM # BUILDPLATFORM -ARG TARGETOS -ARG TARGETARCH # All target images use this as base image, and add the final build results. # It will default to the target platform. ARG TARGET_BASE_IMAGE=alpine:3.18 # We may be cross-building for another platform. Specify which platform we need as builder. -FROM --platform=$BUILDPLATFORM golang:1.21.3-alpine3.18 as builder +FROM --platform=$BUILDPLATFORM golang:1.21.3-alpine3.18 AS builder RUN apk add --no-cache make gcc musl-dev linux-headers git jq bash @@ -38,102 +36,97 @@ COPY . /app ARG GIT_COMMIT ARG GIT_DATE +ARG TARGETOS +ARG TARGETARCH + # separate docker-builds: # - proxyd # - any JS/TS/smart-contract builds -# TODO: if the build involves optional CGO, then: -# 1) we may have to disable CGO explicitly -# 3) apk install cross-build gcc, -# and specify to go to use that, with the CC flag - -ARG TARGETOS TARGETARCH - # Build the Go services, utilizing caches and share the many common packages. # The "id" defaults to the value of "target", the cache will thus be reused during this build. # "sharing" defaults to "shared", the cache will thus be available to other concurrent docker builds. -FROM --platform=$BUILDPLATFORM builder as cannon-builder +FROM --platform=$BUILDPLATFORM builder AS cannon-builder ARG CANNON_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd cannon && make cannon \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$CANNON_VERSION" -FROM --platform=$BUILDPLATFORM builder as op-program-builder +FROM --platform=$BUILDPLATFORM builder AS op-program-builder ARG OP_PROGRAM_VERSION=v0.0.0 # note: we only build the host, that's all the user needs. No Go MIPS cross-build in docker RUN --mount=type=cache,target=/root/.cache/go-build cd op-program && make op-program-host \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_PROGRAM_VERSION" -FROM --platform=$BUILDPLATFORM builder as op-heartbeat-builder +FROM --platform=$BUILDPLATFORM builder AS op-heartbeat-builder ARG OP_HEARTBEAT_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-heartbeat && make op-heartbeat \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_HEARTBEAT_VERSION" -FROM --platform=$BUILDPLATFORM builder as op-wheel-builder +FROM --platform=$BUILDPLATFORM builder AS op-wheel-builder ARG OP_WHEEL_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-wheel && make op-wheel \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_WHEEL_VERSION" -FROM --platform=$BUILDPLATFORM builder as op-node-builder +FROM --platform=$BUILDPLATFORM builder AS op-node-builder ARG OP_NODE_VERSION=v0.0.0 -RUN echo TARGETOS=$TARGETOS TARGETARCH=$TARGETARCH BUILDPLATFORM=$BUILDPLATFORM TARGETPLATFORM=$TARGETPLATFORM OP_NODE_VERSION=$OP_NODE_VERSION RUN --mount=type=cache,target=/root/.cache/go-build cd op-node && make op-node \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_NODE_VERSION" -FROM --platform=$BUILDPLATFORM builder as op-challenger-builder +FROM --platform=$BUILDPLATFORM builder AS op-challenger-builder ARG OP_CHALLENGER_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-challenger && make op-challenger \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_CHALLENGER_VERSION" -FROM --platform=$BUILDPLATFORM builder as op-dispute-mon-builder +FROM --platform=$BUILDPLATFORM builder AS op-dispute-mon-builder ARG OP_DISPUTE_MON_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-dispute-mon && make op-dispute-mon \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_DISPUTE_MON_VERSION" -FROM --platform=$BUILDPLATFORM builder as op-batcher-builder +FROM --platform=$BUILDPLATFORM builder AS op-batcher-builder ARG OP_BATCHER_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-batcher && make op-batcher \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_BATCHER_VERSION" -FROM --platform=$BUILDPLATFORM builder as op-proposer-builder +FROM --platform=$BUILDPLATFORM builder AS op-proposer-builder ARG OP_PROPOSER_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-proposer && make op-proposer \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_PROPOSER_VERSION" -FROM --platform=$BUILDPLATFORM builder as op-conductor-builder +FROM --platform=$BUILDPLATFORM builder AS op-conductor-builder ARG OP_CONDUCTOR_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-conductor && make op-conductor \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_CONDUCTOR_VERSION" -FROM --platform=$BUILDPLATFORM builder as da-server-builder +FROM --platform=$BUILDPLATFORM builder AS da-server-builder RUN --mount=type=cache,target=/root/.cache/go-build cd op-plasma && make da-server \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE -FROM --platform=$BUILDPLATFORM builder as op-supervisor-builder +FROM --platform=$BUILDPLATFORM builder AS op-supervisor-builder ARG OP_SUPERVISOR_VERSION=v0.0.0 RUN --mount=type=cache,target=/root/.cache/go-build cd op-supervisor && make op-supervisor \ GOOS=$TARGETOS GOARCH=$TARGETARCH GITCOMMIT=$GIT_COMMIT GITDATE=$GIT_DATE VERSION="$OP_SUPERVISOR_VERSION" -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as cannon-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS cannon-target COPY --from=cannon-builder /app/cannon/bin/cannon /usr/local/bin/ CMD ["cannon"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-program-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-program-target COPY --from=op-program-builder /app/op-program/bin/op-program /usr/local/bin/ CMD ["op-program"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-heartbeat-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-heartbeat-target COPY --from=op-heartbeat-builder /app/op-heartbeat/bin/op-heartbeat /usr/local/bin/ CMD ["op-heartbeat"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-wheel-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-wheel-target COPY --from=op-wheel-builder /app/op-wheel/bin/op-wheel /usr/local/bin/ CMD ["op-wheel"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-node-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-node-target COPY --from=op-node-builder /app/op-node/bin/op-node /usr/local/bin/ CMD ["op-node"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-challenger-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-challenger-target COPY --from=op-challenger-builder /app/op-challenger/bin/op-challenger /usr/local/bin/ # Make the bundled op-program the default cannon server COPY --from=op-program-builder /app/op-program/bin/op-program /usr/local/bin/ @@ -143,26 +136,26 @@ COPY --from=cannon-builder /app/cannon/bin/cannon /usr/local/bin/ ENV OP_CHALLENGER_CANNON_BIN /usr/local/bin/cannon CMD ["op-challenger"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-dispute-mon-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-dispute-mon-target COPY --from=op-dispute-mon-builder /app/op-dispute-mon/bin/op-dispute-mon /usr/local/bin/ CMD ["op-dispute-mon"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-batcher-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-batcher-target COPY --from=op-batcher-builder /app/op-batcher/bin/op-batcher /usr/local/bin/ CMD ["op-batcher"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-proposer-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-proposer-target COPY --from=op-proposer-builder /app/op-proposer/bin/op-proposer /usr/local/bin/ CMD ["op-proposer"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-conductor-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-conductor-target COPY --from=op-conductor-builder /app/op-conductor/bin/op-conductor /usr/local/bin/ CMD ["op-conductor"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as da-server-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS da-server-target COPY --from=da-server-builder /app/op-plasma/bin/da-server /usr/local/bin/ CMD ["da-server"] -FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE as op-supervisor-target +FROM --platform=$TARGETPLATFORM $TARGET_BASE_IMAGE AS op-supervisor-target COPY --from=op-supervisor-builder /app/op-supervisor/bin/op-supervisor /usr/local/bin/ -ENTRYPOINT ["op-supervisor"] +CMD ["op-supervisor"]