Github Actions on Pull Requests
Github Actions can be created for the following workflows:
- Setup vCluster: Installs the
vCluster
CLI - Setup DevSpace: Installs the
DevSpace
CLI
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 login $LOFT_URL --access-key $ACCESS_KEY
- name: Create PR Virtual Cluster
env:
NAME: pr-${{ github.event.pull_request.number }}-${{ github.sha }}-${{ github.run_id }}
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: pr-${{ github.event.pull_request.number }}-${{ github.sha }}-${{ github.run_id }}
run: vcluster delete $NAME --project default
Explanation:
- The Setup vCluster action is used to install the vCluster CLI.
- The
vcluster login
command is used to log in to the organization's platform instance. Environment variablesLOFT_URL
andACCESS_KEY
are populated using GitHub secrets. See Access Keys for help generating a platform access key. - The
vcluster create
command is used to create a unique virtual cluster using information about the pull request in thedefault
project. This automatically configures the kube context for the next steps. - The next step deploys the application using the runner provided
kubectl
and manifests located under./kubernetes
. - Before running tests, use
kubectl
to wait for thethe-app
deployment to become ready. - Now, run the end-to-end tests. The example uses
make
to run tests, but the command should be customized for your testing framework. - Finally, the
vcluster delete
command 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 login $LOFT_URL --access-key $ACCESS_KEY
- name: Create PR Virtual Cluster
env:
NAME: pr-${{ github.event.pull_request.number }}-${{ github.sha }}-${{ github.run_id }}
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 login
command is used to log in to the organization's platform instance. Environment variablesLOFT_URL
andACCESS_KEY
are populated using GitHub secrets. - The
vcluster create
command is used to create a unique virtual cluster using information about the pull request in thedefault
project. This automatically configures the kube context for the next steps. The--upgrade
flag 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
kubectl
and manifests located under./kubernetes
. - Before running tests, use
kubectl
to wait for thethe-app
deployment to become ready. - Now, run the end-to-end tests. The example uses
make
to 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: pr-${{ github.event.pull_request.number }}-${{ github.sha }}-${{ github.run_id }}
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
url
andaccess-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-cleanup
option is enabled, which deletes the virtual cluster after the job completes. - The next step deploys the application using the runner provided
kubectl
and manifests located under./kubernetes
. - Before running tests, use
kubectl
to wait for thethe-app
deployment to become ready. - Finally, run the end-to-end tests. This example uses
make
to run tests, but the command should be customized for your testing framework. There's no need to delete the virtual cluster since theauto-cleanup
option 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 login $LOFT_URL --access-key $ACCESS_KEY
- name: Create PR Virtual Cluster
env:
NAME: pr-${{ github.event.pull_request.number }}-${{ github.sha }}-${{ github.run_id }}
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 login
command is used to log in to the organization's platform instance. Environment variablesLOFT_URL
andACCESS_KEY
are populated using GitHub secrets. - The
vcluster create
command is used to create a unique virtual cluster using information about the pull request in thedefault
project. This automatically configures the kube context for the next steps. - Finally, use
devspace run e2e
to perform the needed steps to deploy and testmy-app
.