-
Notifications
You must be signed in to change notification settings - Fork 14
/
Dockerfile
102 lines (92 loc) · 3.08 KB
/
Dockerfile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# syntax=docker/dockerfile:1
# Copyright 2022 Docker Packaging authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
ARG ALPINE_VERSION="3.16"
ARG NFPM_VERSION="v2.15.1"
ARG XX_VERSION="1.1.2"
ARG MODE="download"
# pkg matrix
ARG PKG_RELEASE="debian11"
ARG PKG_TYPE="deb"
ARG PKG_DISTRO="debian"
ARG PKG_SUITE="bullseye"
# cross compilation helper
FROM --platform=$BUILDPLATFORM tonistiigi/xx:${XX_VERSION} AS xx
# nFPM
FROM --platform=$BUILDPLATFORM golang:1.18-alpine AS nfpm
RUN apk add --no-cache git
ARG GO111MODULE="on"
ARG NFPM_VERSION
RUN go install github.com/goreleaser/nfpm/v2/cmd/nfpm@${NFPM_VERSION}
FROM --platform=$BUILDPLATFORM alpine:${ALPINE_VERSION} AS base
COPY --from=xx / /
RUN apk add --no-cache bash curl file git zip tar
FROM base AS src
WORKDIR /src
ARG COMPOSE_REPO
RUN git init . && git remote add origin "${COMPOSE_REPO}"
ARG COMPOSE_VERSION
RUN git fetch origin "${COMPOSE_VERSION}" +refs/heads/*:refs/remotes/origin/* +refs/tags/*:refs/tags/* && git checkout -q FETCH_HEAD
FROM scratch AS build
FROM base AS binary
WORKDIR /out
ARG MODE
ARG COMPOSE_VERSION
ARG TARGETOS
ARG TARGETARCH
ARG TARGETVARIANT
RUN --mount=from=build,target=/build <<EOL
set -e
BIN_EXT=$([ "$TARGETOS" = "windows" ] && echo ".exe" || true)
binArch=${TARGETARCH}
binArch=$([ "$binArch" = "amd64" ] && echo "x86_64" || echo "$binArch")
binArch=$([ "$binArch" = "arm64" ] && echo "aarch64" || echo "$binArch")
if [ "$MODE" = "download" ]; then
RELEASE_FILENAME="docker-compose-$TARGETOS-$binArch"
if [ -n "$TARGETVARIANT" ]; then
RELEASE_FILENAME="$RELEASE_FILENAME$TARGETVARIANT"
fi
(set -x ; wget -q "https://github.com/docker/compose/releases/download/${COMPOSE_VERSION}/${RELEASE_FILENAME}${BIN_EXT}" -qO "compose")
else
cp /build/docker-compose${BIN_EXT} compose
fi
chmod +x compose
xx-verify --static compose
EOL
FROM base AS build-pkg
WORKDIR /work
COPY --from=binary /out/compose /usr/bin/compose
ARG MODE
ARG COMPOSE_VERSION
ARG PKG_NAME
ARG PKG_RELEASE
ARG PKG_TYPE
ARG PKG_DISTRO
ARG PKG_SUITE
ARG PKG_PACKAGER
ARG PKG_VENDOR
ARG PKG_REVISION
ARG TARGETPLATFORM
RUN --mount=type=bind,source=internal/pkg-build.sh,target=/usr/local/bin/pkg-build \
--mount=type=bind,source=internal/nfpm.yml,target=nfpm.yml \
--mount=type=bind,from=src,source=/src,target=/src \
--mount=type=bind,from=nfpm,source=/go/bin/nfpm,target=/usr/bin/nfpm <<EOT
set -e
if [ "$MODE" != "download" ]; then
export COMPOSE_VERSION="$(git -C "/src" describe --match 'v[0-9]*' --dirty='.m' --always --tags)"
fi
OUTDIR=/out pkg-build
EOT
FROM scratch AS pkg
COPY --from=build-pkg /out /