+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: kvrhdn/gha-buildevents@v1.0.2
+ with:
+ apikey: ${{ env.HONEYCOMB_WRITEKEY }}
+ dataset: ${{ env.HONEYCOMB_DATASET }}
+ job-status: ${{ job.status }}
+
+ - name: "Honeycomb: Start first step"
+ run: |
+ echo STEP_ID=0 >> $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: actions/setup-ruby@v1
+ if: ${{ github.repository_owner == 'puppetlabs' }}
+ with:
+ ruby-version: "2.7"
+
+ - name: Cache gems
+ uses: actions/cache@v2
+ if: ${{ github.repository_owner == 'puppetlabs' }}
+ with:
+ path: vendor/gems
+ key: ${{ runner.os }}-${{ github.event_name }}-${{ hashFiles('**/Gemfile') }}
+ restore-keys: |
+ ${{ runner.os }}-${{ github.event_name }}-
+ ${{ runner.os }}-
+
+ - name: Install gems
+ if: ${{ github.repository_owner == 'puppetlabs' }}
+ run: |
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle config path vendor/gems' -- bundle config path vendor/gems
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle config jobs 8' -- bundle config jobs 8
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle config retry 3' -- bundle config retry 3
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle install' -- bundle install
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle clean' -- bundle clean
+
+ - 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
+ else
+ echo "::set-output name=matrix::{}"
+ fi
+
+ - name: "Honeycomb: Record setup time"
+ if: ${{ always() }}
+ run: |
+ buildevents step $TRACE_ID $STEP_ID $STEP_START 'Setup Test Matrix'
+
+ Acceptance:
+ 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.platform }}' >> $BUILDEVENT_FILE
+ echo 'collection=${{ matrix.collection }}' >> $BUILDEVENT_FILE
+
+ - name: "Honeycomb: Start recording"
+ uses: kvrhdn/gha-buildevents@v1.0.2
+ with:
+ apikey: ${{ env.HONEYCOMB_WRITEKEY }}
+ dataset: ${{ env.HONEYCOMB_DATASET }}
+ job-status: ${{ job.status }}
+ matrix-key: ${{ matrix.platform }}-${{ matrix.collection }}
+
+ - name: "Honeycomb: start first step"
+ run: |
+ echo STEP_ID=${{ matrix.platform }}-${{ 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: actions/setup-ruby@v1
+ with:
+ ruby-version: "2.7"
+
+ - name: Cache gems
+ uses: actions/cache@v2
+ with:
+ path: vendor/gems
+ key: ${{ runner.os }}-${{ github.event_name }}-${{ hashFiles('**/Gemfile') }}
+ restore-keys: |
+ ${{ runner.os }}-${{ github.event_name }}-
+ ${{ runner.os }}-
+
+ - name: "Honeycomb: Record cache setup time"
+ if: ${{ always() }}
+ run: |
+ buildevents step $TRACE_ID $STEP_ID $STEP_START 'Cache retrieval'
+ echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-2 >> $GITHUB_ENV
+ echo STEP_START=$(date +%s) >> $GITHUB_ENV
+
+ - name: Bundler Setup
+ run: |
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle config path vendor/gems' -- bundle config path vendor/gems
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle config jobs 8' -- bundle config jobs 8
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle config retry 3' -- bundle config retry 3
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle install' -- bundle install
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle clean' -- bundle clean
+ echo ::group::bundler environment
+ buildevents cmd $TRACE_ID $STEP_ID 'bundle env' -- bundle env
+ echo ::endgroup::
+
+ - name: "Honeycomb: Record Bundler Setup time"
+ if: ${{ always() }}
+ run: |
+ buildevents step $TRACE_ID $STEP_ID $STEP_START 'Bundler Setup'
+ echo STEP_ID=${{ matrix.platform }}-${{ matrix.collection }}-3 >> $GITHUB_ENV
+ echo STEP_START=$(date +%s) >> $GITHUB_ENV
+
+ - name: Provision test environment
+ run: |
+ buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:provision ${{ matrix.platform }}' -- bundle exec rake 'litmus:provision[provision::provision_service,${{ matrix.platform }}]'
+ echo ::group::=== REQUEST ===
+ cat request.json || true
+ echo
+ echo ::endgroup::
+ echo ::group::=== INVENTORY ===
+ sed -e 's/password: .*/password: "[redacted]"/' < inventory.yaml || true
+ echo ::endgroup::
+
+ # The provision service hands out machines as soon as they're provisioned.
+ # The GCP VMs might still take a while to spool up and configure themselves fully.
+ # This retry loop spins until all agents have been installed successfully.
+ - name: Install agent
+ uses: nick-invision/retry@v1
+ with:
+ timeout_minutes: 30
+ max_attempts: 5
+ retry_wait_seconds: 60
+ command: buildevents cmd $TRACE_ID $STEP_ID 'rake litmus:install_agent ${{ matrix.collection }}' -- bundle exec rake 'litmus:install_agent[${{ matrix.collection }}]'
+
+ # The agent installer on windows does not finish in time for this to work. To
+ # work around this for now, retry after a minute if installing the module failed.
+ - name: Install module
+ uses: nick-invision/retry@v1
+ with:
+ timeout_minutes: 30
+ max_attempts: 2
+ retry_wait_seconds: 60
+ command: 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.platform }}-${{ matrix.collection }}-4 >> $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.platform }}-${{ matrix.collection }}-5 >> $GITHUB_ENV
+ echo STEP_START=$(date +%s) >> $GITHUB_ENV
+
+ - name: Remove test environment
+ if: ${{ always() }}
+ run: |
+ if [ -f 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: Gamesight/slack-workflow-status@master
+ with:
+ # Required Input
+ repo_token: ${{ secrets.GITHUB_TOKEN }}
+ slack_webhook_url: ${{ secrets.SLACK_WEBHOOK }}
+ # Optional Input
+ channel: '#team-ia-bots'
+ name: 'GABot'