diff --git a/.github/actions/setup-dev-container/action.yml b/.github/actions/setup-dev-container/action.yml new file mode 100644 index 0000000000..2ee0fc76d2 --- /dev/null +++ b/.github/actions/setup-dev-container/action.yml @@ -0,0 +1,80 @@ +name: 'Set up the dev container' +description: 'Installs the dev container CLI, fetches caches (if exist), and starts the dev container' +runs: + using: 'composite' + steps: + - name: Set up Yarn cache + uses: actions/cache@v3 + with: + path: '/tmp/.yarn/cache' + key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-yarn- + + - name: Set up Renv cache + uses: actions/cache@v3 + with: + path: '/tmp/.cache/R/renv/cache' + key: ${{ runner.os }}-renv-cache-${{ hashFiles('**/renv.lock') }} + restore-keys: | + ${{ runner.os }}-renv-cache- + + - name: Set up Poetry cache + uses: actions/cache@v3 + with: + path: '/tmp/.cache/pypoetry' + key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }} + + - name: Set up venv cache + uses: actions/cache@v3 + with: + path: | + /tmp/.local/share/virtualenv + **/.venv + key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock') }} + + - name: Set up Gradle cache + uses: actions/cache@v3 + with: + path: | + /tmp/.gradle/caches + /tmp/.gradle/wrapper + key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} + restore-keys: | + ${{ runner.os }}-gradle- + + - name: Install the Dev Container CLI + shell: bash + run: npm install -g @devcontainers/cli@0.49.0 + + - name: Start the dev container + shell: bash + run: | + mkdir -p \ + /tmp/.yarn/cache \ + /tmp/.cache/R/renv/cache \ + /tmp/.cache/pypoetry \ + /tmp/.local/share/virtualenv \ + /tmp/.gradle/caches \ + /tmp/.gradle/wrapper + + devcontainer up \ + --mount type=bind,source=/tmp/.yarn/cache,target=/workspaces/sage-monorepo/.yarn/cache \ + --mount type=bind,source=/tmp/.cache/R/renv/cache,target=/home/vscode/.cache/R/renv/cache \ + --mount type=bind,source=/tmp/.cache/pypoetry,target=/home/vscode/.cache/pypoetry \ + --mount type=bind,source=/tmp/.local/share/virtualenv,target=/home/vscode/.local/share/virtualenv \ + --mount type=bind,source=/tmp/.gradle/caches,target=/home/vscode/.gradle/caches \ + --mount type=bind,source=/tmp/.gradle/wrapper,target=/home/vscode/.gradle/wrapper \ + --workspace-folder ../sage-monorepo + + - name: Prepare the workspace + shell: bash + run: | + devcontainer exec --workspace-folder ../sage-monorepo bash -c " + sudo chown -R vscode:vscode \ + /workspaces/sage-monorepo \ + /home/vscode/.cache \ + /home/vscode/.local \ + /home/vscode/.gradle \ + && . ./dev-env.sh \ + && workspace-install-affected" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 27d2ba56a0..e6a32771e1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -31,78 +31,7 @@ jobs: - name: Derive appropriate SHAs for base and head for `nx affected` commands uses: nrwl/nx-set-shas@v3 - - name: Set up Yarn cache - uses: actions/cache@v3 - with: - path: '/tmp/.yarn/cache' - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Set up Renv cache - uses: actions/cache@v3 - with: - path: '/tmp/.cache/R/renv/cache' - key: ${{ runner.os }}-renv-cache-${{ hashFiles('**/renv.lock') }} - restore-keys: | - ${{ runner.os }}-renv-cache- - - - name: Set up Poetry cache - uses: actions/cache@v3 - with: - path: '/tmp/.cache/pypoetry' - key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }} - - - name: Set up venv cache - uses: actions/cache@v3 - with: - path: | - /tmp/.local/share/virtualenv - **/.venv - key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock') }} - - - name: Set up Gradle cache - uses: actions/cache@v3 - with: - path: | - /tmp/.gradle/caches - /tmp/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Install the Dev Container CLI - run: npm install -g @devcontainers/cli@0.49.0 - - - name: Start the dev container - run: | - mkdir -p \ - /tmp/.yarn/cache \ - /tmp/.cache/R/renv/cache \ - /tmp/.cache/pypoetry \ - /tmp/.local/share/virtualenv \ - /tmp/.gradle/caches \ - /tmp/.gradle/wrapper - - devcontainer up \ - --mount type=bind,source=/tmp/.yarn/cache,target=/workspaces/sage-monorepo/.yarn/cache \ - --mount type=bind,source=/tmp/.cache/R/renv/cache,target=/home/vscode/.cache/R/renv/cache \ - --mount type=bind,source=/tmp/.cache/pypoetry,target=/home/vscode/.cache/pypoetry \ - --mount type=bind,source=/tmp/.local/share/virtualenv,target=/home/vscode/.local/share/virtualenv \ - --mount type=bind,source=/tmp/.gradle/caches,target=/home/vscode/.gradle/caches \ - --mount type=bind,source=/tmp/.gradle/wrapper,target=/home/vscode/.gradle/wrapper \ - --workspace-folder ../sage-monorepo - - - name: Prepare the workspace - run: | - devcontainer exec --workspace-folder ../sage-monorepo bash -c " - sudo chown -R vscode:vscode \ - /workspaces/sage-monorepo \ - /home/vscode/.cache \ - /home/vscode/.local \ - /home/vscode/.gradle \ - && . ./dev-env.sh \ - && workspace-install-affected" + - uses: ./.github/actions/setup-dev-container - name: Lint the affected projects run: | @@ -161,78 +90,7 @@ jobs: - name: Derive appropriate SHAs for base and head for `nx affected` commands uses: nrwl/nx-set-shas@v3 - - name: Set up Yarn cache - uses: actions/cache@v3 - with: - path: '/tmp/.yarn/cache' - key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }} - restore-keys: | - ${{ runner.os }}-yarn- - - - name: Set up Renv cache - uses: actions/cache@v3 - with: - path: '/tmp/.cache/R/renv/cache' - key: ${{ runner.os }}-renv-cache-${{ hashFiles('**/renv.lock') }} - restore-keys: | - ${{ runner.os }}-renv-cache- - - - name: Set up Poetry cache - uses: actions/cache@v3 - with: - path: '/tmp/.cache/pypoetry' - key: ${{ runner.os }}-poetry-${{ hashFiles('**/poetry.lock') }} - - - name: Set up venv cache - uses: actions/cache@v3 - with: - path: | - /tmp/.local/share/virtualenv - **/.venv - key: ${{ runner.os }}-venv-${{ hashFiles('**/poetry.lock') }} - - - name: Set up Gradle cache - uses: actions/cache@v3 - with: - path: | - /tmp/.gradle/caches - /tmp/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle- - - - name: Install the Dev Container CLI - run: npm install -g @devcontainers/cli@0.49.0 - - - name: Start the dev container - run: | - mkdir -p \ - /tmp/.yarn/cache \ - /tmp/.cache/R/renv/cache \ - /tmp/.cache/pypoetry \ - /tmp/.local/share/virtualenv \ - /tmp/.gradle/caches \ - /tmp/.gradle/wrapper - - devcontainer up \ - --mount type=bind,source=/tmp/.yarn/cache,target=/workspaces/sage-monorepo/.yarn/cache \ - --mount type=bind,source=/tmp/.cache/R/renv/cache,target=/home/vscode/.cache/R/renv/cache \ - --mount type=bind,source=/tmp/.cache/pypoetry,target=/home/vscode/.cache/pypoetry \ - --mount type=bind,source=/tmp/.local/share/virtualenv,target=/home/vscode/.local/share/virtualenv \ - --mount type=bind,source=/tmp/.gradle/caches,target=/home/vscode/.gradle/caches \ - --mount type=bind,source=/tmp/.gradle/wrapper,target=/home/vscode/.gradle/wrapper \ - --workspace-folder ../sage-monorepo - - - name: Prepare the workspace - run: | - devcontainer exec --workspace-folder ../sage-monorepo bash -c " - sudo chown -R vscode:vscode \ - /workspaces/sage-monorepo \ - /home/vscode/.cache \ - /home/vscode/.local \ - /home/vscode/.gradle \ - && . ./dev-env.sh \ - && workspace-install" + - uses: ./.github/actions/setup-dev-container - name: Lint the affected projects run: |