Skip to content

Main build

Main build #103

Workflow file for this run

#
# Copyright contributors to the Galasa project
#
# SPDX-License-Identifier: EPL-2.0
#
name: Main build
on:
workflow_dispatch:
push:
branches: [main]
env:
REGISTRY: ghcr.io
NAMESPACE: galasa-dev
BRANCH: ${{ github.ref_name }}
jobs:
log-github-ref:
name: Log the GitHub ref this workflow is running on (Branch or tag that received dispatch)
runs-on: ubuntu-latest
steps:
- name: Log GitHub ref of workflow
run: |
echo "This workflow is running on GitHub ref ${{ env.BRANCH }}"
build-cli:
name: Build the Galasa CLI
runs-on: ubuntu-latest
steps:
- name: Checkout CLI
uses: actions/checkout@v4
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
with:
gradle-version: 8.9
cache-disabled: true
# Pull down dependencies with Gradle and put them in the right places.
- name: Gather dependencies using Gradle
run : |
set -o pipefail
gradle -b build.gradle installJarsIntoTemplates --info \
--no-daemon --console plain \
-PsourceMaven=https://development.galasa.dev/${{ env.BRANCH }}/maven-repo/obr \
-PcentralMaven=https://repo.maven.apache.org/maven2/ \
-PtargetMaven=${{ github.workspace }}/repo 2>&1 | tee build.log
- name: Upload Gradle installJarsIntoTemplates log
if: failure()
uses: actions/upload-artifact@v4
with:
name: gradle-installJarsIntoTemplates-log
path: build.log
retention-days: 7
# Generate client code so galasactl can communicate with the API server.
- name: Generate Go client code using openapi.yaml
run : |
docker run --rm -v ${{ github.workspace }}:/var/workspace ghcr.io/galasa-dev/openapi:main java -jar /opt/openapi/openapi-generator-cli.jar generate -i /var/workspace/build/dependencies/openapi.yaml -g go -o /var/workspace/pkg/galasaapi --additional-properties=packageName=galasaapi --global-property=apiTests=false
# The go.mod and go.sum are out of date, as they do not include the generated code so they are deleted here. They get re-generated when we compile.
# Due to permissions, deleting the go.mod and go.sum must be done by the openapi image as the image generated those files.
- name: Clear go.mod
run : |
docker run --rm -v ${{ github.workspace }}:/var/workspace ghcr.io/galasa-dev/openapi:main rm /var/workspace/pkg/galasaapi/go.mod
- name: Clear go.sum
run : |
docker run --rm -v ${{ github.workspace }}:/var/workspace ghcr.io/galasa-dev/openapi:main rm /var/workspace/pkg/galasaapi/go.sum
# The go code needs to know which version of Galasa it is part of, so substitute an eye-catcher with the correct value.
- name: Update version
run : |
version=$(cat VERSION) &&
cat pkg/cmd/root.go | sed "s/unknowncliversion-unknowngithash/${version}/1" > temp.txt &&
mv -f temp.txt pkg/cmd/root.go &&
cat pkg/cmd/root.go
# Invoke the make command to build the go code, run unit tests and gather code coverage stats.
- name: Build Go code with the Makefile
run : |
make all
- name: Set up JDK
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'semeru'
- name: Chmod local test script
run: |
chmod +x test-galasactl-local.sh
- name: Run local test script with Maven
run : |
./test-galasactl-local.sh --buildTool maven
- name: Run local test script with Gradle
run : |
./test-galasactl-local.sh --buildTool gradle
# Commenting out for now as we cannot reach the prod1 ecosystem from GitHub Actions.
# - name: Chmod ecosystem test script
# run : |
# chmod +x test-galasactl-ecosystem.sh
# - name: Run ecosystem test script
# run : |
# ./test-galasactl-ecosystem.sh --bootstrap https://prod1-galasa-dev.cicsk8s.hursley.ibm.com/api/bootstrap
- name: Login to Github Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: galasa-team
password: ${{ secrets.GALASA_TEAM_WRITE_PACKAGES_TOKEN }}
- name: Extract metadata for galasactl image
id: metadata-galasactl
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/galasactl-x86_64
- name: Build galasactl image
id: build-galasactl
uses: docker/build-push-action@v5
with:
context: .
file: dockerfiles/dockerfile.galasactl
push: true
tags: ${{ steps.metadata-galasactl.outputs.tags }}
labels: ${{ steps.metadata-galasactl.outputs.labels }}
build-args: |
platform=linux-x86_64
- name: Extract metadata for galasactl-ibm image
id: metadata-galasactl-ibm
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/galasactl-ibm-x86_64
- name: Build galasactl-ibm image
id: build-galasactl-ibm
uses: docker/build-push-action@v5
with:
context: dockerfiles/certs
file: dockerfiles/dockerfile.galasactl-ibm
push: true
tags: ${{ steps.metadata-galasactl-ibm.outputs.tags }}
labels: ${{ steps.metadata-galasactl-ibm.outputs.labels }}
build-args: |
dockerRepository=ghcr.io
tag=${{ env.BRANCH }}
- name: Extract metadata for galasactl-executables image
id: metadata-galasactl-executables
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/galasactl-executables
- name: Build galasactl-executables image
id: build-galasactl-executables
uses: docker/build-push-action@v5
with:
context: .
file: dockerfiles/dockerfile.galasactl-executables
push: true
tags: ${{ steps.metadata-galasactl-executables.outputs.tags }}
labels: ${{ steps.metadata-galasactl-executables.outputs.labels }}
- name: Recycle application in ArgoCD
env:
ARGOCD_AUTH_TOKEN: ${{ secrets.ARGOCD_TOKEN }}
run: |
docker run --env ARGOCD_AUTH_TOKEN=${{ env.ARGOCD_AUTH_TOKEN }} --rm -v ${{ github.workspace }}:/var/workspace ghcr.io/galasa-dev/argocdcli:main app actions run ${{ env.BRANCH }}-cli restart --kind Deployment --resource-name cli-${{ env.BRANCH }} --server argocd.galasa.dev
- name: Wait for application health in ArgoCD
env:
ARGOCD_AUTH_TOKEN: ${{ secrets.ARGOCD_TOKEN }}
run: |
docker run --env ARGOCD_AUTH_TOKEN=${{ env.ARGOCD_AUTH_TOKEN }} --rm -v ${{ github.workspace }}:/var/workspace ghcr.io/galasa-dev/argocdcli:main app wait ${{ env.BRANCH }}-cli --resource apps:Deployment:cli-${{ env.BRANCH }} --health --server argocd.galasa.dev
build-galasactl-ibm-testing-image-and-trigger-tekton-pipeline:
name: Build image containing galasactl, OpenJDK and Gradle for testing
runs-on: ubuntu-latest
needs: build-cli
steps:
- name: Checkout CLI
uses: actions/checkout@v4
- name: Login to Github Container Registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: galasa-team
password: ${{ secrets.GALASA_TEAM_WRITE_PACKAGES_TOKEN }}
- name: Extract metadata for galasactl-ibm-testing image
id: meta
uses: docker/metadata-action@9ec57ed1fcdbf14dcef7dfbe97b2010124a938b7
with:
images: ${{ env.REGISTRY }}/${{ env.NAMESPACE }}/galasactl-ibm-x86_64-testing
- name: Build galasactl-ibm-testing image
id: build
uses: docker/build-push-action@v5
with:
context: .
file: dockerfiles/dockerfile.galasactl-ibm-testing
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
build-args: |
branch=${{ env.BRANCH }}
- name: Attempt to trigger test-cli-ecosystem-commands Tekton pipeline
run: |
echo "The Tekton pipeline test-cli-ecosystem-commands should be triggered in the next 2-minutes - check the Tekton dashboard"
report-failure:
name: Report failure in workflow
runs-on: ubuntu-latest
needs: [log-github-ref, build-cli, build-galasactl-ibm-testing-image-and-trigger-tekton-pipeline]
if: failure()
steps:
- name: Report failure in workflow to Slack
env:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
run : |
docker run --rm -v ${{ github.workspace }}:/var/workspace ghcr.io/galasa-dev/galasabld-ibm:main slackpost workflows --repo "cli" --workflowName "${{ github.workflow }}" --workflowRunNum "${{ github.run_id }}" --ref "${{ env.BRANCH }}" --hook "${{ env.SLACK_WEBHOOK }}"