GitHub actions on pull requests
Limited vCluster Tenancy Configuration Support
This feature is only available when using the following worker node types:
GitHub Actions can be created for the following workflows:
- Setup vCluster: Installs the vClusterCLI
- Setup DevSpace: Installs the DevSpaceCLI
Deploying virtual clusters on pull requests​
These examples show how to create and delete Virtual Clusters for pull requests.
- Basic
- Automatic Cleanup
- Reuse
This example shows how to create and delete a virtual cluster for testing an application named the-app on pull requests.
# .github/workflows/vclusters.yaml
name: Pull Request Checks
on:
  pull_request:
    branches:
      - "main"
jobs:
  e2e:
    runs-on: ubuntu-latest
    steps:
      - name: Install vCluster CLI
        uses: loft-sh/setup-vcluster@main
      - name: Login to vCluster Platform instance
        env:
          LOFT_URL: ${{ secrets.LOFT_URL }}
          ACCESS_KEY: ${{ secrets.ACCESS_KEY }}
        run: vcluster platform login $LOFT_URL --access-key $ACCESS_KEY
      - name: Create PR Virtual Cluster
        env:
          NAME: repo-${{ github.event.repository.name }}-pr-${{ github.event.pull_request.number }}
        run: vcluster create $NAME --project default
      - name: Deploy Application
        run: kubectl apply -Rf ./kubernetes
      - name: Wait for Deployment
        run: kubectl rollout status deployments/the-app
      - name: Run Tests
        run: make e2e
      - name: Delete PR Virtual Cluster
        env:
          NAME: repo-${{ github.event.repository.name }}-pr-${{ github.event.pull_request.number }}
        run: vcluster delete $NAME --project default
Explanation:
- The Setup vCluster action is used to install the vCluster CLI.
- The vcluster platform logincommand is used to log in to the organization's platform instance. Environment variablesLOFT_URLandACCESS_KEYare populated using GitHub secrets. See Access Keys for help generating a platform access key.
- The vcluster createcommand is used to create a unique virtual cluster using information about the pull request in thedefaultproject. This automatically configures the kube context for the next steps.
- The next step deploys the application using the runner provided kubectland manifests located under./kubernetes.
- Before running tests, use kubectlto wait for thethe-appdeployment to become ready.
- Now, run the end-to-end tests. The example uses maketo run tests, but the command should be customized for your testing framework.
- Finally, the vcluster deletecommand is used to delete the virtual cluster.
This example shows how to create and reuse a virtual cluster for testing an application named the-app on pull requests.
# .github/workflows/vclusters.yaml
name: Pull Request Checks
on:
  pull_request:
    branches:
      - "main"
jobs:
  e2e:
    runs-on: ubuntu-latest
    steps:
      - name: Install vCluster CLI
        uses: loft-sh/setup-vcluster@main
      - name: Login to vCluster Platform instance
        env:
          LOFT_URL: ${{ secrets.LOFT_URL }}
          ACCESS_KEY: ${{ secrets.ACCESS_KEY }}
        run: vcluster platform login $LOFT_URL --access-key $ACCESS_KEY
      - name: Create PR Virtual Cluster
        env:
          NAME: repo-${{ github.event.repository.name }}-pr-${{ github.event.pull_request.number }}
        run: vcluster create $NAME --project default --upgrade
      - name: Deploy Application
        run: kubectl apply -Rf ./kubernetes
      - name: Wait for Deployment
        run: kubectl rollout status deployments/the-app
      - name: Run Tests
        run: make e2e
Explanation:
- The Setup vCluster action is used to install the vCluster CLI.
- The vcluster platform logincommand is used to log in to the organization's platform instance. Environment variablesLOFT_URLandACCESS_KEYare populated using GitHub secrets.
- The vcluster createcommand is used to create a unique virtual cluster using information about the pull request in thedefaultproject. This automatically configures the kube context for the next steps. The--upgradeflag has been added to reuse the existing virtual cluster and upgrade it to the latest version. Additional flags may be used to control the desired virtual cluster version.
- The next step deploys the application using the runner provided kubectland manifests located under./kubernetes.
- Before running tests, use kubectlto wait for thethe-appdeployment to become ready.
- Now, run the end-to-end tests. The example uses maketo run tests, but the command should be customized for your testing framework.
This example shows how to automatically delete a Virtual Cluster after testing an application named the-app for pull requests.
# .github/workflows/vclusters.yaml
name: Pull Request Checks
on:
  pull_request:
    branches:
      - 'main'
jobs:
  e2e:
    runs-on: ubuntu-latest
    steps:
      - name: Install vCluster CLI
        uses: loft-sh/setup-loft@main
        with:
          url: ${{ secrets.LOFT_URL }}
          access-key: ${{ secrets.LOFT_ACCESS_KEY }}
      - name: Create Virtual Cluster for PR
        uses: loft-sh/create-vcluster@main
        with:
          name: repo-${{ github.event.repository.name }}-pr-${{ github.event.pull_request.number }}
          auto-cleanup: true
      - name: Deploy Application
        run: kubectl apply -Rf ./kubernetes
      - name: Wait for Deployment
        run: kubectl rollout status deployments/the-app
      - name: Run Tests
        run: make e2e
Explanation:
- The Setup Loft action is used to install the vCluster CLI and login using the provided urlandaccess-key.
- The Create Virtual Cluster action is used to create a unique virtual cluster using information about the pull request. This automatically configures the kube context for the following steps. Additionally, the auto-cleanupoption is enabled, which deletes the virtual cluster after the job completes.
- The next step deploys the application using the runner provided kubectland manifests located under./kubernetes.
- Before running tests, use kubectlto wait for thethe-appdeployment to become ready.
- Finally, run the end-to-end tests. This example uses maketo run tests, but the command should be customized for your testing framework. There's no need to delete the virtual cluster since theauto-cleanupoption was used when creating the virtual cluster.
DevSpace for running tests on pull requests​
This example shows how use the Setup DevSpace GitHub Action to install the DevSpace CLI and DevSpace commands to run tests.
# .github/workflows/vclusters.yaml
name: Pull Request Checks
on:
  pull_request:
    branches:
      - "main"
jobs:
  e2e:
    runs-on: ubuntu-latest
    steps:
      - name: Install DevSpace CLI
        uses: loft-sh/setup-devspace@main
      - name: Install vCluster CLI
        uses: loft-sh/setup-vcluster@main
      - name: Login to platform instance
        env:
          LOFT_URL: ${{ secrets.LOFT_URL }}
          ACCESS_KEY: ${{ secrets.ACCESS_KEY }}
        run: vcluster platform login $LOFT_URL --access-key $ACCESS_KEY
      - name: Create PR Virtual Cluster
        env:
          NAME: repo-${{ github.event.repository.name }}-pr-${{ github.event.pull_request.number }}
        run: vcluster create $NAME --project default
      - name: Run Tests
        run: devspace run e2e
Explanation:
- The Setup DevSpace action installs the DevSpace CLI.
- The Setup vCluster action is used to install the vCluster CLI.
- The vcluster platform logincommand is used to log in to the organization's platform instance. Environment variablesLOFT_URLandACCESS_KEYare populated using GitHub secrets.
- The vcluster createcommand is used to create a unique virtual cluster using information about the pull request in thedefaultproject. This automatically configures the kube context for the next steps.
- Finally, use devspace run e2eto perform the needed steps to deploy and testmy-app.