homepage/Taskfile.yml

131 lines
3.2 KiB
YAML

# https://taskfile.dev
version: '3'
vars:
USER_ID:
sh: id -u
GROUP_ID:
sh: id -g
PROJECT: "homepage"
PHP_IMAGE: "{{.PROJECT}}-php"
NODE_IMAGE: "{{.PROJECT}}-node"
DOCKER_COMMON_OPTS: >-
--rm
--interactive
--tty
--user {{.USER_ID}}:{{.GROUP_ID}}
--volume /etc/passwd:/etc/passwd:ro
--volume /etc/group:/etc/group:ro
--volume "./:/srv/app"
--workdir "/srv/app"
-e XDG_CONFIG_HOME=/srv/app/.config
-e XDG_CACHE_HOME=/srv/app/.cache
-e HOME=/srv/app/.home
tasks:
build-docker:
cmds:
- docker build --file docker/php/Dockerfile --tag "{{.PHP_IMAGE}}" .
- docker build --file docker/node/Dockerfile --tag "{{.NODE_IMAGE}}" .
composer:
cmds:
- docker run {{.DOCKER_COMMON_OPTS}} "{{.PHP_IMAGE}}" composer {{.CLI_ARGS}}
npm:
cmds:
- docker run {{.DOCKER_COMMON_OPTS}} "{{.NODE_IMAGE}}" npm {{.CLI_ARGS}}
sculpin:
cmds:
- docker run {{.DOCKER_COMMON_OPTS}} "{{.PHP_IMAGE}}" ./vendor/bin/sculpin {{.CLI_ARGS}}
shell-node:
cmds:
- docker run {{.DOCKER_COMMON_OPTS}} "{{.NODE_IMAGE}}" bash
install-dependencies:
cmds:
- task: composer
vars: { CLI_ARGS: "install" }
- task: npm
vars: { CLI_ARGS: "install" }
format-pages:
cmds:
- task: npm
vars: { CLI_ARGS: 'run format-md' }
format-assets:
cmds:
- task: npm
vars: { CLI_ARGS: 'run format-webpack' }
- task: npm
vars: { CLI_ARGS: 'run format-js' }
- task: npm
vars: { CLI_ARGS: 'run format-vue' }
- task: npm
vars: { CLI_ARGS: 'run format-style' }
format-php:
cmds:
- docker run {{.DOCKER_COMMON_OPTS}} "{{.PHP_IMAGE}}" php-cs-fixer fix
build-dev:
vars:
APP_OUTPUT_DIR: output_dev
NPM_SCRIPT: build
APP_ENV: dev
APP_URL: homepage.site
cmds:
- rm -rf ./{{.APP_OUTPUT_DIR}}/*
- task: npm
vars: { CLI_ARGS: 'run {{.NPM_SCRIPT}}' }
- task: sculpin
vars: { CLI_ARGS: 'generate --env="{{.APP_ENV}}" --url="{{.APP_URL}}" --no-interaction -vv' }
build-prod:
vars:
APP_OUTPUT_DIR: output_prod
NPM_SCRIPT: build-prod
APP_ENV: prod
APP_URL: https://vakhrushev.me
cmds:
- rm -rf ./{{.APP_OUTPUT_DIR}}/*
- task: npm
vars: { CLI_ARGS: 'run {{.NPM_SCRIPT}}' }
- task: sculpin
vars: { CLI_ARGS: 'generate --env="{{.APP_ENV}}" --url="{{.APP_URL}}" --no-interaction -vv' }
make-post:
vars:
POST_DATE:
sh: date +'%Y-%m-%d'
cmd: touch "source/_articles/{{.POST_DATE}}-new-post.md"
deploy:
vars:
COMMIT_HASH:
sh: git rev-parse --short HEAD
TIMESTAMP:
sh: date +%s
DOCKER_IMAGE: homepage-nginx:{{.COMMIT_HASH}}-{{.TIMESTAMP}}
cmds:
- task: build-prod
- docker build --pull --file docker/Dockerfile.nginx.prod --tag {{.DOCKER_IMAGE}} .
- task: deploy-with-ansible
vars:
DOCKER_IMAGE: '{{.DOCKER_IMAGE}}'
deploy-with-ansible:
internal: true
requires:
vars: [DOCKER_IMAGE]
dir: '/home/av/projects/private/pet-project-server'
cmd: ansible-playbook -i production.yml playbook-app-homepage.yml --extra-vars 'homepage_web_image={{.DOCKER_IMAGE}}'