on: # Allows manual trigger on arbitrary branches via GitHub UI/API workflow_dispatch: repository_dispatch: types: [prerelease] schedule: # Run nightly on weekdays at 05:00 UTC or midnight-ish in US time zones - cron: '0 5 * * 1-5' jobs: slack-vars: if: github.repository == 'hashicorp/vagrant-builders' name: Populate vars runs-on: ['self-hosted', 'ondemand', 'linux', 'type=t3.nano'] uses: ./.github/workflows/slack-vars.yml packet-vars: if: github.repository == 'hashicorp/vagrant-builders' name: Populate vars runs-on: ['self-hosted', 'ondemand', 'linux', 'type=t3.nano'] uses: ./.github/workflows/packet-vars.yml setup-packet: if: github.repository == 'hashicorp/vagrant-acceptance' runs-on: ['self-hosted', 'ondemand', 'linux', 'type=t3.nano'] name: Build Packet Instance steps: - name: Code Checkout uses: actions/checkout@v3 - name: Create packet instance run: ./.ci/spec/create-packet.sh working-directory: ${{github.workspace}} env: PACKET_EXEC_TOKEN: ${{ needs.packet-vars.outputs.PACKET_EXEC_TOKEN }} PACKET_EXEC_PROJECT_ID: ${{ needs.packet-vars.outputs.PACKET_EXEC_PROJECT_ID }} PACKET_SSH_KEY_CONTENT: ${{ needs.packet-vars.outputs.PACKET_SSH_KEY_CONTENT }} PKT_SECRET_PHRASE: ${{ needs.packaging-vars.outputs.ASSETS_PASSWORD }} SLACK_WEBHOOK: ${{ needs.slack-vars.outputs.SLACK_WEBHOOK }} setup-hosts: if: github.repository == 'hashicorp/vagrant-acceptance' runs-on: ['self-hosted', 'ondemand', 'linux', 'type=t3.nano'] name: Vagrant-Spec Start Hosts needs: setup-packet strategy: matrix: host_os: ['hashicorp/bionic64'] guest_os: ['hashicorp-vagrant/ubuntu-16.04'] providers: ['virtualbox', 'docker'] steps: - name: Code Checkout uses: actions/checkout@v3 with: submodules: 'recursive' - name: Create hosts for tests (provider ${{ matrix.providers }}) run: ./.ci/spec/create-hosts.sh working-directory: ${{github.workspace}} env: PACKET_EXEC_TOKEN: ${{ needs.packet-vars.outputs.PACKET_EXEC_TOKEN }} PACKET_EXEC_PROJECT_ID: ${{ needs.packet-vars.outputs.PACKET_EXEC_PROJECT_ID }} PACKET_SSH_KEY_CONTENT: ${{ needs.packet-vars.outputs.PACKET_SSH_KEY_CONTENT }} PKT_SECRET_PHRASE: ${{ needs.packaging-vars.outputs.ASSETS_PASSWORD }} SLACK_WEBHOOK: ${{ needs.slack-vars.outputs.SLACK_WEBHOOK }} VAGRANT_HOST_BOXES: ${{matrix.host_os}} VAGRANT_GUEST_BOXES: ${{matrix.guest_os}} VAGRANT_PRERELEASE_VERSION: ${{ github.event.client_payload.prerelease_version }} VAGRANT_SPEC_PROVIDERS: ${{matrix.providers}} spec-tests: if: github.repository == 'hashicorp/vagrant-acceptance' runs-on: ['self-hosted', 'ondemand', 'linux', 'type=t3.nano'] name: Vagrant-Spec Tests needs: setup-hosts strategy: matrix: host_os: ['hashicorp/bionic64'] guest_os: ['hashicorp-vagrant/ubuntu-16.04'] docker_images: ['nginx'] providers: ['virtualbox', 'docker'] steps: - name: Run Tests with host ${{ matrix.host_os }} using provider ${{ matrix.providers }} run: ./.ci/spec/run-test.sh working-directory: ${{github.workspace}} env: PACKET_EXEC_TOKEN: ${{ needs.packet-vars.outputs.PACKET_EXEC_TOKEN }} PACKET_EXEC_PROJECT_ID: ${{ needs.packet-vars.outputs.PACKET_EXEC_PROJECT_ID }} PACKET_SSH_KEY_CONTENT: ${{ needs.packet-vars.outputs.PACKET_SSH_KEY_CONTENT }} PKT_SECRET_PHRASE: ${{ needs.packaging-vars.outputs.ASSETS_PASSWORD }} SLACK_WEBHOOK: ${{ needs.slack-vars.outputs.SLACK_WEBHOOK }} VAGRANT_HOST_BOXES: ${{matrix.host_os}} VAGRANT_GUEST_BOXES: ${{matrix.guest_os}} VAGRANT_SPEC_PROVIDERS: ${{matrix.providers}} VAGRANT_DOCKER_IMAGES: ${{matrix.docker_images}} - name: Pull log from guest if: always() run: ./.ci/spec/pull-log.sh env: PACKET_EXEC_TOKEN: ${{ needs.packet-vars.outputs.PACKET_EXEC_TOKEN }} PACKET_EXEC_PROJECT_ID: ${{ needs.packet-vars.outputs.PACKET_EXEC_PROJECT_ID }} PACKET_SSH_KEY_CONTENT: ${{ needs.packet-vars.outputs.PACKET_SSH_KEY_CONTENT }} PKT_SECRET_PHRASE: ${{ needs.packaging-vars.outputs.ASSETS_PASSWORD }} SLACK_WEBHOOK: ${{ needs.slack-vars.outputs.SLACK_WEBHOOK }} VAGRANT_HOST_BOXES: ${{matrix.host_os}} VAGRANT_GUEST_BOXES: ${{matrix.guest_os}} VAGRANT_SPEC_PROVIDERS: ${{matrix.providers}} VAGRANT_DOCKER_IMAGES: ${{matrix.docker_images}} - name: Upload log if: always() uses: actions/upload-artifact@v3 with: name: vagrant-spec-${{matrix.providers}}.log path: ${{ github.workspace }}/vagrant-spec.log notify-on-success: if: github.repository == 'hashicorp/vagrant-acceptance' && success() runs-on: self-hosted name: Notify on Success needs: spec-tests steps: - name: Notify on Success run: ./.ci/spec/notify-success.sh env: SLACK_WEBHOOK: ${{ needs.slack-vars.outputs.SLACK_WEBHOOK }} cleanup: if: github.repository == 'hashicorp/vagrant-acceptance' runs-on: self-hosted name: Cleanup Post Vagrant-Spec Tests needs: [spec-tests, notify-on-success] steps: - name: Clean Packet run: ./.ci/spec/clean-packet.sh env: PACKET_EXEC_TOKEN: ${{ needs.packet-vars.outputs.PACKET_EXEC_TOKEN }} PACKET_EXEC_PROJECT_ID: ${{ needs.packet-vars.outputs.PACKET_EXEC_PROJECT_ID }} PACKET_SSH_KEY_CONTENT: ${{ needs.packet-vars.outputs.PACKET_SSH_KEY_CONTENT }} PKT_SECRET_PHRASE: ${{ needs.packaging-vars.outputs.ASSETS_PASSWORD }} SLACK_WEBHOOK: ${{ needs.slack-vars.outputs.SLACK_WEBHOOK }} - name: Clean Workspace run: rm -rf ${{ github.workspace }}