Skip to content

Latest commit

 

History

History
350 lines (289 loc) · 9.91 KB

4_StepContextForBuildsSubchapter.md

File metadata and controls

350 lines (289 loc) · 9.91 KB

The build.yml file:

  1. Use supported actions version

    - uses: actions/checkout@v3
  2. PHP setup

         -
            name: Setup PHP
            uses: shivammathur/setup-php@v2
            with:
              php-version: "${{ matrix.php }}"
              extensions: intl
              tools: flex, symfony
              coverage: none
  3. Node setup

        -
          name: Setup Node
          uses: actions/setup-node@v4
          with:
            node-version: "${{ matrix.node }}"
  4. Shutdown default MySQL

        -
          name: Shutdown default MySQL
          run: sudo service mysql stop
  5. MySQL setup

        -
          name: Setup MySQL
          uses: mirromutth/[email protected]
          with:
            mysql version: "${{ matrix.mysql }}"
            mysql root password: "root"
  6. Output PHP version for Symfony CLI

        -
          name: Output PHP version for Symfony CLI
          run: php -v | head -n 1 | awk '{ print $2 }' > .php-version
  7. Certificates installation

        -
          name: Install certificates
          run: symfony server:ca:install
  8. Running Chrome Headless

       -
          name: Run Chrome Headless
          run: google-chrome-stable --enable-automation --disable-background-networking --no-default-browser-check --no-first-run --disable-popup-blocking --disable-default-apps --allow-insecure-localhost --disable-translate --disable-extensions --no-sandbox --enable-features=Metal --headless --remote-debugging-port=9222 --window-size=2880,1800 --proxy-server='direct://' --proxy-bypass-list='*' http://127.0.0.1 > /dev/null 2>&1 &
  9. Running webserver

        -
          name: Run webserver
          run: (cd tests/Application && symfony server:start --port=8080 --dir=public --daemon)
  10. Getting Composer cache directory

         -
           name: Get Composer cache directory
           id: composer-cache
           run: echo "dir=$(composer config cache-files-dir)" >> $GITHUB_OUTPUT
  11. Caching Composer

        -
          name: Cache Composer
          uses: actions/cache@v4
          with:
            path: ${{ steps.composer-cache.outputs.dir }}
            key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json **/composer.lock') }}
            restore-keys: |
               ${{ runner.os }}-php-${{ matrix.php }}-composer-
  12. Restricting Sylius version

        -
          name: Restrict Sylius version
          if: matrix.sylius != ''
          run: composer require "sylius/sylius:${{ matrix.sylius }}" --no-update --no-scripts --no-interaction
    
  13. Installing PHP dependencies

        -
          name: Install PHP dependencies
          run: composer install --no-interaction
          env:
              SYMFONY_REQUIRE: ${{ matrix.symfony }}
  14. Installing Behat driver

        -
         name: Install Behat driver
         run: vendor/bin/bdi browser:google-chrome drivers
  15. Getting Yarn cache directory

        -
          name: Get Yarn cache directory
          id: yarn-cache
          run: echo "dir=$(yarn cache dir)" >> $GITHUB_OUTPUT
  16. Caching Yarn

        -
          name: Cache Yarn
          uses: actions/cache@v4
          with:
            path: ${{ steps.yarn-cache.outputs.dir }}
            key: ${{ runner.os }}-node-${{ matrix.node }}-yarn-${{ hashFiles('**/package.json **/yarn.lock') }}
            restore-keys: |
              ${{ runner.os }}-node-${{ matrix.node }}-yarn-
  17. Installing JS dependencies

        -
          name: Install JS dependencies
          run: |
            (cd tests/Application && yarn install)
  18. Preparing test application database

       -
          name: Prepare test application database
          run: |
            (cd tests/Application && bin/console doctrine:database:create -vvv)
            (cd tests/Application && bin/console doctrine:schema:create -vvv)
  19. Preparing test application assets

        -
          name: Prepare test application assets
          run: |
            (cd tests/Application && bin/console assets:install public -vvv)
            (cd tests/Application && yarn build:prod)
  20. Preparing test application cache

        -
          name: Prepare test application cache
          run: (cd tests/Application && bin/console cache:warmup -vvv)
  21. Loading fixtures in test application

        -
          name: Load fixtures in test application
          run: (cd tests/Application && bin/console sylius:fixtures:load -n)
  22. Validating composer.json

        -
          name: Validate composer.json
          run: composer validate --ansi --strict
  23. Validating database schema

        -
          name: Validate database schema
          run: (cd tests/Application && bin/console doctrine:schema:validate)
  24. Running PHPSpec

        -
          name: Run PHPSpec
          run: vendor/bin/phpspec run --ansi -f progress --no-interaction
  25. Running PHPUnit

       -
          name: Run PHPUnit
          run: vendor/bin/phpunit --colors=always
  26. Running Behat

        -
          name: Run Behat
          run: vendor/bin/behat --colors --strict -vvv --no-interaction -f progress  || vendor/bin/behat --colors --strict -vvv --no-interaction -f progress --rerun
  27. Uploading Behat logs

        -
          name: Upload Behat logs
          uses: actions/upload-artifact@v3
          if: failure()
          with:
            name: Behat logs
            path: etc/build/
            if-no-files-found: ignore
  28. Sending information regarding failed build to Slack

         -
            name: Failed build Slack notification
            uses: rtCamp/action-slack-notify@v2
            if: ${{ failure() && (GithubBuilds.ref == 'refs/heads/main' || GithubBuilds.ref == 'refs/heads/master') }}
            env:
              SLACK_CHANNEL: ${{ secrets.FAILED_BUILD_SLACK_CHANNEL }}
              SLACK_COLOR: ${{ job.status }}
              SLACK_ICON: https://github.com/rtCamp.png?size=48
              SLACK_MESSAGE: ':x:'
              SLACK_TITLE: Failed build on ${{ GithubBuilds.event.repository.name }} repository
              SLACK_USERNAME: ${{ secrets.FAILED_BUILD_SLACK_USERNAME }}
              SLACK_WEBHOOK: ${{ secrets.FAILED_BUILD_SLACK_WEBHOOK }}

The coding_standard.yml file:

  1. Use supported actions version

    - uses: actions/checkout@v3
  2. PHP setup

    - name: Setup PHP
      uses: shivammathur/setup-php@v2
      with:
        php-version: "${{ matrix.php }}"
        extensions: intl
        tools: flex, symfony
        coverage: none
  3. Getting Composer cache directory

    - name: Get Composer cache directory
      id: composer-cache
      run: echo "::set-output name=dir::$(composer config cache-files-dir)"
  4. Caching Composer

    - name: Cache Composer
      uses: actions/cache@v4
      with:
        path: ${{ steps.composer-cache.outputs.dir }}
        key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.json **/composer.lock') }}
        restore-keys: |
          ${{ runner.os }}-php-${{ matrix.php }}-composer-
  5. Restricting Symfony version

    - name: Restrict Symfony version
      if: matrix.symfony != ''
      run: |
        composer global config --no-plugins allow-plugins.symfony/flex true
        composer global require --no-progress --no-scripts --no-plugins "symfony/flex:^1.10"
        composer config extra.symfony.require "${{ matrix.symfony }}"
  6. Restricting Sylius version

    - name: Restrict Sylius version
      if: matrix.sylius != ''
      run: composer require "sylius/sylius:${{ matrix.sylius }}" --no-update --no-scripts --no-interaction
  7. Installing PHP dependencies

    - name: Install PHP dependencies
      run: composer install --no-interaction
      env:
        SYMFONY_REQUIRE: ${{ matrix.symfony }}
  8. Running PHPStan

    - name: Run PHPStan src dir
      run: vendor/bin/phpstan analyse -c phpstan.neon -l 8 src/
  9. Running ECS

    - name: Run ECS
      run: vendor/bin/ecs
  10. Sending information regarding failed build to Slack

    - name: Failed build Slack notification
      uses: rtCamp/action-slack-notify@v2
      if: ${{ failure() && (github.ref == 'refs/heads/main' || github.ref == 'refs/heads/master') }}
      env:
        SLACK_CHANNEL: ${{ secrets.FAILED_BUILD_SLACK_CHANNEL }}
        SLACK_COLOR: ${{ job.status }}
        SLACK_ICON: https://github.com/rtCamp.png?size=48
        SLACK_MESSAGE: ':x:'
        SLACK_TITLE: Failed build on ${{ github.event.repository.name }} repository
        SLACK_USERNAME: ${{ secrets.FAILED_BUILD_SLACK_USERNAME }}
        SLACK_WEBHOOK: ${{ secrets.FAILED_BUILD_SLACK_WEBHOOK }}