GitHub Actions

GitHub Actions is a continuous integration platform that comes with GitHub.

Integrating Blackfire with GitHub Actions enables running Blackfire tests and scenarios, through PHPUnit tests, the Blackfire Player, or the Blackfire CLI Tool. It also makes it possible to trigger Blackfire builds.

GitHub Actions support is available, via the setup-php action.

While this action is designed for PHP, it installs all needed components, making Blackfire usable by apps written in any language supported by Blackfire (Python, Go...).

To set up Blackfire on GitHub Actions, you need to define some secret variables in your project settings.

Define secrets for your Client credentials:

Loading...

Define secrets for the Server credentials. Select the Blackfire environment which you want to use for your GitHub Actions-triggered tests:

Loading...

Within your workflow, configure each job where you need Blackfire:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Setup Blackfire via setup-php Action
      uses: shivammathur/setup-php@v2
      with:
        # PHP Only: Setup PHP extensions, including Blackfire Probe.
        # It is recommended to disable xdebug.
        # Not needed for other languages.
        extensions: blackfire, :xdebug
        # Setup Blackfire Agent and CLI tool, and Blackfire Player
        tools: blackfire, blackfire-player
      env:
        # Expose your Blackfire credentials stored in secrets
        # as environment variables.
        BLACKFIRE_SERVER_ID: ${{ secrets.BLACKFIRE_SERVER_ID }}
        BLACKFIRE_SERVER_TOKEN: ${{ secrets.BLACKFIRE_SERVER_TOKEN }}
        BLACKFIRE_CLIENT_ID: ${{ secrets.BLACKFIRE_CLIENT_ID }}
        BLACKFIRE_CLIENT_TOKEN: ${{ secrets.BLACKFIRE_CLIENT_TOKEN }}

    # Trigger a profile using Blackfire CLI tool.
    - name: Profile list-users command
      env:
        APP_ENV: prod
        APP_DEBUG: 0
      run: blackfire run php bin/console app:list-users
      # Other example using Python:
      #run: blackfire run python my_script.py

Use option --env to target a specific environment (see documentation).

Thanks to the setup-php action, you can use Blackfire Player to run your scenarios and get build reports each time you push a new version of your code on GitHub. setup-php also supports the Symfony CLI tool. This enables you to start the Symfony local webserver so that you can execute the Blackfire Player scenarios directly from your running job.

When using other languages than PHP, e.g. Python, you may use other webservers like gunicorn or the Django development server.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Setup Blackfire via setup-php Action
      uses: shivammathur/setup-php@v2
      with:
        php-version: '7.4'
        extensions: blackfire, :xdebug
        # Setup Blackfire Agent and CLI tool, Blackfire Player, and Symfony CLI
        tools: blackfire, blackfire-player, symfony
      env:
        BLACKFIRE_SERVER_ID: ${{ secrets.BLACKFIRE_SERVER_ID }}
        BLACKFIRE_SERVER_TOKEN: ${{ secrets.BLACKFIRE_SERVER_TOKEN }}
        BLACKFIRE_CLIENT_ID: ${{ secrets.BLACKFIRE_CLIENT_ID }}
        BLACKFIRE_CLIENT_TOKEN: ${{ secrets.BLACKFIRE_CLIENT_TOKEN }}

    - name: Symfony local server start
      env:
        APP_ENV: prod
        APP_DEBUG: 0
      run: |
        symfony local:server:start -d # Start Symfony local webserver
        # Run Blackfire Player scenarios from .blackfire.yaml or .bkf files
        blackfire-player run --endpoint=http://localhost:8000 --blackfire-env=<your-blackfire-environment-id> .blackfire.yaml

setup-php action supports the blackfire CLI tool. It enables to trigger a Blackfire build:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

    - name: Setup PHP Action
      uses: shivammathur/setup-php@v2
      with:
        # Setup Blackfire Agent and CLI tool and Blackfire Player
        tools: blackfire, blackfire-player
      env:
        BLACKFIRE_SERVER_ID: ${{ secrets.BLACKFIRE_SERVER_ID }}
        BLACKFIRE_SERVER_TOKEN: ${{ secrets.BLACKFIRE_SERVER_TOKEN }}
        BLACKFIRE_CLIENT_ID: ${{ secrets.BLACKFIRE_CLIENT_ID }}
        BLACKFIRE_CLIENT_TOKEN: ${{ secrets.BLACKFIRE_CLIENT_TOKEN }}

    - name: Trigger a Blackfire Build
      run: |
        blackfire build-trigger <ENDPOINT> --env=<ENV-UUID> --token=<TOKEN-VALUE>