Presentation 21/12/2021 - Introduction to git-hooks, GitHub, GitHub Actions and (Drupal) Best Practices.
theodorosploumis opened this issue · 0 comments
theodorosploumis commented
Introduction to git-hooks, GitHub, GitHub Actions and (Drupal) Best Practices.
About GitHub
- git GUI
- users, roles and permissions
- pull requests, code compare, code review
- Issues (can also integrate with Jira issues)
- Releases
- Markdown & documentation
- Dependabot security updates
- Show your work globally
- git flow setup
- 3rd party tools integrations
- Online IDE buttons (eg open on Gitpod etc)
- GitHub Codespaces + VSCode Remote Containers (upcoming)
- GitHub Actions (CI/CD)
About git-hooks
- Trigger on events like commit, push, pull, merge etc
- protected branches (from direct git push)
- run any command
- Examples: linting, validation, testing, git flow restrictions, commit message pattern, alert for debug code, conventional commits etc
- See more usage of git-hooks on theodorosploumis/notes#1
How to execute commands on Drupal projects
- bash scripts
- drush
- composer scripts
- cli wrapper (eg Robo)
- other PHP tools (phar, phing, make etc)
- hook_update_N on Drupal modules (once running commands)
- ...
This project tools
See https://github.com/theodorosploumis/drupal-actions#development.
Based on https://github.com/theodorosploumis/drupal-best-practices
- phpbrew, optional
- phpdotenv
- drush site aliases
- git-hooks from captainhook
- robo
- CHANGELOG.md
- ddev
- gitpod
- Composer drupal-scaffold overrides
- Composer scripts
- Composer message
- phpstan, phpunit, phpcs, cypress, (behat)
- GitHub Actions
Why setup a CI/CD process
- Validate, test code and functionality
- Automate deployments
- Allow new developers to contribute easily
- Educate new people to Drupal
- Reduce the need for tasks like (human) QA
- Allow to "dockerize" processes (dockerize once, use everywhere)
- Reproduce production environment
- See also: https://github.com/Lullabot/drupal9ci
GitHub Actions
- https://docs.github.com/en/actions.
- https://github.com/marketplace?query=&type=actions
- What is it (VMs, docker containers, commands, steps, triggers, yml files, variables, logs, builds, notifications)
- We use the VM on https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-README.md
- Similar to GitLab CI/CD, Bitbucket Pipelines, Circle CI, Travis CI etc
Development example
- acquire project (PHP 8, composer 2.x)
- start with ddev
- open local IDE
- make changes on module file (git-hooks fail on message error)
ddev ssh
- Example tests
ddev cypress open --browser chrome --config-file tests/cypress.json
- create a PR
- run GitHub Actions
- merge PR
- create relaease (CHANGELOG)
- open in Gitpod example
Final outcome
- Put your project restrictions on Composer
- Put your git related restrictions on git-hooks
- Use
.env
to store credentials and important variables - Try to not use duplicated commands. Each command should have a unique way to be executed
- Try to wrap scripts and commands with a tool (eg Robo)
- CI/CD commands should be as much as possible system agnostic (so they play on every new system)
- CI/CD commands should be able to run locally too
- Use a dockerized environment for local development (ddev, lando etc) and commit configuration on git
- Create your own docker images to have more control over development and testing
- "Dockerize" once, use everywhere (local development, CI/CD etc). See example ddev with GitHub Actions.
- Automate your CHANGELOG generation
- Document in markdown