mirror of
https://github.com/redhat-developer/odo.git
synced 2025-10-19 03:06:19 +03:00
Add GH Workflow that spins up/tears down OCP clusters on IBM Cloud
This is work-in-progress and committed to test the pull-request_target workflow on approved (manually or automatically) PRs.
This commit is contained in:
110
.github/workflows/ci-remote-clusters.yaml
vendored
Normal file
110
.github/workflows/ci-remote-clusters.yaml
vendored
Normal file
@@ -0,0 +1,110 @@
|
|||||||
|
name: CI (Remote Clusters)
|
||||||
|
|
||||||
|
on:
|
||||||
|
# /!\ Warning: using the pull_request_target event to be able to read secrets. But using this event without the cautionary measures described below
|
||||||
|
# may allow unauthorized GitHub users to open a “pwn request” and exfiltrate secrets.
|
||||||
|
# As recommended in https://iterative.ai/blog/testing-external-contributions-using-github-actions-secrets,
|
||||||
|
# we are adding an 'authorize' job that checks if the workflow was triggered from a fork PR. In that case, the "external" environment
|
||||||
|
# will prevent the job from running until it's approved manually by human intervention.
|
||||||
|
pull_request_target:
|
||||||
|
branches: [ main ]
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.event.number }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
IBM_CLOUD_API_KEY: ${{ secrets.IC_API_KEY }}
|
||||||
|
IBM_CLOUD_REGION: 'eu-de'
|
||||||
|
CLUSTER_NAME: "odo-tests-openshift-cluster-tmp-pr-${{ github.event.number }}"
|
||||||
|
PR_HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
||||||
|
PR_NUMBER: ${{ github.event.number }}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
authorize:
|
||||||
|
# The 'external' environment is configured with the odo-maintainers team as required reviewers.
|
||||||
|
# All the subsequent jobs in this workflow 'need' this job, which will require manual approval for PRs coming from external forks.
|
||||||
|
# TODO(rm3l): list of authorized users that do not require manual review comes from the maintainers team and various robot accounts that handle automation in the repo => find a better way not to hardcode this list!
|
||||||
|
environment:
|
||||||
|
${{ (github.event.pull_request.head.repo.full_name == github.repository ||
|
||||||
|
contains(fromJSON('["odo-robot[bot]", "openshift-ci[bot]", "openshift-merge-robot", "openshift-ci-robot", "kadel", "rm3l"]'), github.actor)) &&
|
||||||
|
'internal' || 'external' }}
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- run: echo ✓
|
||||||
|
|
||||||
|
build_odo:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: authorize
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.head.sha || github.ref }}
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v4
|
||||||
|
with:
|
||||||
|
go-version-file: 'go.mod'
|
||||||
|
- name: Build odo
|
||||||
|
run: make bin
|
||||||
|
- run: |
|
||||||
|
chmod +x ./odo
|
||||||
|
./odo version
|
||||||
|
- name: 'Upload odo'
|
||||||
|
uses: actions/upload-artifact@v3
|
||||||
|
with:
|
||||||
|
name: odo_bin
|
||||||
|
path: odo
|
||||||
|
retention-days: 1
|
||||||
|
if-no-files-found: error
|
||||||
|
|
||||||
|
openshift_tests:
|
||||||
|
# TODO(rm3l): Test on Windows and test unauth as well?
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
needs: [authorize, build_odo]
|
||||||
|
env:
|
||||||
|
KUBERNETES: "false"
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
ref: ${{ github.event.pull_request.head.sha || github.ref }}
|
||||||
|
- name: Setup Go
|
||||||
|
uses: actions/setup-go@v4
|
||||||
|
with:
|
||||||
|
go-version-file: 'go.mod'
|
||||||
|
- name: Install IBM Cloud CLI
|
||||||
|
run: |
|
||||||
|
curl -fsSL https://clis.cloud.ibm.com/install/linux | sh
|
||||||
|
ibmcloud --version
|
||||||
|
ibmcloud config --check-version=false
|
||||||
|
ibmcloud plugin install -f kubernetes-service
|
||||||
|
- name: Authenticate with IBM Cloud CLI
|
||||||
|
run: ibmcloud login --apikey "${IBM_CLOUD_API_KEY}" -r "$IBM_CLOUD_REGION" --quiet
|
||||||
|
- name: Download odo from previous job
|
||||||
|
uses: actions/download-artifact@v3
|
||||||
|
with:
|
||||||
|
name: odo_bin
|
||||||
|
- name: Set odo in system path
|
||||||
|
run: |
|
||||||
|
chmod a+x ./odo
|
||||||
|
sudo mv ./odo /usr/local/bin/odo
|
||||||
|
- run: ibmcloud ks infra-permissions get --region "$IBM_CLOUD_REGION"
|
||||||
|
- name: Create OpenShift Cluster
|
||||||
|
run: |
|
||||||
|
ibmcloud oc cluster create classic --name "${CLUSTER_NAME}" \
|
||||||
|
--location wdc04 \
|
||||||
|
--version "4.13_openshift" \
|
||||||
|
--flavor b3c.4x16 \
|
||||||
|
--workers 1 \
|
||||||
|
--public-service-endpoint
|
||||||
|
- name: Generate Kubeconfig
|
||||||
|
run: |
|
||||||
|
ibmcloud ks cluster config --cluster "${CLUSTER_NAME}"
|
||||||
|
kubectl config current-context
|
||||||
|
- name: Cluster Integration Tests
|
||||||
|
run: make test-integration-cluster
|
||||||
|
- name: End-to-end Tests
|
||||||
|
run: test-e2e
|
||||||
|
- name: Teardown cluster
|
||||||
|
if: ${{ always() }}
|
||||||
|
run: |
|
||||||
|
ibmcloud oc cluster rm --cluster "${CLUSTER_NAME}" -f --force-delete-storage
|
||||||
Reference in New Issue
Block a user