view modules/inifile/.github/workflows/nightly.yml @ 386:3fce34f642f1

Add a PHP module to handle platform differences
author IBBoard <dev@ibboard.co.uk>
date Mon, 03 Jan 2022 17:09:39 +0000
parents
children
line wrap: on
line source

name: "nightly"

on:
  schedule:
    - cron: '0 0 * * *'

env:
  HONEYCOMB_WRITEKEY: 7f3c63a70eecc61d635917de46bea4e6
  HONEYCOMB_DATASET: litmus tests

jobs:
  setup_matrix:
    name: "Setup Test Matrix"
    runs-on: ubuntu-20.04
    outputs:
      matrix: ${{ steps.get-matrix.outputs.matrix }}

    steps:
    - name: "Honeycomb: Start recording"
      uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1
      with:
        apikey: ${{ env.HONEYCOMB_WRITEKEY }}
        dataset: ${{ env.HONEYCOMB_DATASET }}
        job-status: ${{ job.status }}

    - name: "Honeycomb: Start first step"
      run: |
        echo STEP_ID=setup-environment >> $GITHUB_ENV
        echo STEP_START=$(date +%s) >> $GITHUB_ENV

    - name: Checkout Source
      uses: actions/checkout@v2
      if: ${{ github.repository_owner == 'puppetlabs' }}

    - name: Activate Ruby 2.7
      uses: ruby/setup-ruby@v1
      if: ${{ github.repository_owner == 'puppetlabs' }}
      with:
        ruby-version: "2.7"
        bundler-cache: true

    - name: Print bundle environment
      if: ${{ github.repository_owner == 'puppetlabs' }}
      run: |
        echo ::group::bundler environment
        buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env
        echo ::endgroup::

    - name: "Honeycomb: Record Setup Environment time"
      if: ${{ github.repository_owner == 'puppetlabs' }}
      run: |
        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment'
        echo STEP_ID=Setup-Acceptance-Test-Matrix >> $GITHUB_ENV
        echo STEP_START=$(date +%s) >> $GITHUB_ENV

    - name: Setup Acceptance Test Matrix
      id: get-matrix
      if: ${{ github.repository_owner == 'puppetlabs' }}
      run: |
        if [ '${{ github.repository_owner }}' == 'puppetlabs' ]; then
          buildevents cmd $TRACE_ID $STEP_ID matrix_from_metadata -- bundle exec matrix_from_metadata_v2
        else
          echo  "::set-output name=matrix::{}"
        fi

    - name: "Honeycomb: Record Setup Test Matrix time"
      if: ${{ always() }}
      run: |
        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Test Matrix'

  Acceptance:
    name: "${{matrix.platforms.label}}, ${{matrix.collection}}"
    needs:
      - setup_matrix

    runs-on: ubuntu-20.04
    strategy:
      fail-fast: false
      matrix: ${{fromJson(needs.setup_matrix.outputs.matrix)}}

    env:
      BUILDEVENT_FILE: '../buildevents.txt'

    steps:
    - run: |
        echo 'platform=${{ matrix.platforms.image }}' >> $BUILDEVENT_FILE
        echo 'collection=${{ matrix.collection }}' >> $BUILDEVENT_FILE
        echo 'label=${{ matrix.platforms.label }}' >> $BUILDEVENT_FILE


    - name: "Honeycomb: Start recording"
      uses: puppetlabs/kvrhdn-gha-buildevents@pdk-templates-v1
      with:
        apikey: ${{ env.HONEYCOMB_WRITEKEY }}
        dataset: ${{ env.HONEYCOMB_DATASET }}
        job-status: ${{ job.status }}
        matrix-key: ${{ matrix.platforms.label }}-${{ matrix.collection }}

    - name: "Honeycomb: start first step"
      run: |
        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-1 >> $GITHUB_ENV
        echo STEP_START=$(date +%s) >> $GITHUB_ENV

    - name: Checkout Source
      uses: actions/checkout@v2

    - name: Activate Ruby 2.7
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: "2.7"
        bundler-cache: true

    - name: Print bundle environment
      run: |
        echo ::group::bundler environment
        buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env
        echo ::endgroup::

    - name: "Honeycomb: Record Setup Environment time"
      if: ${{ always() }}
      run: |
        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Environment'
        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-2 >> $GITHUB_ENV
        echo STEP_START=$(date +%s) >> $GITHUB_ENV

    - name: Provision test environment
      run: |
        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:provision ${{ matrix.platforms.image }}' -- bundle exec rake 'litmus:provision[${{matrix.platforms.provider}},${{ matrix.platforms.image }}]'
        echo ::group::=== REQUEST ===
        cat request.json || true
        echo
        echo ::endgroup::
        echo ::group::=== INVENTORY ===
        if [ -f 'spec/fixtures/litmus_inventory.yaml' ];
        then
          FILE='spec/fixtures/litmus_inventory.yaml'
        elif [ -f 'inventory.yaml' ];
        then
          FILE='inventory.yaml'
        fi
        sed -e 's/password: .*/password: "[redacted]"/' < $FILE || true
        echo ::endgroup::

    - name: Install agent
      run: |
        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:install_agent ${{ matrix.collection }}' -- bundle exec rake 'litmus:install_agent[${{ matrix.collection }}]'

    - name: Install module
      run: |
        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:install_module' -- bundle exec rake 'litmus:install_module'

    - name: "Honeycomb: Record deployment times"
      if: ${{ always() }}
      run: |
        echo ::group::honeycomb step
        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Deploy test system'
        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-3 >> $GITHUB_ENV
        echo STEP_START=$(date +%s) >> $GITHUB_ENV
        echo ::endgroup::

    - name: Run acceptance tests
      run: |
        buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:acceptance:parallel' -- bundle exec rake 'litmus:acceptance:parallel'

    - name: "Honeycomb: Record acceptance testing times"
      if: ${{ always() }}
      run: |
        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Run acceptance tests'
        echo STEP_ID=${{ matrix.platforms.image }}-${{ matrix.collection }}-4 >> $GITHUB_ENV
        echo STEP_START=$(date +%s) >> $GITHUB_ENV

    - name: Remove test environment
      if: ${{ always() }}
      continue-on-error: true
      run: |
        if [[ -f inventory.yaml || -f spec/fixtures/litmus_inventory.yaml ]]; then
          buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:tear_down' -- bundle exec rake 'litmus:tear_down'
          echo ::group::=== REQUEST ===
          cat request.json || true
          echo
          echo ::endgroup::
        fi

    - name: "Honeycomb: Record removal times"
      if: ${{ always() }}
      run: |
        buildevents step $TRACE_ID $STEP_ID $STEP_START 'Remove test environment'

  slack-workflow-status:
    if: always()
    name: Post Workflow Status To Slack
    needs:
      - Acceptance
    runs-on: ubuntu-20.04
    steps:
      - name: Slack Workflow Notification
        uses: puppetlabs/Gamesight-slack-workflow-status@pdk-templates-v1
        with:
          # Required Input
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          slack_webhook_url: ${{ secrets.SLACK_WEBHOOK }}
          # Optional Input
          channel: '#team-ia-bots'
          name: 'GABot'