nightly.yml 6.76 KB
Newer Older
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
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'