Skip to content

Commit

Permalink
Speedup building docker images in CI
Browse files Browse the repository at this point in the history
  • Loading branch information
S7evinK committed Dec 18, 2024
1 parent a8d842b commit 49b9007
Show file tree
Hide file tree
Showing 9 changed files with 46 additions and 62 deletions.
31 changes: 19 additions & 12 deletions .github/workflows/docker.yml
Original file line number Diff line number Diff line change
Expand Up @@ -48,13 +48,25 @@ jobs:
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}

# Build until the "build" stage, this then can be used by other steps.
- name: Build "build" image
if: github.ref_name == 'main'
id: docker_build_monolith
uses: docker/build-push-action@v3
with:
target: build
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite:buildcache
cache-to: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite:buildcache,mode=max
context: .
platforms: ${{ env.PLATFORMS }}
push: true

- name: Build main monolith image
if: github.ref_name == 'main'
id: docker_build_monolith
uses: docker/build-push-action@v3
with:
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite-monolith:buildcache
cache-to: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite-monolith:buildcache,mode=max
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite:buildcache
context: .
platforms: ${{ env.PLATFORMS }}
push: true
Expand All @@ -67,8 +79,7 @@ jobs:
id: docker_build_monolith_release
uses: docker/build-push-action@v3
with:
cache-from: type=gha
cache-to: type=gha,mode=max
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite:buildcache
context: .
platforms: ${{ env.PLATFORMS }}
push: true
Expand Down Expand Up @@ -124,8 +135,7 @@ jobs:
id: docker_build_demo_pinecone
uses: docker/build-push-action@v3
with:
cache-from: type=gha
cache-to: type=gha,mode=max
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite:buildcache
context: .
file: ./build/docker/Dockerfile.demo-pinecone
platforms: ${{ env.PLATFORMS }}
Expand All @@ -139,8 +149,7 @@ jobs:
id: docker_build_demo_pinecone_release
uses: docker/build-push-action@v3
with:
cache-from: type=gha
cache-to: type=gha,mode=max
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite:buildcache
context: .
file: ./build/docker/Dockerfile.demo-pinecone
platforms: ${{ env.PLATFORMS }}
Expand Down Expand Up @@ -185,8 +194,7 @@ jobs:
id: docker_build_demo_yggdrasil
uses: docker/build-push-action@v3
with:
cache-from: type=gha
cache-to: type=gha,mode=max
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite:buildcache
context: .
file: ./build/docker/Dockerfile.demo-yggdrasil
platforms: ${{ env.PLATFORMS }}
Expand All @@ -200,8 +208,7 @@ jobs:
id: docker_build_demo_yggdrasil_release
uses: docker/build-push-action@v3
with:
cache-from: type=gha
cache-to: type=gha,mode=max
cache-from: type=registry,ref=ghcr.io/${{ env.GHCR_NAMESPACE }}/dendrite:buildcache
context: .
file: ./build/docker/Dockerfile.demo-yggdrasil
platforms: ${{ env.PLATFORMS }}
Expand Down
25 changes: 6 additions & 19 deletions build/docker/Dockerfile.demo-pinecone
Original file line number Diff line number Diff line change
@@ -1,29 +1,16 @@
FROM docker.io/golang:1.22-alpine AS base

#
# Needs to be separate from the main Dockerfile for OpenShift,
# as --target is not supported there.
#

RUN apk --update --no-cache add bash build-base

WORKDIR /build

COPY . /build

RUN mkdir -p bin
RUN go build -trimpath -o bin/ ./cmd/dendrite-demo-pinecone
RUN go build -trimpath -o bin/ ./cmd/create-account
RUN go build -trimpath -o bin/ ./cmd/generate-keys
FROM --platform=${BUILDPLATFORM} ghcr.io/element-hq/dendrite:buildcache AS build

FROM alpine:latest
RUN apk --update --no-cache add curl
LABEL org.opencontainers.image.title="Dendrite (Pinecone demo)"
LABEL org.opencontainers.image.description="Next-generation Matrix homeserver written in Go"
LABEL org.opencontainers.image.source="https://github.com/matrix-org/dendrite"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.licenses="AGPL-3.0-only OR LicenseRef-Element-Commercial"

COPY --from=base /build/bin/* /usr/bin/
COPY --from=build /out/create-account /usr/bin/create-account
COPY --from=build /out/generate-config /usr/bin/generate-config
COPY --from=build /out/generate-keys /usr/bin/generate-keys
COPY --from=build /out/dendrite-demo-pinecone /usr/bin/dendrite-demo-pinecone

VOLUME /etc/dendrite
WORKDIR /etc/dendrite
Expand Down
25 changes: 6 additions & 19 deletions build/docker/Dockerfile.demo-yggdrasil
Original file line number Diff line number Diff line change
@@ -1,28 +1,15 @@
FROM docker.io/golang:1.22-alpine AS base

#
# Needs to be separate from the main Dockerfile for OpenShift,
# as --target is not supported there.
#

RUN apk --update --no-cache add bash build-base

WORKDIR /build

COPY . /build

RUN mkdir -p bin
RUN go build -trimpath -o bin/ ./cmd/dendrite-demo-yggdrasil
RUN go build -trimpath -o bin/ ./cmd/create-account
RUN go build -trimpath -o bin/ ./cmd/generate-keys
FROM --platform=${BUILDPLATFORM} ghcr.io/element-hq/dendrite:buildcache AS build

FROM alpine:latest
LABEL org.opencontainers.image.title="Dendrite (Yggdrasil demo)"
LABEL org.opencontainers.image.description="Next-generation Matrix homeserver written in Go"
LABEL org.opencontainers.image.source="https://github.com/matrix-org/dendrite"
LABEL org.opencontainers.image.licenses="Apache-2.0"
LABEL org.opencontainers.image.licenses="AGPL-3.0-only OR LicenseRef-Element-Commercial"

COPY --from=base /build/bin/* /usr/bin/
COPY --from=build /out/create-account /usr/bin/create-account
COPY --from=build /out/generate-config /usr/bin/generate-config
COPY --from=build /out/generate-keys /usr/bin/generate-keys
COPY --from=build /out/dendrite-demo-yggdrasil /usr/bin/dendrite-demo-yggdrasil

VOLUME /etc/dendrite
WORKDIR /etc/dendrite
Expand Down
4 changes: 2 additions & 2 deletions build/docker/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ The `Dockerfile` is a multistage file which can build Dendrite. From the root of
repository, run:

```
docker build . -t matrixdotorg/dendrite-monolith
docker build -t ghcr.io/element-hq/dendrite-monolith:latest .
```

## Compose file
Expand All @@ -36,7 +36,7 @@ To generate keys:
```
docker run --rm --entrypoint="" \
-v $(pwd):/mnt \
matrixdotorg/dendrite-monolith:latest \
ghcr.io/element-hq/dendrite-monolith:latest \
/usr/bin/generate-keys \
-private-key /mnt/matrix_key.pem \
-tls-cert /mnt/server.crt \
Expand Down
2 changes: 1 addition & 1 deletion build/docker/docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ services:

monolith:
hostname: monolith
image: matrixdotorg/dendrite-monolith:latest
image: ghcr.io/element-hq/dendrite-monolith:latest
ports:
- 8008:8008
- 8448:8448
Expand Down
9 changes: 6 additions & 3 deletions build/docker/images-build.sh
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,9 @@ TAG=${1:-latest}

echo "Building tag '${TAG}'"

docker build . --target monolith -t matrixdotorg/dendrite-monolith:${TAG}
docker build . --target demo-pinecone -t matrixdotorg/dendrite-demo-pinecone:${TAG}
docker build . --target demo-yggdrasil -t matrixdotorg/dendrite-demo-yggdrasil:${TAG}
docker build -t ghcr.io/element-hq/dendrite:buildcache --target build .

docker build -t ghcr.io/element-hq/dendrite-monolith:${TAG} .

docker build -t ghcr.io/element-hq/dendrite-demo-yggdrasil:${TAG} -f build/docker/Dockerfile.demo-yggdrasil .
docker build -t ghcr.io/element-hq/dendrite-demo-pinecone:${TAG} -f build/docker/Dockerfile.demo-pinecone .
2 changes: 1 addition & 1 deletion build/docker/images-pull.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ TAG=${1:-latest}

echo "Pulling tag '${TAG}'"

docker pull matrixdotorg/dendrite-monolith:${TAG}
docker pull ghcr.io/element-hq/dendrite-monolith:${TAG}
2 changes: 1 addition & 1 deletion build/docker/images-push.sh
Original file line number Diff line number Diff line change
Expand Up @@ -4,4 +4,4 @@ TAG=${1:-latest}

echo "Pushing tag '${TAG}'"

docker push matrixdotorg/dendrite-monolith:${TAG}
docker push ghcr.io/element-hq/dendrite-monolith:${TAG}
8 changes: 4 additions & 4 deletions docs/installation/docker/1_docker.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,10 +24,10 @@ First we'll generate private key, which is used to sign events, the following wi
mkdir -p ./config
docker run --rm --entrypoint="/usr/bin/generate-keys" \
-v $(pwd)/config:/mnt \
matrixdotorg/dendrite-monolith:latest \
ghcr.io/element-hq/dendrite-monolith:latest \
-private-key /mnt/matrix_key.pem

# Windows equivalent: docker run --rm --entrypoint="/usr/bin/generate-keys" -v %cd%/config:/mnt matrixdotorg/dendrite-monolith:latest -private-key /mnt/matrix_key.pem
# Windows equivalent: docker run --rm --entrypoint="/usr/bin/generate-keys" -v %cd%/config:/mnt ghcr.io/element-hq/dendrite-monolith:latest -private-key /mnt/matrix_key.pem
```
(**NOTE**: This only needs to be executed **once**, as you otherwise overwrite the key)

Expand All @@ -41,13 +41,13 @@ to the docker-compose file (`services.postgres.environment` values):
mkdir -p ./config
docker run --rm --entrypoint="/bin/sh" \
-v $(pwd)/config:/mnt \
matrixdotorg/dendrite-monolith:latest \
ghcr.io/element-hq/dendrite-monolith:latest \
-c "/usr/bin/generate-config \
-dir /var/dendrite/ \
-db postgres://dendrite:itsasecret@postgres/dendrite?sslmode=disable \
-server YourDomainHere > /mnt/dendrite.yaml"

# Windows equivalent: docker run --rm --entrypoint="/bin/sh" -v %cd%/config:/mnt matrixdotorg/dendrite-monolith:latest -c "/usr/bin/generate-config -dir /var/dendrite/ -db postgres://dendrite:itsasecret@postgres/dendrite?sslmode=disable -server YourDomainHere > /mnt/dendrite.yaml"
# Windows equivalent: docker run --rm --entrypoint="/bin/sh" -v %cd%/config:/mnt ghcr.io/element-hq/dendrite-monolith:latest -c "/usr/bin/generate-config -dir /var/dendrite/ -db postgres://dendrite:itsasecret@postgres/dendrite?sslmode=disable -server YourDomainHere > /mnt/dendrite.yaml"
```

You can then change `config/dendrite.yaml` to your liking.
Expand Down

0 comments on commit 49b9007

Please sign in to comment.