Skip to content

Commit

Permalink
Adding several improvements (#23)
Browse files Browse the repository at this point in the history
* Added improvements around Phinx and migrations
* Created Franken as our main PHP source
* Rewrote the Makefile to use the CLI and work properly
  • Loading branch information
sarah-savage authored Oct 18, 2024
1 parent 95c2208 commit f5e7347
Show file tree
Hide file tree
Showing 14 changed files with 751 additions and 214 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/run-checks.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jobs:
- uses: actions/checkout@v4

- name: Build container
run: docker build --target dev -t aspirepress/aspirecloud-php -f ./docker/webapp-frankenphp/Dockerfile .
run: docker build --target dev -t aspirepress/aspirecloud-php -f ./docker/webapp/Dockerfile .

- name: Install Composer dependencies
run: docker run --rm -v $(pwd):/var/www/html aspirepress/aspirecloud-php sh -c "composer install"
Expand All @@ -22,4 +22,4 @@ jobs:
run: docker run --rm -v $(pwd):/var/www/html aspirepress/aspirecloud-php sh -c "./vendor/bin/phpstan --memory-limit=1G analyse"

- name: Run unit tests
run: docker run --rm -v $(pwd):/var/www/html aspirepress/aspirecloud-php sh -c "./vendor/bin/phpunit --testsuite=unit"
run: docker run --rm -v $(pwd):/var/www/html aspirepress/aspirecloud-php sh -c "./vendor/bin/phpunit --testsuite=unit"
69 changes: 33 additions & 36 deletions Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -17,111 +17,108 @@ ifneq (,$(wildcard ./.env))
export
endif

ifeq ($(AP_COMPOSE_STACK),frankenphp)
COMPOSE_FILE := docker-compose.frankenphp.yml
else
COMPOSE_FILE := docker-compose.yml
endif

list:
@grep -E '^[a-zA-Z%_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

init: down clean build network up install-composer reset-database devmode-enable ## Initial configuration tasks

build: ## Builds the Docker containers
docker compose -f $(COMPOSE_FILE) build
docker compose build

clean: ## Remove all Docker containers, volumes, etc
docker compose -f $(COMPOSE_FILE) down -v --remove-orphans
docker compose -f $(COMPOSE_FILE) rm -f
docker compose down -v --remove-orphans
docker compose rm -f
rm -fr ./vendor

up: ## Starts the Docker containers
docker compose -f $(COMPOSE_FILE) up -d
docker compose up -d

down: ## Stops the Docker containers
docker compose -f $(COMPOSE_FILE) down
docker compose down

unit: ## Run unit tests
docker compose -f $(COMPOSE_FILE) run --rm webapp bash -c "vendor/bin/phpunit --testsuite=unit ${OPTS}"
docker compose run --rm cli bash -c "vendor/bin/phpunit --testsuite=unit ${OPTS}"

functional: ## Run functional tests
docker compose -f $(COMPOSE_FILE) run --rm webapp bash -c "vendor/bin/phpunit --testsuite=functional ${OPTS}"
docker compose run --rm cli bash -c "vendor/bin/phpunit --testsuite=functional ${OPTS}"

test: unit functional acceptance ## Run all tests

acceptance: ## Run acceptance tests
docker compose -f $(COMPOSE_FILE) run --rm webapp bash -c "vendor/bin/behat -vvv ${OPTS}"
docker compose run --rm cli bash -c "vendor/bin/behat -vvv ${OPTS}"

quality: ## Run all quality checks
docker compose -f $(COMPOSE_FILE) run --rm webapp bash -c "vendor/bin/phpstan ${OPTS}"
docker compose run --rm cli bash -c "vendor/bin/phpstan ${OPTS}"

quality-baseline: ## Run all static analysis checks with baseline
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phpstan analyse -b baseline.neon $(PHPSTAN_XDEBUG) src tests
docker compose run --rm cli vendor/bin/phpstan analyse -b baseline.neon $(PHPSTAN_XDEBUG) src tests

install-composer: ## Install composer dependencies
docker compose -f $(COMPOSE_FILE) run --rm webapp bash -c "composer install"
docker compose run --rm cli bash -c "composer install"

logs-%: ## View logs (follow mode) for the container where % is a service name (webapp, postgres, node, nginx, smtp, rabbitmq)
docker compose -f $(COMPOSE_FILE) logs -f $*
docker compose logs -f $*

sh-webapp: # webapp is alpine, so we need to use sh, not sh
docker compose -f $(COMPOSE_FILE) exec webapp sh
docker compose exec webapp sh

sh-cli: # webapp is alpine, so we need to use sh, not sh
docker compose run --rm cli sh

sh-%: ## Execute shell for the container where % is a service name (webapp, postgres, node, nginx, smtp, rabbitmq)
docker compose -f $(COMPOSE_FILE) exec $* sh || docker compose -f $(COMPOSE_FILE) run --rm $* sh
docker compose exec $* sh || docker compose run --rm $* sh

clear-cache: ## Clear cache
docker compose -f $(COMPOSE_FILE) run --rm webapp rm -f data/cache/config-cache.php
docker compose run --rm cli rm -f data/cache/config-cache.php
rm -rf public/build/

check: cs-fix quality test ## Check all quality and test elements

cs: ## Run code style checks
docker compose -f $(COMPOSE_FILE) run --rm webapp bash -c "vendor/bin/phpcs ${OPTS}"
docker compose run --rm cli bash -c "vendor/bin/phpcs ${OPTS}"

cs-fix: ## Fix code style issues
docker compose -f $(COMPOSE_FILE) run --rm webapp bash -c "vendor/bin/phpcbf ${OPTS} && vendor/bin/phpcs ${OPTS}"
docker compose run --rm cli bash -c "vendor/bin/phpcbf ${OPTS} && vendor/bin/phpcs ${OPTS}"

create-migration: ## Create a new database migration
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phinx create ${OPTS} -c vendor/aspirepress/aspirecloud-migrations/phinx.php
docker compose run --rm cli vendor/bin/phinx create ${OPTS} -c vendor/aspirepress/aspirecloud-migrations/phinx.php

create-seed: ## Create a new database seed
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phinx seed:create ${OPTS} -c vendor/aspirepress/aspirecloud-migrations/phinx.php
docker compose run --rm cli vendor/bin/phinx seed:create ${OPTS} -c vendor/aspirepress/aspirecloud-migrations/phinx.php

migrate: ## Run database migrations
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phinx migrate -c vendor/aspirepress/aspirecloud-migrations/phinx.php
docker compose run --rm cli vendor/bin/phinx migrate -c vendor/aspirepress/aspirecloud-migrations/phinx.php

migration-rollback: ## Rollback database migrations
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phinx rollback -e development -c vendor/aspirepress/aspirecloud-migrations/phinx.php
docker compose run --rm cli vendor/bin/phinx rollback -e development -c vendor/aspirepress/aspirecloud-migrations/phinx.php

seed: ## Run database seeds
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phinx seed:run -c vendor/aspirepress/aspirecloud-migrations/phinx.php
docker compose run --rm cli vendor/bin/phinx seed:run -c vendor/aspirepress/aspirecloud-migrations/phinx.php

devmode-enable: ## Enable the PHP development mode
docker compose -f $(COMPOSE_FILE) run --rm webapp composer development-enable
docker compose run --rm cli composer development-enable

devmode-disable: ## Disable the PHP development mode
docker compose -f $(COMPOSE_FILE) run --rm webapp composer development-disable
docker compose run --rm cli composer development-disable

_empty-database: # internal target to empty database
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phinx migrate -c vendor/aspirepress/aspirecloud-migrations/phinx.php -t 0
docker compose run --rm cli vendor/bin/phinx migrate -c vendor/aspirepress/aspirecloud-migrations/phinx.php -t 0

migrate-testing: ## Run database migrations
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phinx migrate -e testing -c vendor/aspirepress/aspirecloud-migrations/phinx.php
docker compose run --rm cli vendor/bin/phinx migrate -e testing -c vendor/aspirepress/aspirecloud-migrations/phinx.php

seed-testing: ## Run database seeds
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phinx seed:run -e testing -c vendor/aspirepress/aspirecloud-migrations/phinx.php
docker compose run --rm cli vendor/bin/phinx seed:run -e testing -c vendor/aspirepress/aspirecloud-migrations/phinx.php

_empty-testing-database: # internal target to empty database
docker compose -f $(COMPOSE_FILE) run --rm webapp vendor/bin/phinx migrate -e testing -c vendor/aspirepress/aspirecloud-migrations/phinx.php -t 0
docker compose run --rm cli vendor/bin/phinx migrate -e testing -c vendor/aspirepress/aspirecloud-migrations/phinx.php -t 0

reset-database: _empty-database migrate seed ## Clean database, run migrations and seeds

reset-testing-database: _empty-testing-database migrate-testing seed-testing

run-pgsql: ## Runs Postgres on the command line using the .env file variables
docker compose -f $(COMPOSE_FILE) run --rm webapp sh -c "export PGPASSWORD=${DB_PASS} && psql -U ${DB_USER} -h ${DB_HOST} -d ${DB_NAME}"
docker compose run --rm cli sh -c "export PGPASSWORD=${DB_PASS} && psql -U ${DB_USER} -h ${DB_HOST} -d ${DB_NAME}"

network: ## Create docker networks for app and traefik proxy (if they don't exist already)
bin/create-external-network.sh wp-services
Expand All @@ -131,7 +128,7 @@ rm-network: ## Remove application docker network. (traefik
-bin/remove-external-network.sh wp-services

build-prod:
docker build --target prod -t aspirepress/aspirecloud-php -f ./docker/webapp-frankenphp/Dockerfile .
docker build --target prod -t aspirepress/aspirecloud-php -f ./docker/webapp/Dockerfile .

traefik-up: network
docker compose -f docker/traefik/docker-compose.yml up -d
Expand Down
10 changes: 9 additions & 1 deletion composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,18 @@
"description": "The skeleton application for the Laravel framework.",
"keywords": ["laravel", "framework"],
"license": "MIT",
"repositories": [
{
"type": "vcs",
"url": "https://github.com/aspirepress/aspirecloud-migrations.git"
}
],
"require": {
"php": "^8.2",
"aspirepress/aspirecloud-migrations": "dev-main",
"laravel/framework": "^11.9",
"laravel/tinker": "^2.9"
"laravel/tinker": "^2.9",
"robmorgan/phinx": "^0.16.5"
},
"require-dev": {
"fakerphp/faker": "^1.23",
Expand Down
Loading

0 comments on commit f5e7347

Please sign in to comment.