Skip to content

Presentation 21/12/2021 - Introduction to git-hooks, GitHub, GitHub Actions and (Drupal) Best Practices. #3

@theodorosploumis

Description

@theodorosploumis

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 Add section for git-hook 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

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

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

Tools used for this presentation

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions