From f42bf16dacbe681d4d8cfec6e5ca89fc0f1d7558 Mon Sep 17 00:00:00 2001 From: Bobosila Victor Date: Thu, 20 Jan 2022 14:32:55 +0200 Subject: (MODULES-11260) Replace daily with dispatchable GHA workflow --- .../daily_unit_tests_with_nightly_puppet_gem.yaml | 69 ---------- ...ch_unit_tests_with_nightly_puppet_gem.yaml.yaml | 139 +++++++++++++++++++++ 2 files changed, 139 insertions(+), 69 deletions(-) delete mode 100644 .github/workflows/daily_unit_tests_with_nightly_puppet_gem.yaml create mode 100644 .github/workflows/dispatch_unit_tests_with_nightly_puppet_gem.yaml.yaml diff --git a/.github/workflows/daily_unit_tests_with_nightly_puppet_gem.yaml b/.github/workflows/daily_unit_tests_with_nightly_puppet_gem.yaml deleted file mode 100644 index 208d054..0000000 --- a/.github/workflows/daily_unit_tests_with_nightly_puppet_gem.yaml +++ /dev/null @@ -1,69 +0,0 @@ ---- -name: '[Daily] Unit Tests with nightly Puppet gem' - -on: - schedule: - - cron: '0 5 * * 1-5' - -jobs: - daily_unit_tests_with_nightly_puppet_gem: - name: ${{ matrix.os_type }} / Puppet${{ matrix.puppet_version }} gem / Ruby ${{ matrix.ruby }} - strategy: - matrix: - os: [ 'ubuntu-18.04', 'macos-10.15', 'windows-2019' ] - puppet_version: [ 6, 7 ] - include: - - puppet_version: 6 - ruby: 2.5 - - puppet_version: 7 - ruby: 2.7 - - - os: 'ubuntu-18.04' - os_type: 'Linux' - env_set_cmd: 'export ' - gem_file: 'puppet-latest.gem' - - os: 'macos-10.15' - os_type: 'macOS' - env_set_cmd: 'export ' - gem_file: 'puppet-latest-universal-darwin.gem' - - os: 'windows-2019' - os_type: 'Windows' - env_set_cmd: '$env:' - gem_file: 'puppet-latest-x64-mingw32.gem' - - runs-on: ${{ matrix.os }} - steps: - - name: Checkout code - uses: actions/checkout@v2 - - - name: Install ruby version ${{ matrix.ruby }} - uses: ruby/setup-ruby@v1 - with: - ruby-version: ${{ matrix.ruby }} - - - name: Install the latest nightly build of puppet${{ matrix.puppet_version }} gem - run: | - curl http://nightlies.puppet.com/downloads/gems/puppet${{ matrix.puppet_version }}-nightly/${{ matrix.gem_file }} --output puppet.gem - gem install puppet.gem -N - - - name: Prepare testing environment with bundler - run: | - git config --global core.longpaths true - bundle config set system 'true' - bundle config set --local without 'release' - ${{ matrix.env_set_cmd }}PUPPET_GEM_VERSION=$(ruby -e 'puts /puppet\s+\((.+)\)/.match(`gem list -eld puppet`)[1]') - bundle update --jobs 4 --retry 3 - - - name: Run unit tests - run: bundle exec rake parallel_spec - - notify-via-slack: - name: Notify workflow conclusion via Slack - if: ${{ always() }} - needs: daily_unit_tests_with_nightly_puppet_gem - runs-on: 'ubuntu-latest' - steps: - - uses: luchihoratiu/notify-via-slack@main - with: - SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }} - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} diff --git a/.github/workflows/dispatch_unit_tests_with_nightly_puppet_gem.yaml.yaml b/.github/workflows/dispatch_unit_tests_with_nightly_puppet_gem.yaml.yaml new file mode 100644 index 0000000..5d017a1 --- /dev/null +++ b/.github/workflows/dispatch_unit_tests_with_nightly_puppet_gem.yaml.yaml @@ -0,0 +1,139 @@ +--- +name: '[Dispatched] Unit Tests with nightly Puppet gem' + +on: + workflow_dispatch: + inputs: + pa_ref: + description: 'Puppet Agent SHA to use in this run' + required: true + +jobs: + set_output_data: + name: 'Prepare input and output data' + runs-on: 'ubuntu-latest' + outputs: + puppet_sha: ${{ steps.setup_world.outputs.puppet_sha }} + ruby_version: ${{ steps.setup_world.outputs.ruby_version }} + puppet_version: ${{ steps.setup_world.outputs.puppet_version }} + puppet_short_commit: ${{ steps.setup_world.outputs.puppet_short_commit }} + + steps: + - name: Gather and set data + id: setup_world + run: | + pa_ref=${{ github.event.inputs.pa_ref }} + res=$(curl -s https://raw.githubusercontent.com/puppetlabs/puppet-agent/${pa_ref}/configs/components/puppet.json) + puppet_remote=$(echo $res | cut -d '"' -f 4) + puppet_sha=$(echo $res | cut -d '"' -f 8) + mkdir puppet + pushd puppet + git init + git remote add origin ${puppet_remote} + git fetch + puppet_short_commit=$(git describe ${puppet_sha} | sed -r 's/-/./g' | rev | cut -c 4- | rev) + puppet_version=${puppet_short_commit:0:1} + popd + rm -rf puppet + + case $puppet_version in + 6) + ruby_version='2.5' + ;; + 7) + ruby_version='2.7' + ;; + esac + echo "::set-output name=puppet_sha::$puppet_sha" + echo "::set-output name=ruby_version::$ruby_version" + echo "::set-output name=puppet_version::$puppet_version" + echo "::set-output name=puppet_short_commit::$puppet_short_commit" + - name: "Puppet Agent SHA: ${{ github.event.inputs.pa_ref }}" + run: "echo ${{ github.event.inputs.pa_ref }}" + + - name: "Puppet SHA: ${{ steps.setup_world.outputs.puppet_sha }}" + run: "echo ${{ steps.setup_world.outputs.puppet_sha }}" + + - name: "Puppet Short Commit: ${{ steps.setup_world.outputs.puppet_short_commit }}" + run: "echo ${{ steps.setup_world.outputs.puppet_short_commit }}" + + - name: "Puppet Version: ${{ steps.setup_world.outputs.puppet_version }}" + run: "echo ${{ steps.setup_world.outputs.puppet_version }}" + + - name: "Ruby Version: ${{ steps.setup_world.outputs.ruby_version }}" + run: "echo ${{ steps.setup_world.outputs.ruby_version }}" + + unit_tests_with_nightly_puppet_gem: + name: ${{ matrix.os_type }} / Puppet${{ needs.set_output_data.outputs.puppet_version }} gem / Ruby${{ needs.set_output_data.outputs.ruby_version }} + needs: set_output_data + env: + puppet_version: ${{ needs.set_output_data.outputs.puppet_version }} + ruby_version: ${{ needs.set_output_data.outputs.ruby_version }} + + strategy: + matrix: + os: [ 'ubuntu-18.04', 'macos-10.15', 'windows-2019' ] + include: + - os: 'ubuntu-18.04' + os_type: 'Linux' + env_set_cmd: 'export ' + gem_file_postfix: '.gem' + - os: 'macos-10.15' + os_type: 'macOS' + env_set_cmd: 'export ' + gem_file_postfix: '-universal-darwin.gem' + - os: 'windows-2019' + os_type: 'Windows' + env_set_cmd: '$env:' + gem_file_postfix: '-x64-mingw32.gem' + + runs-on: ${{ matrix.os }} + steps: + - name: Checkout code + uses: actions/checkout@v2 + + - name: Install ruby version ${{ env.ruby_version }} + uses: ruby/setup-ruby@v1 + with: + ruby-version: ${{ env.ruby_version }} + + - name: Install the given nightly puppet${{ env.puppet_version }} gem + run: | + sleep_time=0 + until [ $sleep_time -ge 15 ] + do + curl --location http://nightlies.puppet.com/downloads/gems/puppet${{ env.puppet_version }}-nightly/puppet-${{ needs.set_output_data.outputs.puppet_short_commit }}${{ matrix.gem_file_postfix }} --output puppet.gem + gem install puppet.gem -N && break + sleep_time=$((sleep_time*2+1)) + echo "Retrying download and install of gem in $sleep_time seconds..." + sleep $sleep_time + done + shell: bash + + - name: Prepare testing environment with bundler + run: | + git config --global core.longpaths true + bundle config set system 'true' + bundle config set --local without 'release' + ${{ matrix.env_set_cmd }}PUPPET_GEM_VERSION=${{ needs.set_output_data.outputs.puppet_short_commit }} + bundle update --jobs 4 --retry 3 + - name: Run unit tests + run: bundle exec rake parallel_spec + + notify-via-slack: + name: Notify workflow conclusion via Slack + if: ${{ always() }} + needs: [set_output_data, unit_tests_with_nightly_puppet_gem] + runs-on: 'ubuntu-latest' + steps: + - uses: luchihoratiu/notify-via-slack@v1.0.0 + with: + SLACK_CHANNEL: ${{ secrets.SLACK_CHANNEL }} + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} + NOTIFY_ONLY_ON_CONCLUSION_CHANGE: 'true' + EXTRA_INFORMATION: ':github_actions: Run number: ${{ github.run_id }} \n + :puppet: Puppet Agent SHA: ${{ github.event.inputs.pa_ref }} \n + :puppet: Puppet SHA: ${{ needs.set_output_data.outputs.puppet_sha }} \n + :puppet: Puppet Short Commit: ${{ needs.set_output_data.outputs.puppet_short_commit }} \n + :puppet: Puppet Version: ${{ needs.set_output_data.outputs.puppet_version }} \n + :ruby: Ruby Version: ${{ needs.set_output_data.outputs.ruby_version }} \n' -- cgit v1.2.3