Skip to content

Commit fe47544

Browse files
committed
Push docker manifest in CI for multi arch image
1 parent d563816 commit fe47544

19 files changed

+133
-98
lines changed

.github/workflows/ci.yaml

+40
Original file line numberDiff line numberDiff line change
@@ -106,3 +106,43 @@ jobs:
106106
with:
107107
name: release-packages
108108
path: ./release-packages
109+
110+
docker-amd64:
111+
runs-on: ubuntu-latest
112+
needs: linux-amd64
113+
steps:
114+
- uses: actions/checkout@v1
115+
- name: Download release package
116+
uses: actions/download-artifact@v2
117+
with:
118+
name: release-packages
119+
path: ./release-packages
120+
- name: Run ./ci/steps/build-docker-image.sh
121+
uses: ./ci/container
122+
with:
123+
args: ./ci/steps/build-docker-image.sh
124+
- name: Upload release image
125+
uses: actions/upload-artifact@v2
126+
with:
127+
name: release-images
128+
path: ./release-images
129+
130+
docker-arm64:
131+
runs-on: ubuntu-arm64-latest
132+
needs: linux-arm64
133+
steps:
134+
- uses: actions/checkout@v1
135+
- name: Download release package
136+
uses: actions/download-artifact@v2
137+
with:
138+
name: release-packages
139+
path: ./release-packages
140+
- name: Run ./ci/steps/build-docker-image.sh
141+
uses: ./ci/container
142+
with:
143+
args: ./ci/steps/build-docker-image.sh
144+
- name: Upload release image
145+
uses: actions/upload-artifact@v2
146+
with:
147+
name: release-images
148+
path: ./release-images

.github/workflows/publish.yaml

+10-20
Original file line numberDiff line numberDiff line change
@@ -13,29 +13,19 @@ jobs:
1313
uses: ./ci/container
1414
with:
1515
args: ./ci/steps/publish-npm.sh
16-
env:
17-
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
16+
env:
17+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
18+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
1819

19-
docker-amd64:
20+
docker:
2021
runs-on: ubuntu-latest
2122
steps:
2223
- uses: actions/checkout@v1
23-
- name: Run ./ci/steps/publish-docker.sh
24+
- name: Run ./ci/steps/push-docker-manifest.sh
2425
uses: ./ci/container
2526
with:
26-
args: ./ci/steps/publish-docker.sh
27-
env:
28-
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
29-
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
30-
31-
docker-arm64:
32-
runs-on: ubuntu-arm64-latest
33-
steps:
34-
- uses: actions/checkout@v1
35-
- name: Run ./ci/steps/publish-docker.sh
36-
uses: ./ci/container
37-
with:
38-
args: ./ci/steps/publish-docker.sh
39-
env:
40-
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
41-
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
27+
args: ./ci/steps/push-docker-manifest.sh
28+
env:
29+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
30+
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
31+
DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,5 @@ release/
66
release-static/
77
release-packages/
88
release-gcp/
9+
release-images/
910
node_modules

ci/README.md

+8-9
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,7 @@ Make sure you have `$GITHUB_TOKEN` set and [hub](https://github.com/github/hub)
2121
7. Publish the release
2222
1. CI will automatically grab the artifacts and then
2323
1. Publish the NPM package
24-
2. Publish the AMD64 docker image
25-
3. Publish the ARM64 docker image
24+
2. Publish the Docker Hub image
2625
8. Update the homebrew and AUR packages
2726

2827
## dev
@@ -100,10 +99,8 @@ You can disable minification by setting `MINIFY=`.
10099
This directory contains the release docker container.
101100

102101
- [./release-container/build.sh](./release-container/build.sh)
103-
- Builds the release container
102+
- Builds the release container with the tag `codercom/code-server:$VERSION-$ARCH`
104103
- Assumes debian releases are ready in `./release-packages`
105-
- [./release-container/push.sh](./release-container/push.sh)
106-
- Pushes the built release container to docker hub and updates the latest tag
107104

108105
## container
109106

@@ -129,7 +126,9 @@ Just helps avoid clobbering the CI configuration.
129126
- Contains helpers to download artifacts from github actions workflow runs
130127
- [./steps/publish-npm.sh](./steps/publish-npm.sh)
131128
- Grabs the `npm-package` release artifact for the current commit and publishes it on NPM
132-
- [./steps/publish-docker.sh](./steps/publish-docker.sh)
133-
- Grabs the `release-packages` release artifact for the current commit and
134-
builds a docker image with it and publishes that onto docker hub with the
135-
correct tag and updates latest
129+
- [./steps/build-docker-image.sh](./steps/build-docker-image.sh)
130+
- Builds the docker image and then saves it into `./release-images/$ARCH.tar`
131+
- [./steps/push-docker-manifest.sh](./steps/push-docker-manifest.sh)
132+
- Loads all images in `./release-images` and then builds and pushes a multi architecture
133+
docker manifest for the amd64 and arm64 images to `codercom/code-server:$VERSION` and
134+
`codercom/code-server:latest`

ci/build/build-packages.sh

+6-15
Original file line numberDiff line numberDiff line change
@@ -8,25 +8,16 @@ main() {
88
cd "$(dirname "${0}")/../.."
99
source ./ci/lib.sh
1010

11-
export VERSION
12-
VERSION="$(pkg_json_version)"
13-
14-
local OS
15-
OS="$(os)"
16-
17-
export ARCH
18-
ARCH="$(arch)"
19-
20-
local archive_name="code-server-$VERSION-$OS-$ARCH"
11+
local release_name="code-server-$VERSION-$OS-$ARCH"
2112
mkdir -p release-packages
2213

2314
if [[ $OS == "linux" ]]; then
24-
tar -czf "release-packages/$archive_name.tar.gz" --transform "s/^\.\/release-static/$archive_name/" ./release-static
15+
tar -czf "release-packages/$release_name.tar.gz" --transform "s/^\.\/release-static/$release_name/" ./release-static
2516
else
26-
tar -czf "release-packages/$archive_name.tar.gz" -s "/^release-static/$archive_name/" release-static
17+
tar -czf "release-packages/$release_name.tar.gz" -s "/^release-static/$release_name/" release-static
2718
fi
2819

29-
echo "done (release-packages/$archive_name)"
20+
echo "done (release-packages/$release_name)"
3021

3122
release_gcp
3223

@@ -37,9 +28,9 @@ main() {
3728

3829
release_gcp() {
3930
mkdir -p "release-gcp/$VERSION"
40-
cp "release-packages/$archive_name.tar.gz" "./release-gcp/$VERSION/$OS-$ARCH.tar.gz"
31+
cp "release-packages/$release_name.tar.gz" "./release-gcp/$VERSION/$OS-$ARCH.tar.gz"
4132
mkdir -p "release-gcp/latest"
42-
cp "./release-packages/$archive_name.tar.gz" "./release-gcp/latest/$OS-$ARCH.tar.gz"
33+
cp "./release-packages/$release_name.tar.gz" "./release-gcp/latest/$OS-$ARCH.tar.gz"
4334
}
4435

4536
# Generates deb and rpm packages.

ci/build/build-release.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ MINIFY="${MINIFY-true}"
88

99
main() {
1010
cd "$(dirname "${0}")/../.."
11-
source ./ci/build/lib.sh
11+
source ./ci/lib.sh
1212

1313
VSCODE_SRC_PATH="lib/vscode"
1414
VSCODE_OUT_PATH="$RELEASE_PATH/lib/vscode"

ci/build/build-static-release.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ set -euo pipefail
33

44
main() {
55
cd "$(dirname "${0}")/../.."
6-
source ./ci/build/lib.sh
6+
source ./ci/lib.sh
77

88
rsync "$RELEASE_PATH/" "$RELEASE_PATH-static"
99
RELEASE_PATH+=-static

ci/build/lib.sh

-10
This file was deleted.

ci/build/release-github-assets.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ main() {
1515
for i in "${!assets[@]}"; do
1616
assets[$i]="--attach=${assets[$i]}"
1717
done
18-
EDITOR=true hub release edit --draft "${assets[@]}" "v$(pkg_json_version)"
18+
EDITOR=true hub release edit --draft "${assets[@]}" "v$VERSION"
1919
}
2020

2121
main "$@"

ci/build/release-github-draft.sh

+2-2
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ main() {
99

1010
hub release create \
1111
--file - \
12-
--draft "${assets[@]}" "v$(pkg_json_version)" << EOF
13-
v$(pkg_json_version)
12+
--draft "${assets[@]}" "v$VERSION" << EOF
13+
v$VERSION
1414
1515
VS Code v$(vscode_version)
1616

ci/container/Dockerfile

+2
Original file line numberDiff line numberDiff line change
@@ -39,3 +39,5 @@ ENV PATH=/usr/local/go/bin:/root/go/bin:$PATH
3939
ENV GO111MODULE=on
4040
RUN go get mvdan.cc/sh/v3/cmd/shfmt
4141
RUN go get github.com/goreleaser/nfpm/cmd/nfpm
42+
43+
RUN curl -fsSL https://get.docker.com | sh

ci/lib.sh

+15
Original file line numberDiff line numberDiff line change
@@ -78,3 +78,18 @@ download_artifact() {
7878
unzip -o "$tmp_file" -d "$dst"
7979
rm "$tmp_file"
8080
}
81+
82+
rsync() {
83+
command rsync -a --del "$@"
84+
}
85+
86+
VERSION="$(pkg_json_version)"
87+
export VERSION
88+
ARCH="$(arch)"
89+
export ARCH
90+
OS=$(os)
91+
export OS
92+
93+
# RELEASE_PATH is the destination directory for the release from the root.
94+
# Defaults to release
95+
RELEASE_PATH="${RELEASE_PATH-release}"

ci/release-container/Dockerfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ RUN ARCH="$(dpkg --print-architecture)" && \
3535
printf "user: coder\ngroup: coder\n" > /etc/fixuid/config.yml
3636

3737
COPY release-packages/code-server*.deb /tmp/
38-
RUN dpkg -i /tmp/code-server*-$(dpkg --print-architecture).deb && rm /tmp/code-server*.deb
38+
RUN dpkg -i /tmp/code-server*$(dpkg --print-architecture).deb && rm /tmp/code-server*.deb
3939

4040
EXPOSE 8080
4141
USER coder

ci/release-container/build.sh

+1-4
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,8 @@ set -euo pipefail
44
main() {
55
cd "$(dirname "$0")/../.."
66
source ./ci/lib.sh
7-
VERSION="$(pkg_json_version)"
87

9-
imageTag="codercom/code-server:$VERSION"
10-
11-
docker build -t "$imageTag" -f ./ci/release-container/Dockerfile .
8+
docker build -t "codercom/code-server:$VERSION-$ARCH" -f ./ci/release-container/Dockerfile .
129
}
1310

1411
main "$@"

ci/release-container/push.sh

-16
This file was deleted.

ci/steps/build-docker-image.sh

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
main() {
5+
cd "$(dirname "$0")/../.."
6+
source ./ci/lib.sh
7+
8+
./ci/release-container/build.sh
9+
10+
mkdir -p release-images
11+
docker save "codercom/code-server:$VERSION-$ARCH" > "release-images/$ARCH.tar"
12+
}
13+
14+
main "$@"

ci/steps/publish-docker.sh

-17
This file was deleted.

ci/steps/push-docker-manifest.sh

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
4+
main() {
5+
cd "$(dirname "$0")/../.."
6+
source ./ci/lib.sh
7+
8+
download_artifact release-images ./release-images
9+
if [[ ${CI-} ]]; then
10+
echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin
11+
fi
12+
13+
for img in ./release-images/*; do
14+
docker load -i "$img"
15+
done
16+
17+
export DOCKER_CLI_EXPERIMENTAL=enabled
18+
docker manifest create "codercom/code-server:$VERSION" \
19+
"codercom/code-server:$VERSION-amd64" \
20+
"codercom/code-server:$VERSION-arm64"
21+
docker manifest push "codercom/code-server:$VERSION"
22+
23+
docker manifest create "codercom/code-server:latest" \
24+
"codercom/code-server:$VERSION-amd64" \
25+
"codercom/code-server:$VERSION-arm64"
26+
# docker manifest push "codercom/code-server:latest"
27+
}
28+
29+
main "$@"

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "code-server",
33
"license": "MIT",
4-
"version": "3.3.0",
4+
"version": "3.3.0-rc.27",
55
"description": "Run VS Code on a remote server.",
66
"homepage": "https://github.com/cdr/code-server",
77
"bugs": {

0 commit comments

Comments
 (0)