Skip to content

Commit 3acb848

Browse files
committed
Push to Docker Hub (#177)
1 parent dc0345c commit 3acb848

File tree

6 files changed

+74
-45
lines changed

6 files changed

+74
-45
lines changed

.github/workflows/continuous-integration-workflow.yml

+15-5
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
1-
name: Build and Test
2-
3-
on:
4-
[push, pull_request]
5-
1+
name: CI
2+
on: push
63
jobs:
74
ci:
85
runs-on: ubuntu-latest
@@ -91,3 +88,16 @@ jobs:
9188
env:
9289
CI_VERSION: ${{ matrix.version }}
9390
SKIP_CLEANUP: 1
91+
92+
- name: Login to Docker Hub
93+
if: ${{ github.ref == 'refs/heads/main' }}
94+
uses: docker/login-action@v3
95+
with:
96+
username: ${{ vars.DOCKER_HUB_USERNAME }}
97+
password: ${{ secrets.DOCKER_HUB_PERSONAL_ACCESS_TOKEN }}
98+
99+
- name: Push Docker image
100+
if: ${{ github.ref == 'refs/heads/main' }}
101+
run: ./push.sh
102+
env:
103+
CI_VERSION: ${{ matrix.version }}

build.sh

+17-17
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,16 @@
11
#!/usr/bin/env bash
22
source ./support.sh
3+
source ./versions.sh
34

45

56
build_cmd() {
67
docker build --build-arg "METEOR_VERSION=$1" --tag geoffreybooth/meteor-base:"$1" ./src
8+
if [[ $1 == $latest_version ]]; then
9+
if ! docker tag geoffreybooth/meteor-base:"$1" geoffreybooth/meteor-base:latest; then
10+
printf "${RED}Error tagging Docker base image for Meteor (latest version)${NC}\n"
11+
exit 1
12+
fi
13+
fi
714
}
815

916
build() {
@@ -12,29 +19,22 @@ build() {
1219
}
1320

1421

15-
source ./versions.sh
16-
17-
building_all_versions=true
18-
if [ -n "${CI_VERSION:-}" ]; then
19-
meteor_versions=( "${CI_VERSION:-}" )
20-
building_all_versions=false
21-
elif [[ "${1-x}" != x ]]; then
22-
meteor_versions=( "$1" )
23-
building_all_versions=false
24-
fi
25-
26-
27-
for version in "${meteor_versions[@]}"; do
22+
for version in "${versions[@]}"; do
2823
printf "${GREEN}Building Docker base image for Meteor ${version}...${NC}\n"
2924
if ! build $version; then
3025
printf "${RED}Error building Docker base image for Meteor ${version}${NC}\n"
3126
exit 1
3227
fi
3328
done
3429

35-
if [[ $building_all_versions ]]; then
36-
docker tag geoffreybooth/meteor-base:"${version}" geoffreybooth/meteor-base:latest
37-
printf "${GREEN}Success building Docker base images for all supported Meteor versions\n"
30+
31+
if [[ "${#versions[@]}" -eq 1 ]]; then
32+
printf "${GREEN}Success building Docker base image for Meteor ${versions}"
33+
if [[ "${versions[0]}" == $latest_version ]]; then
34+
printf " (latest version)\n"
35+
else
36+
printf "\n"
37+
fi
3838
else
39-
printf "${GREEN}Success building Docker base images for Meteor versions ${meteor_versions}\n"
39+
printf "${GREEN}Success building Docker base images for all supported Meteor versions\n"
4040
fi

push.sh

+20-7
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,31 @@
11
#!/usr/bin/env bash
22
source ./support.sh
3-
4-
53
source ./versions.sh
64

7-
for version in "${meteor_versions[@]}"; do
5+
6+
for version in "${versions[@]}"; do
87
printf "${GREEN}Pushing Docker base image for Meteor ${version}...${NC}\n"
98
if ! docker push geoffreybooth/meteor-base:"${version}"; then
109
printf "${RED}Error pushing Docker base image for Meteor ${version}${NC}\n"
1110
exit 1
1211
fi
12+
13+
if [[ $version == $latest_version ]]; then
14+
if ! docker push geoffreybooth/meteor-base:latest; then
15+
printf "${RED}Error pushing Docker base image for Meteor (latest version)${NC}\n"
16+
exit 1
17+
fi
18+
fi
1319
done
14-
if ! docker push geoffreybooth/meteor-base:latest; then
15-
printf "${RED}Error pushing Docker base image for Meteor (latest version)${NC}\n"
16-
exit 1
20+
21+
22+
if [[ "${#versions[@]}" -eq 1 ]]; then
23+
printf "${GREEN}Success pushing Docker base image for Meteor ${versions}"
24+
if [[ "${versions[0]}" == $latest_version ]]; then
25+
printf " (latest version)\n"
26+
else
27+
printf "\n"
28+
fi
29+
else
30+
printf "${GREEN}Success pushing Docker base images for all supported Meteor versions\n"
1731
fi
18-
printf "${GREEN}Success pushing Docker base images for all supported Meteor versions\n"

test.sh

+2-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/usr/bin/env bash
22
source ./support.sh
3+
source ./versions.sh
34

45

56
exit_code=0 # Keep global, so that code below can get return value of this function
@@ -12,18 +13,11 @@ run_with_suppressed_output () {
1213
fi
1314
}
1415

15-
source ./versions.sh
16-
17-
if [ -n "${CI_VERSION:-}" ]; then
18-
meteor_versions=( "$CI_VERSION" )
19-
elif [[ "${1-x}" != x ]]; then
20-
meteor_versions=( "$1" )
21-
fi
2216

2317
cd example
2418

2519
at_least_one_failure=false
26-
for version in "${meteor_versions[@]}"; do
20+
for version in "${versions[@]}"; do
2721
printf "${YELLOW}Testing Docker image geoffreybooth/meteor-base:${version}...${NC}\n"
2822
SECONDS=0
2923

update.sh

+7-8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#!/usr/bin/env bash
22
source ./support.sh
3+
source ./versions.sh
34

45

56
# Check for dependencies
@@ -58,25 +59,23 @@ done
5859

5960
# Update files for new Meteor version
6061

61-
source ./versions.sh
62-
newest_meteor_version="${meteor_versions[*]: -1}"
6362

64-
do_sed $"s| - '${newest_meteor_version}'| - '${newest_meteor_version}'\\n - '${new_meteor_version}'|" ./.github/workflows/continuous-integration-workflow.yml
63+
do_sed $"s| - '${latest_version}'| - '${latest_version}'\\n - '${new_meteor_version}'|" ./.github/workflows/continuous-integration-workflow.yml
6564

66-
do_sed "s|${newest_meteor_version}|${new_meteor_version}|g" ./README.md
65+
do_sed "s|${latest_version}|${new_meteor_version}|g" ./README.md
6766

68-
do_sed "s|${newest_meteor_version}|${new_meteor_version}|g" ./example/app-with-native-dependencies.dockerfile
67+
do_sed "s|${latest_version}|${new_meteor_version}|g" ./example/app-with-native-dependencies.dockerfile
6968

7069
# Skip ./example/app/.meteor/release because the Meteor update command below will change it
7170

72-
do_sed "s|${newest_meteor_version}|${new_meteor_version}|g" ./example/default.dockerfile
71+
do_sed "s|${latest_version}|${new_meteor_version}|g" ./example/default.dockerfile
7372

74-
do_sed $"s|'${newest_meteor_version}'|'${newest_meteor_version}' \\\\\n '${new_meteor_version}'|" ./versions.sh
73+
do_sed $"s|'${latest_version}'|'${latest_version}' \\\\\n '${new_meteor_version}'|" ./versions.sh
7574

7675

7776
# Update files for new Node version
7877

79-
set_node_version $newest_meteor_version # $node_version is the version of the current newest Meteor version, not the one being added
78+
set_node_version $latest_version # $node_version is the version of the current newest Meteor version, not the one being added
8079

8180
# For 14.21.4 <= $new_node_version < 18.0.0, we need to use the Meteor fork of the Node Docker image; else, we use the regular official Node Docker image
8281

versions.sh

+13
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#!/usr/bin/env bash
2+
13
# Versions to build this Docker image for
24
meteor_versions=( \
35
'1.9' \
@@ -62,3 +64,14 @@ meteor_versions=( \
6264
'3.0.4' \
6365
'3.1'
6466
)
67+
68+
latest_version="${meteor_versions[*]: -1}"
69+
70+
# Get the array of versions to loop through, either a particular single version passed in or all of the versions listed above
71+
if [ -n "${CI_VERSION:-}" ]; then
72+
versions=( "$CI_VERSION" )
73+
elif [[ "${1-x}" != x ]]; then
74+
versions=( "$1" )
75+
else
76+
versions=( "${meteor_versions[@]}" )
77+
fi

0 commit comments

Comments
 (0)