diff --git a/.github/workflows/cache.yml b/.github/workflows/cache.yml new file mode 100644 index 0000000..b230183 --- /dev/null +++ b/.github/workflows/cache.yml @@ -0,0 +1,87 @@ +--- +name: "Cache" +on: + workflow_call: +jobs: + molecule: + name: cache + runs-on: macos-13 + env: + PYTHON_VERSION: "3.11" + + steps: + - name: Check out the codebase + uses: actions/checkout@e2f20e631ae6d7dd3b768f56a5d2af784dd54791 # v3 2.5.0 + with: + ref: ${{ github.event.pull_request.head.sha }} + + - name: Set up Python ${{ env.PYTHON_VERSION }} + uses: actions/setup-python@75f3110429a8c05be0e1bf360334e4cced2b63fa # 2.3.3 + with: + python-version: ${{ env.PYTHON_VERSION }} + cache: 'pip' # caching pip dependencies + + - name: Cache Ansible + uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # 4.0 + id: cache-ansible + with: + path: ~/.ansible/collections + key: ansible-${{ hashFiles('collections/requirements.txt') }} + restore-keys: | + ansible- + + - name: Install dependencies + run: | + echo "::group::Upgrade pip" + python3 -m pip install --upgrade pip + echo "::endgroup::" + + echo "::group::Install Python requirements from requirements.txt" + python3 -m pip install -r requirements.txt + echo "::endgroup::" + + - name: Install ansible dependencies + if: steps.cache-ansible.outputs.cache-hit != 'true' # only run if false since this is just a cache step + run: | + echo "::group::Install Ansible role requirements from collections/requirements.yml" + ansible-galaxy install -r collections/requirements.yml + echo "::endgroup::" + + - name: Cache Vagrant boxes + id: cache-vagrant + uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # 4.0 + with: + lookup-only: true #if it exists, we don't need to restore and can skip the next step + path: | + ~/.vagrant.d/boxes + key: vagrant-boxes-${{ hashFiles('**/molecule.yml') }} + restore-keys: | + vagrant-boxes + + - name: Configure Homebrew cache + uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # 4.0 + id: cache-homebrew + with: + path: | + ~/Library/Caches/Homebrew + key: brew-${{ hashFiles('./Brewfile') }} + restore-keys: brew- + + - name: Update Homebrew + if: | # only run if false since this is just a cache step + steps.cache-homebrew.outputs.cache-hit != 'true' || steps.cache-homebrew.outputs.cache-hit != 'true' + run: | + brew update --preinstall + + - name: Install Homebrew dependencies + if: | # only run if false since this is just a cache step + steps.cache-homebrew.outputs.cache-hit != 'true' || steps.cache-homebrew.outputs.cache-hit != 'true' + run: | + env HOMEBREW_NO_AUTO_UPDATE=1 brew bundle --no-upgrade --file ./Brewfile + + - name: Download Vagrant boxes for all scenarios + # To save some cache space, all scenarios share the same cache key. + # On the other hand, this means that the cache contents should be + # the same across all scenarios. This step ensures that. + if: steps.cache-vagrant.outputs.cache-hit != 'true' # only run if false since this is just a cache step + run: ./.github/download-boxes.sh diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 54be8ff..c0b3b36 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,8 +8,11 @@ on: paths-ignore: - '**/README.md' jobs: + cache: + uses: ./.github/workflows/cache.yml lint: uses: ./.github/workflows/lint.yml + needs: [cache] test: uses: ./.github/workflows/test.yml - needs: [lint] + needs: [cache, lint] diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index b43f5bb..e7108e2 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -21,21 +21,11 @@ jobs: python-version: ${{ env.PYTHON_VERSION }} cache: 'pip' # caching pip dependencies - - name: Cache pip - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # 3.0.11 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('./requirements.txt') }} - restore-keys: | - ${{ runner.os }}-pip- - - - name: Cache Ansible - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # 3.0.11 + - name: Restore Ansible cache + uses: actions/cache/restore@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # 4.0 with: path: ~/.ansible/collections - key: ${{ runner.os }}-ansible-${{ hashFiles('collections/requirements.txt') }} - restore-keys: | - ${{ runner.os }}-ansible- + key: ansible-${{ hashFiles('collections/requirements.txt') }} - name: Install dependencies run: | diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 10b6135..f856193 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -5,7 +5,7 @@ on: jobs: molecule: name: Molecule - runs-on: macos-12 + runs-on: macos-13 strategy: matrix: scenario: @@ -22,6 +22,33 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} + - name: Restore Ansible cache + uses: actions/cache/restore@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # 4.0 + with: + path: ~/.ansible/collections + key: ansible-${{ hashFiles('collections/requirements.txt') }} + + - name: Restore Homebrew cache + uses: actions/cache/restore@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # 4.0 + with: + path: ~/Library/Caches/Homebrew + key: brew-${{ hashFiles('./Brewfile') }} + + - name: Update Homebrew + run: | + brew update --preinstall + + - name: Install Homebrew dependencies + run: | + env HOMEBREW_NO_AUTO_UPDATE=1 brew bundle --no-upgrade --file ./Brewfile + + - name: Restore vagrant Boxes cache + uses: actions/cache/restore@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # 4.0 + with: + path: ~/.vagrant.d/boxes + key: vagrant-boxes-${{ hashFiles('**/molecule.yml') }} + fail-on-cache-miss: true + - name: Configure VirtualBox run: |- sudo mkdir -p /etc/vbox @@ -30,35 +57,6 @@ jobs: * fdad:bad:ba55::/64 EOF - - name: Cache pip - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # 3.0.11 - with: - path: ~/.cache/pip - key: ${{ runner.os }}-pip-${{ hashFiles('./requirements.txt') }} - restore-keys: | - ${{ runner.os }}-pip- - - - name: Cache Vagrant boxes - uses: actions/cache@9b0c1fce7a93df8e3bb8926b0d6e9d89e92f20a7 # 3.0.11 - with: - path: | - ~/.vagrant.d/boxes - key: vagrant-boxes-${{ hashFiles('**/molecule.yml') }} - restore-keys: | - vagrant-boxes - - - name: Download Vagrant boxes for all scenarios - # To save some cache space, all scenarios share the same cache key. - # On the other hand, this means that the cache contents should be - # the same across all scenarios. This step ensures that. - run: ./.github/download-boxes.sh - - - name: Set up Python ${{ env.PYTHON_VERSION }} - uses: actions/setup-python@75f3110429a8c05be0e1bf360334e4cced2b63fa # 2.3.3 - with: - python-version: ${{ env.PYTHON_VERSION }} - cache: 'pip' # caching pip dependencies - - name: Install dependencies run: | echo "::group::Upgrade pip" @@ -69,13 +67,21 @@ jobs: python3 -m pip install -r requirements.txt echo "::endgroup::" + - name: Cache Ansible + uses: actions/cache@13aacd865c20de90d75de3b17ebe84f7a17d57d2 # 4.0 + with: + path: ~/.ansible/collections + key: ansible-${{ hashFiles('collections/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-ansible- + - name: Test with molecule run: molecule test --scenario-name ${{ matrix.scenario }} timeout-minutes: 90 env: ANSIBLE_K3S_LOG_DIR: ${{ runner.temp }}/logs/k3s-ansible/${{ matrix.scenario }} ANSIBLE_SSH_RETRIES: 4 - ANSIBLE_TIMEOUT: 60 + ANSIBLE_TIMEOUT: 120 PY_COLORS: 1 ANSIBLE_FORCE_COLOR: 1 diff --git a/Brewfile b/Brewfile new file mode 100644 index 0000000..9e1bcdc --- /dev/null +++ b/Brewfile @@ -0,0 +1,4 @@ +tap "homebrew/bundle" +tap "homebrew/cask-versions" +cask "virtualbox6" +cask "vagrant" diff --git a/molecule/default/molecule.yml b/molecule/default/molecule.yml index 4a07503..4177ece 100644 --- a/molecule/default/molecule.yml +++ b/molecule/default/molecule.yml @@ -7,7 +7,7 @@ platforms: - name: control1 box: generic/ubuntu2204 - memory: 2048 + memory: 1024 cpus: 2 groups: - k3s_cluster @@ -23,7 +23,7 @@ platforms: - name: control2 box: generic/debian11 - memory: 2048 + memory: 1024 cpus: 2 groups: - k3s_cluster @@ -34,7 +34,7 @@ platforms: - name: control3 box: generic/rocky9 - memory: 2048 + memory: 1024 cpus: 2 groups: - k3s_cluster @@ -45,7 +45,7 @@ platforms: - name: node1 box: generic/ubuntu2204 - memory: 2048 + memory: 1024 cpus: 2 groups: - k3s_cluster @@ -61,7 +61,7 @@ platforms: - name: node2 box: generic/rocky9 - memory: 2048 + memory: 1024 cpus: 2 groups: - k3s_cluster diff --git a/molecule/ipv6/molecule.yml b/molecule/ipv6/molecule.yml index 2ad6423..cf5b171 100644 --- a/molecule/ipv6/molecule.yml +++ b/molecule/ipv6/molecule.yml @@ -6,7 +6,7 @@ driver: platforms: - name: control1 box: generic/ubuntu2204 - memory: 2048 + memory: 1024 cpus: 2 groups: - k3s_cluster @@ -22,7 +22,7 @@ platforms: - name: control2 box: generic/ubuntu2204 - memory: 2048 + memory: 1024 cpus: 2 groups: - k3s_cluster @@ -38,7 +38,7 @@ platforms: - name: node1 box: generic/ubuntu2204 - memory: 2048 + memory: 1024 cpus: 2 groups: - k3s_cluster diff --git a/roles/k3s_server_post/defaults/main.yml b/roles/k3s_server_post/defaults/main.yml index 1c458fa..bbf9629 100644 --- a/roles/k3s_server_post/defaults/main.yml +++ b/roles/k3s_server_post/defaults/main.yml @@ -1,6 +1,6 @@ --- # Timeout to wait for MetalLB services to come up -metal_lb_available_timeout: 120s +metal_lb_available_timeout: 240s # Name of the master group group_name_master: master