Skip to content

Commit a218557

Browse files
authored
Merge pull request #6 from grimzy/refactor-into-functions
Refactored hooks into reusable functions
2 parents bb6cfb9 + 82c8b18 commit a218557

File tree

8 files changed

+224
-114
lines changed

8 files changed

+224
-114
lines changed

CHANGELOG.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,22 @@ This project adheres to [Semantic Versioning][semver].
88

99
Refer to master branch
1010

11+
## \[v1.1.2\] - 2019-10-19
12+
13+
### Refactor Hooks into Functions:
14+
- Refactored Docker hook scripts into reusable functions
15+
- Fix issue with short tags not being pushed
16+
- Fixed `make rm_build`
17+
- Removed source branch image name in templates
18+
1119
## \[v1.1.1\] - 2019-10-14
1220

1321
### Split PHP builds, PHP FPM, Latest tag:
1422
- Split builds by PHP version and variant
1523
- Use builds Docker hooks in Makefile
1624
- Added `fpm` variant
1725
- Now using `DOCKER_REPO` and `DOCKER_TAG` build variables
18-
- Push `latest` tags when building latest version (checks for Semantic Version in $SOURCE_BRANCH)
26+
- Push `latest` tags when building latest version (checks for Semantic Version in `$SOURCE_BRANCH`)
1927
- Set latest PHP version to 7.2 and variant to CLI
2028

2129
## \[v1.1.0\] - 2019-10-13

Makefile

+11-8
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
1+
# Build variables
22
# https://docs.docker.com/docker-hub/builds/advanced/#environment-variables-for-building-and-testing
33
SOURCE_BRANCH:=$(shell git rev-parse --abbrev-ref HEAD)
44
DOCKER_REPO=jestefane/php-dev
@@ -10,6 +10,7 @@ PHP_VERSIONS=5.5 5.6 7.0 7.1 7.2
1010
# Possible PHP variants: cli, fpm
1111
PHP_VARIANTS=cli fpm
1212

13+
# Script/Shortcut generation variables
1314
BIN_DIR=/usr/local/bin
1415
SCRIPTS_DIR=scripts
1516

@@ -34,13 +35,14 @@ post_push:
3435
.PHONY: rm_build
3536
rm_build:
3637
@{ \
37-
for php_version in $(PHP_VERSIONS); do \
38-
for php_variant in $(PHP_VARIANTS); do \
39-
image_name=$(DOCKER_REPO):$$php_version-$$php_variant-$(SOURCE_BRANCH); \
40-
echo Removing image: $$image_name; \
41-
docker rmi $$image_name || true; \
42-
done; \
43-
done; \
38+
. ./build/hooks/_common; \
39+
\
40+
PHP_VERSIONS="$(PHP_VERSIONS)" \
41+
PHP_VARIANTS="$(PHP_VARIANTS)" \
42+
SOURCE_BRANCH="$(SOURCE_BRANCH)" \
43+
DOCKER_REPO="$(DOCKER_REPO)" \
44+
DOCKER_TAG="$(DOCKER_TAG)" \
45+
loopVersionsVariants remove_image; \
4446
}
4547

4648
.PHONY: rebuild
@@ -60,6 +62,7 @@ scripts: rm_scripts_dir
6062
echo ">>> Script Composer $$php_version"; \
6163
sed $$regex template/composer.template > $(SCRIPTS_DIR)/composer-$$php_version; \
6264
done; \
65+
chmod +x $(SCRIPTS_DIR)/*; \
6366
}
6467

6568
.PHONY: rm_scripts_dir

README.md

+34-25
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
#### PHP Development Docker Images
22

3-
[![Docker Cloud Automated build][docker-cloud-automated]][docker-builds] [![Docker Cloud Build Status][docker-cloud-build]][docker-builds] [![Docker Pulls][docker-pulls]][docker-overview] [![Docker Stars][docker-stars]][docker-overview] [![MicroBadger Layers][microbadger-layers]][docker-overview] [![MicroBadger Size][microbadger-image-size]][docker-overview]
3+
[![Docker Cloud Automated build][docker-cloud-automated]][docker-builds] [![Docker Cloud Build Status][docker-cloud-build]][docker-builds] [![Docker Pulls][docker-pulls]][docker-overview] [![Docker Stars][docker-stars]][docker-overview] [![MicroBadger Layers][microbadger-layers]][microbadger-url] [![MicroBadger Size][microbadger-image-size]][microbadger-url]
44

55
> Super simple Docker images for PHP development.
66
@@ -26,7 +26,7 @@ $ docker pull jestefane/php-dev
2626
**Pull a specific version:**
2727

2828
```sh
29-
$ docker pull jestefane/php-dev:7.2-cli-1.1.1
29+
$ docker pull jestefane/php-dev:7.2-cli
3030
```
3131

3232
Pick between the various [images provided in this repository][images].
@@ -37,28 +37,34 @@ To use the Docker images more like binaries, we're providing [Shortcuts][shortcu
3737

3838
## Images
3939

40-
> Image names have the following format:
41-
>
42-
> ```
43-
> <docker repo>:<php version>-<php variant>-<github repo version>
44-
> ```
40+
Image names have the following format:
41+
42+
```
43+
<docker repo>:<php version>-<php variant>-<branch or version>
44+
```
45+
46+
For convenience, the latest stable version/variant is also tagged as:
47+
48+
```
49+
<docker repo>:<php version>-<php variant>
50+
```
4551

4652
### CLI
4753

4854
**Images names**:
4955

50-
- `jestefane/php-dev:5.5-cli-1.1.1`
51-
- `jestefane/php-dev:5.6-cli-1.1.1`
52-
- `jestefane/php-dev:7.0-cli-1.1.1`
53-
- `jestefane/php-dev:7.1-cli-1.1.1`
54-
- `jestefane/php-dev:7.2-cli-1.1.1`
56+
- `jestefane/php-dev:7.2-cli`
57+
- `jestefane/php-dev:7.1-cli`
58+
- `jestefane/php-dev:7.0-cli`
59+
- `jestefane/php-dev:5.6-cli`
60+
- `jestefane/php-dev:5.5-cli`
5561

5662
**Shortcuts**: [`php-cli`][php-cli-ref], [`composer`][composer-ref]
5763

5864
**Example**:
5965

6066
```bash
61-
$ docker run jestefane/php-dev:7.2-cli-1.1.1 hello-world.php
67+
$ docker run jestefane/php-dev:7.2-cli hello-world.php
6268

6369
# or using one of the provided shortcuts
6470
$ php-7.2-cli hello-world.php
@@ -68,18 +74,18 @@ $ php-7.2-cli hello-world.php
6874

6975
**Images names**:
7076

71-
- `jestefane/php-dev:5.5-fpm-1.1.1`
72-
- `jestefane/php-dev:5.6-fpm-1.1.1`
73-
- `jestefane/php-dev:7.0-fpm-1.1.1`
74-
- `jestefane/php-dev:7.1-fpm-1.1.1`
75-
- `jestefane/php-dev:7.2-fpm-1.1.1`
77+
- `jestefane/php-dev:5.5-fpm`
78+
- `jestefane/php-dev:5.6-fpm`
79+
- `jestefane/php-dev:7.0-fpm`
80+
- `jestefane/php-dev:7.1-fpm`
81+
- `jestefane/php-dev:7.2-fpm`
7682

7783
**Shortcuts**: [`php-fpm`][php-fpm-ref]
7884

7985
**Example**:
8086

8187
```bash
82-
$ docker run jestefane/php-dev:7.2-fpm-1.1.1 hello-world.php
88+
$ docker run jestefane/php-dev:7.2-fpm hello-world.php
8389

8490
# or using one of the provided shortcuts
8591
$ php-7.2-fpm hello-world.php
@@ -176,10 +182,12 @@ Script template: [template/composer.template][composer-template]
176182
| `BIN_DIR` | Directory in your `PATH` where you would like to symlink the scripts | `/usr/local/bin` | Any path on your system. Preferaby one already in your `PATH` |
177183
| `SCRIPTS_DIR` | Directory where the scripts are generated (or removed). Relative to the repository's root | `scripts` | Any path on your system |
178184

179-
> **Note**: When overriding space separated values from the CLI, you have to escape spaces. For example in `bash` you use `\`:
185+
> **Note**: When overriding space separated values from the CLI, you have to escape spaces. For example in `bash` you can use `\` or wrap your values in `"`:
180186
>
181187
> ```sh
182188
> $ make build PHP_VERSIONS=7.0\ 7.1\ 7.2 PHP_VARIANTS=cli\ fpm
189+
> # or
190+
> $ make build PHP_VERSIONS="7.0 7.1 7.2" PHP_VARIANTS="cli fpm"
183191
> ```
184192
185193
### Tasks
@@ -191,17 +199,17 @@ Locally builds all images from all possible combinations of `PHP_VERSIONS` and `
191199
**Command:**
192200
193201
```sh
194-
$ make build [PHP_VERSIONS=] [PHP_VARIANTS=] [SOURCE_BRANCH=] [DOCKER_TAG=] [DOCKER_REPO=]
202+
$ make build [PHP_VERSIONS=] [PHP_VARIANTS=] [SOURCE_BRANCH=] [DOCKER_TAG=] [DOCKER_REPO=] [DOCKER_TAG=]
195203
```
196204
197205
#### Remove the Images
198206

199-
Remove all locally cached images from all possible combinations of `PHP_VERSIONS` and `PHP_VARIANTS`.
207+
Remove all locally cached images from all possible combinations of `PHP_VERSIONS` and `PHP_VARIANTS`. The `DOCKER_TAG` is used to target a specific PHP version, variant.
200208

201209
**Command:**
202210

203211
```sh
204-
$ make rm_build [PHP_VERSIONS=] [PHP_VARIANTS=] [SOURCE_BRANCH=] [DOCKER_REPO=]
212+
$ make rm_build [PHP_VERSIONS=] [PHP_VARIANTS=] [SOURCE_BRANCH=] [DOCKER_TAG=] [DOCKER_REPO=]
205213
```
206214

207215
#### Rebuild the Images
@@ -287,8 +295,9 @@ $ make rm_dangling
287295
[docker-stars]: https://img.shields.io/docker/stars/jestefane/php-dev "Docker Stars"
288296
[docker-builds]: https://hub.docker.com/r/jestefane/php-dev/builds "Docker Builds"
289297
[docker-overview]: https://hub.docker.com/r/jestefane/php-dev "Docker Overview"
290-
[microbadger-layers]: https://img.shields.io/microbadger/layers/jestefane/php-dev/7.2-cli-1.1.1 "MicroBadger Layers"
291-
[microbadger-image-size]: https://img.shields.io/microbadger/image-size/jestefane/php-dev/7.2-cli-1.1.1 "MicroBadger Size"
298+
[microbadger-layers]: https://img.shields.io/microbadger/layers/jestefane/php-dev/latest "MicroBadger Layers"
299+
[microbadger-image-size]: https://img.shields.io/microbadger/image-size/jestefane/php-dev/latest "MicroBadger Size"
300+
[microbadger-url]: https://microbadger.com/images/jestefane/php-dev "MicroBadger Estefane/php-dev"
292301
[shortcuts]: #shortcuts "Shortcuts"
293302
[install-the-shortcuts]: #install-the-shortcuts "Install the Shortcuts"
294303
[docker-php]: https://hub.docker.com/_/php "Official Docker PHP Images"

build/hooks/_common

+90-30
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,96 @@
11
#!/usr/bin/env bash
22

3-
echo
4-
echo "************************************************"
5-
echo " Build/Testing Environment variables"
6-
echo "************************************************"
7-
echo "SOURCE_BRANCH: ${SOURCE_BRANCH}"
8-
echo "SOURCE_COMMIT: ${SOURCE_COMMIT}"
9-
echo "COMMIT_MSG: ${COMMIT_MSG}"
10-
echo "DOCKER_REPO: ${DOCKER_REPO}"
11-
echo "DOCKERFILE_PATH: ${DOCKERFILE_PATH}"
12-
echo "DOCKER_TAG: ${DOCKER_TAG}"
13-
echo "IMAGE_NAME: ${IMAGE_NAME}"
14-
echo "************************************************"
15-
echo "Available PHP_VERSIONS: ${PHP_VERSIONS}"
16-
echo "Available PHP_VARIANTS: ${PHP_VARIANTS}"
17-
echo "************************************************"
18-
echo
19-
20-
# extract version and variant from the DOCKER_TAG
21-
if [ -n "${DOCKER_TAG}" ]; then
22-
php_version="${DOCKER_TAG%%-*}"
23-
if [[ "${PHP_VERSIONS}" == *"$php_version"* ]]; then
24-
PHP_VERSIONS="$php_version"
25-
echo ">>> Set PHP_VERSIONS to: $PHP_VERSIONS"
3+
function echoEnvVars() {
4+
echo
5+
echo "************************************************"
6+
echo " Build/Testing Environment variables"
7+
echo "************************************************"
8+
echo "SOURCE_BRANCH: ${SOURCE_BRANCH}"
9+
echo "SOURCE_COMMIT: ${SOURCE_COMMIT}"
10+
echo "COMMIT_MSG: ${COMMIT_MSG}"
11+
echo "DOCKER_REPO: ${DOCKER_REPO}"
12+
echo "DOCKERFILE_PATH: ${DOCKERFILE_PATH}"
13+
echo "DOCKER_TAG: ${DOCKER_TAG}"
14+
echo "IMAGE_NAME: ${IMAGE_NAME}"
15+
echo "************************************************"
16+
echo "Available PHP_VERSIONS: ${PHP_VERSIONS}"
17+
echo "Available PHP_VARIANTS: ${PHP_VARIANTS}"
18+
echo "************************************************"
19+
echo
20+
}
21+
22+
# Loops
23+
function loopVersionsVariants() {
24+
echoEnvVars
25+
26+
if [ -n "${DOCKER_TAG}" ]; then
27+
php_version=$(getVersionFromDockerTag)
28+
php_variant=$(getVariantFromDockerTag)
29+
30+
checkForVersionVariant "$php_version" "$php_variant"
31+
$1 "$php_version" "$php_variant"
32+
else
33+
for php_version in $PHP_VERSIONS; do
34+
for php_variant in $PHP_VARIANTS; do
35+
checkForVersionVariant "$php_version" "$php_variant"
36+
$1 "$php_version" "$php_variant"
37+
done
38+
done
2639
fi
40+
}
2741

28-
php_variant="${DOCKER_TAG#*-}"
29-
php_variant=${php_variant%%-*}
30-
if [[ "${PHP_VARIANTS}" == *"$php_variant"* ]]; then
31-
PHP_VARIANTS="$php_variant"
32-
echo ">>> Set PHP_VARIANTS to: $PHP_VARIANTS"
42+
# extract version from $DOCKER_TAG
43+
function getVersionFromDockerTag() {
44+
if [ -n "$DOCKER_TAG" ]; then
45+
local php_version="${DOCKER_TAG%%-*}"
46+
if [[ "$PHP_VERSIONS" == *"$php_version"* ]]; then
47+
echo "$php_version"
48+
fi
3349
fi
34-
fi
50+
}
51+
52+
# extract variant from $DOCKER_TAG
53+
function getVariantFromDockerTag() {
54+
if [ -n "${DOCKER_TAG}" ]; then
55+
local trimed_left="${DOCKER_TAG#*-}"
56+
local php_variant=${trimed_left%%-*}
57+
if [[ "${PHP_VARIANTS}" == *"$php_variant"* ]]; then
58+
echo "$php_variant"
59+
fi
60+
fi
61+
}
62+
63+
# returns the IMAGE_NAME or generate one
64+
function getImageName() {
65+
local image_name="$IMAGE_NAME"
66+
if [ -z "$image_name" ]; then
67+
local php_version=$1
68+
local php_variant=$2
69+
local image_name="$DOCKER_REPO:$php_version-$php_variant"
70+
if [ -n "$SOURCE_BRANCH" ]; then
71+
image_name="$image_name-$SOURCE_BRANCH"
72+
fi
73+
fi
74+
echo "$image_name"
75+
}
76+
77+
# exits the script if either or are missing
78+
function checkForVersionVariant() {
79+
local php_version=$1
80+
local php_variant=$2
81+
82+
if [ -z "$php_version" ] || [ -z "$php_variant" ]; then
83+
echo "Missing php_version or php_variant"
84+
exit 1
85+
fi
86+
}
87+
88+
# Remove loally built images
89+
function remove_image() {
90+
local php_version=$1
91+
local php_variant=$2
3592

36-
echo
93+
image_name=$(getImageName "$php_version" "$php_variant")
94+
echo "Removing image: $image_name"
95+
docker rmi "$image_name" || true
96+
}

0 commit comments

Comments
 (0)