diff --git a/.github/workflows/cache.yml b/.github/workflows/cache.yml new file mode 100644 index 0000000..60cc13b --- /dev/null +++ b/.github/workflows/cache.yml @@ -0,0 +1,55 @@ +--- +name: "CI" +on: + workflow_call: +jobs: + molecule: + name: cache + runs-on: macos-12 + 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: 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" + 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::" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 54be8ff..4151e84 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,6 +10,8 @@ on: jobs: lint: uses: ./.github/workflows/lint.yml + cache: + uses: ./.github/workflows/cache.yml test: uses: ./.github/workflows/test.yml needs: [lint]