Skip to content

Build vSphere templates for Konvoy E2E tests #131

Build vSphere templates for Konvoy E2E tests

Build vSphere templates for Konvoy E2E tests #131

# Builds vSphere image template when a release tag is created
name: Build vSphere templates for Konvoy E2E tests
on:
workflow_dispatch:
push:
tags:
- 'v*'
jobs:
build-e2e:
strategy:
fail-fast: false
max-parallel: 10
matrix:
include:
# - os: "redhat 8.6"
# buildConfig: "offline"
# - os: "redhat 8.6"
# buildConfig: "offline-fips"
# - os: "redhat 8.8"
# buildConfig: "offline"
# - os: "redhat 8.8"
# buildConfig: "offline-fips"
# - os: "ubuntu 20.04"
# buildConfig: "basic"
# - os: "ubuntu 22.04"
# buildConfig: "basic"
# - os: "rocky 9.1"
# buildConfig: "offline"
- os: "oracle 9.4"
buildConfig: "offline"
- os: "oracle 9.4"
buildConfig: "offline-fips"
# - os: "flatcar"
# buildConfig: "basic"
runs-on:
- self-hosted
- medium
continue-on-error: false
steps:
- name: Checkout konvoy-image-builder repository
uses: actions/checkout@v4
with:
fetch-depth: 0
ref: ${{ github.ref }}
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
cache: true
- name: Login to dockerhub Registry
uses: docker/login-action@v3
with:
username: ${{ secrets.NEXUS_USERNAME }}
password: ${{ secrets.NEXUS_PASSWORD }}
- name: Login to D2iQ's Mirror Registry
uses: docker/login-action@v3
with:
registry: ${{ secrets.D2IQ_DOCKER_MIRROR_REGISTRY}}
username: ${{ secrets.NEXUS_USERNAME }}
password: ${{ secrets.NEXUS_PASSWORD }}
- name: Setup buildkit
uses: docker/setup-buildx-action@v3
- name: Setup SSH agent with private key to connect with pre-configured bastion host
uses: webfactory/ssh-agent@v0.9.0
with:
ssh-private-key: ${{ secrets.SSH_BASTION_KEY_CONTENTS }}
# configure git to access private repo hosting vsphere module mesosphere/vcenter-tools
- name: Configure git to clone private registry from mesosphere org
run: |
git config --global url."https://git:${{ secrets.MESOSPHERECI_USER_TOKEN }}@github.com/mesosphere".insteadOf "https://github.com/mesosphere"
git config --global url."https://${{ secrets.MESOSPHERECI_USER_TOKEN }}:x-oauth-basic@github.com/mesosphere".insteadOf ssh://git@github.com/mesosphere
- name: Build vSphere template for ${{ matrix.os }} with ${{ matrix.buildConfig }} configuration
uses: magefile/mage-action@v3
with:
version: latest
args: runE2e "${{ matrix.os }}" "${{ matrix.buildConfig }}" ova false
env:
SSH_BASTION_KEY_CONTENTS: ${{ secrets.SSH_BASTION_KEY_CONTENTS }}
SSH_BASTION_PUBLIC_KEY_CONTENTS: ${{ secrets.SSH_BASTION_PUBLIC_KEY_CONTENTS }}
VSPHERE_USERNAME: ${{ secrets.VSPHERE_USERNAME }}
VSPHERE_USER: ${{ secrets.VSPHERE_USERNAME }} # required for terraform
VSPHERE_PASSWORD: ${{ secrets.VSPHERE_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.MESOSPHERECI_USER_TOKEN }}
VSPHERE_SERVER: ${{ secrets.VSPHERE_SERVER }}
VSPHERE_DATASTORE: ${{ secrets.VSPHERE_DATASTORE }}
RHSM_ACTIVATION_KEY: ${{ secrets.RHSM_ACTIVATION_KEY }}
RHSM_ORG_ID: ${{ secrets.RHSM_ORG_ID }}
- name: Run make destroy to clean up failed tests
if: ${{ always() }}
run: make infra.vsphere.destroy || true
env:
SSH_BASTION_PUBLIC_KEY_CONTENTS: ${{ secrets.SSH_BASTION_PUBLIC_KEY_CONTENTS }}
VSPHERE_USERNAME: ${{ secrets.VSPHERE_USERNAME }}
VSPHERE_USER: ${{ secrets.VSPHERE_USERNAME }} # required for terraform
VSPHERE_PASSWORD: ${{ secrets.VSPHERE_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.MESOSPHERECI_USER_TOKEN }}
VSPHERE_SERVER: ${{ secrets.VSPHERE_SERVER }}
VSPHERE_DATASTORE: ${{ secrets.VSPHERE_DATASTORE }}
VSPHERE_DATACENTER: ${{ secrets.VSPHERE_DATACENTER }}
- name: Extract vsphere template name
id: extract-template
shell: bash
run: |
export RELEASE_TEMPLATE=$(jq -r '.last_run_uuid as $runid | .builds[] | select(.packer_run_uuid==$runid).artifact_id' manifest.json)
echo "release_template=${RELEASE_TEMPLATE}" >> "$GITHUB_OUTPUT"
echo "Release template = $RELEASE_TEMPLATE"
echo "$GITHUB_OUTPUT"
- name: Upload template to VCD
uses: ./.github/composite/vcd-e2e/
env:
VCD_SERVER: ${{ secrets.VCD_SERVER }}
VCD_ORG_USERNAME: ${{ secrets.VCD_ORG_USERNAME }}
VCD_ORG_PASSWORD: ${{ secrets.VCD_ORG_PASSWORD }}
SSH_BASTION_KEY_CONTENTS: ${{ secrets.SSH_BASTION_KEY_CONTENTS }}
SSH_BASTION_PUBLIC_KEY_CONTENTS: ${{ secrets.SSH_BASTION_PUBLIC_KEY_CONTENTS }}
VSPHERE_USERNAME: ${{ secrets.VSPHERE_USERNAME }}
VSPHERE_USER: ${{ secrets.VSPHERE_USERNAME }} # required for terraform
VSPHERE_PASSWORD: ${{ secrets.VSPHERE_PASSWORD }}
GITHUB_TOKEN: ${{ secrets.MESOSPHERECI_USER_TOKEN }}
VSPHERE_SERVER: ${{ secrets.VSPHERE_SERVER }}
VSPHERE_DATASTORE: ${{ secrets.VSPHERE_DATASTORE }}
TEMPLATE_NAME_TO_UPLOAD: ${{ steps.extract-template.outputs.release_template }}