# 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}}'