|
1 | | -#!/bin/bash |
| 1 | +#!/usr/bin/env bash |
2 | 2 |
|
3 | | -display_usage() { |
4 | | - echo -e "Usage:\n\t$0 <version> \n\nExample:\n\t$0 45" |
5 | | -} |
| 3 | +# Usage: bin/run-wordpress [WORDPRESS_VERSION] [PHP_VERSION] |
| 4 | +# Example: bin/run-wordpress 67 82 |
6 | 5 |
|
7 | | -if [ -z "${WORDPRESS_VERSION}" ]; then |
8 | | - if [ $# -eq 0 ]; then |
9 | | - display_usage |
10 | | - exit 1 |
11 | | - fi |
| 6 | +# Ensure Docker CLI is installed. |
| 7 | +if ! command -v docker >/dev/null; then |
| 8 | + echo "Docker CLI is required." |
| 9 | + exit 1 |
| 10 | +fi |
| 11 | + |
| 12 | +WORDPRESS_VERSION_ENV="${1:-$WORDPRESS_VERSION}" |
| 13 | +PHP_VERSION_ENV="${2:-$PHP_VERSION}" |
| 14 | + |
| 15 | +# Parse WordPress version parameter |
| 16 | +if [[ "$WORDPRESS_VERSION_ENV" =~ ^[0-9]{2}$ ]]; then |
| 17 | + WORDPRESS_VERSION="${WORDPRESS_VERSION_ENV:0:1}.${WORDPRESS_VERSION_ENV:1:1}" |
| 18 | +else |
| 19 | + WORDPRESS_VERSION="$WORDPRESS_VERSION_ENV" |
| 20 | +fi |
| 21 | + |
| 22 | +# Exports as 8.2 |
| 23 | +export WORDPRESS_VERSION |
| 24 | +export WORDPRESS_VERSION_ENV |
| 25 | + |
| 26 | +# Parse WordPress version parameter |
| 27 | +if [[ "$PHP_VERSION_ENV" =~ ^[0-9]{2}$ ]]; then |
| 28 | + PHP_VERSION="${PHP_VERSION_ENV:0:1}.${PHP_VERSION_ENV:1:1}" |
| 29 | +else |
| 30 | + PHP_VERSION="$PHP_VERSION_ENV" |
| 31 | +fi |
| 32 | +# Exports as dot seperated: 5.6 |
| 33 | +export PHP_VERSION |
| 34 | +export PHP_VERSION_ENV |
| 35 | + |
| 36 | +: "${WORDPRESS_VERSION_ENV:=latest}" # default WordPress version shorthand |
| 37 | +: "${PHP_VERSION_ENV:=8.0}" # default PHP version shorthand |
12 | 38 |
|
13 | | - wp_version_input="$1" |
14 | | - php_version_input="$2" |
| 39 | +: "${WORDPRESS_PORT:=80${WORDPRESS_VERSION_ENV}}" |
| 40 | +export WORDPRESS_PORT |
15 | 41 |
|
16 | | - ## WordPress version ex. "6.7" |
17 | | - export WORDPRESS_VERSION_FULL="${wp_version_input:0:1}.${wp_version_input:1}" |
| 42 | +export COMPOSE_PROJECT_NAME="tinify_${WORDPRESS_VERSION_ENV}_${PHP_VERSION_ENV}" |
18 | 43 |
|
19 | | - ## WordPress version ex "67" |
20 | | - export WORDPRESS_VERSION="${wp_version_input}" |
| 44 | +DOCKERFILE_PATH="./config/docker/${WORDPRESS_VERSION_ENV}-${PHP_VERSION_ENV}.Dockerfile" |
| 45 | +if [ ! -f "$DOCKERFILE_PATH" ]; then |
| 46 | + echo "No Docker file available: $DOCKERFILE_PATH" |
| 47 | + exit 1 |
| 48 | +fi |
| 49 | + |
| 50 | +echo "Starting Docker environment with WordPress $WORDPRESS_VERSION and PHP $PHP_VERSION..." |
| 51 | +docker compose -f config/docker-compose.yml up -d |
| 52 | + |
| 53 | +echo "Installing WordPress..." |
21 | 54 |
|
22 | | - ## PHP Version ex "80" |
23 | | - export PHP_VERSION="${php_version_input}" |
| 55 | +docker compose -f config/docker-compose.yml run --rm --user root --no-TTY --env WORDPRESS_PORT --env WORDPRESS_VERSION wpcli bash <<EOF |
| 56 | +set -e |
| 57 | +
|
| 58 | +if [ ! -f wp-load.php ]; then |
| 59 | + echo "Downloading WordPress \${WORDPRESS_VERSION}..." |
| 60 | + TMP=\$(mktemp -d) |
| 61 | + curl -fsSL "http://wordpress.org/wordpress-\${WORDPRESS_VERSION}.tar.gz" | tar -xz -C "\$TMP" |
| 62 | + cp -R "\$TMP"/wordpress/* . |
| 63 | + rm -rf "\$TMP" |
| 64 | +fi |
24 | 65 |
|
25 | | - ## PHP Version ex "80" |
26 | | - export PHP_VERSION_FULL="${PHP_VERSION:0:1}.${PHP_VERSION:1}" |
27 | | - |
28 | | - echo "Starting WordPress ${WORDPRESS_VERSION_FULL} on PHP ${PHP_VERSION_FULL}" |
| 66 | +if [ ! -f wp-config.php ]; then |
| 67 | + wp config create --dbname=wordpress --dbuser=wordpress --dbpass=wordpress --dbhost=db --allow-root --skip-salts |
29 | 68 | fi |
30 | 69 |
|
31 | | -export WP_ENV_TESTS_PORT=80${WORDPRESS_VERSION} |
32 | | -export WP_ENV_CORE=WordPress/Wordpress#${WORDPRESS_VERSION_FULL} |
33 | | -export WP_ENV_PHP_VERSION=${PHP_VERSION_FULL} |
| 70 | +until wp db check --allow-root; do |
| 71 | + echo "DB not ready yet.." |
| 72 | + sleep 2 |
| 73 | +done |
34 | 74 |
|
35 | | -npx wp-env start || exit 1 |
| 75 | +wp db create --allow-root 2>/dev/null || true |
36 | 76 |
|
37 | | -echo "Installing compatible plugins.." |
| 77 | +if ! wp core is-installed --allow-root; then |
| 78 | + wp core install \ |
| 79 | + --url=http://localhost:${WORDPRESS_PORT} \ |
| 80 | + --title='My Site' \ |
| 81 | + --admin_user=admin \ |
| 82 | + --admin_password=password \ |
| 83 | + --admin_email=wordpress@example.com \ |
| 84 | + --skip-email \ |
| 85 | + --allow-root |
| 86 | + chown -R 33:33 wp-content/uploads/ |
| 87 | +else |
| 88 | + echo "WordPress already installed." |
| 89 | +fi |
| 90 | +EOF |
| 91 | + |
| 92 | +echo "Activating tinify.." |
| 93 | +docker compose -f config/docker-compose.yml run --rm wpcli wp plugin activate tiny-compress-images --allow-root |
38 | 94 |
|
39 | | -if [ "$WORDPRESS_VERSION" -ge 55 ]; then |
40 | | - echo "Installing compatible plugins for WordPress ${WORDPRESS_VERSION_FULL}.." |
41 | | - npx wp-env run tests-cli wp plugin install amazon-s3-and-cloudfront || exit 1 |
| 95 | +if [ "$WORDPRESS_VERSION_ENV" -ge 55 ]; then |
| 96 | + echo "Installing compatible plugins for WordPress ${WORDPRESS_PORT}.." |
| 97 | + docker compose -f config/docker-compose.yml run --rm --user 33 wpcli wp plugin install amazon-s3-and-cloudfront --activate --allow-root || exit 1 |
42 | 98 | fi |
43 | 99 |
|
44 | | -echo "To stop, run: bin/stop-wordpress" |
| 100 | +MAX_ATTEMPTS=10 |
| 101 | +ATTEMPT=0 |
| 102 | +until curl -s --head --fail "http://localhost:${WORDPRESS_PORT}" >/dev/null; do |
| 103 | + if [ $ATTEMPT -ge $MAX_ATTEMPTS ]; then |
| 104 | + echo "Timed out waiting for WordPress" |
| 105 | + exit 1 |
| 106 | + fi |
| 107 | + echo "Waiting for WordPress to be ready..." |
| 108 | + sleep 2 |
| 109 | + ATTEMPT=$((ATTEMPT + 1)) |
| 110 | +done |
| 111 | + |
| 112 | +echo "WordPress is ready at http://localhost:${WORDPRESS_PORT} (admin/password)" |
| 113 | +echo "To stop, run: bin/stop-wordpress ${WORDPRESS_VERSION_ENV} ${PHP_VERSION_ENV}" |
0 commit comments