Skip to content

Test new juju candidates #334

Test new juju candidates

Test new juju candidates #334

name: Test new juju candidates
on:
schedule:
- cron: "0 0 * * *" # Run at 12AM UTC, every day
# Testing only needs permissions to read the repository contents.
permissions:
contents: read
jobs:
# Ensure project builds before running testing matrix
test-candidates:
name: Build
runs-on: ubuntu-latest
timeout-minutes: 60
strategy:
fail-fast: false
max-parallel: 4
matrix:
juju-risk:
- "edge"
terraform:
- "1.6.*"
include:
- cloud: "lxd"
cloud-channel: "5.19/stable"
juju-track: "2.9"
- cloud: "microk8s"
cloud-channel: "1.28/stable"
juju-track: "2.9"
- cloud: "lxd"
cloud-channel: "5.19/stable"
juju-track: "3.1"
- cloud: "microk8s"
cloud-channel: "1.28-strict/stable"
juju-track: "3.1"
steps:
- name: Set channel and artifact id
run: |
channel=$(echo ${{ matrix.juju-track }}/${{ matrix.juju-risk }})
echo "Target channel is $channel"
echo "channel=$channel" >> $GITHUB_ENV
terraform_version=$(echo ${{ matrix.terraform }} | awk -F'\.' '{print $1$2}')
id=$(echo ${{ github.sha }}-${{ matrix.juju-track }}-${{ matrix.juju-risk }}-$terraform_version)
echo "Target id is $id"
echo "id=$id" >> $GITHUB_ENV
- name: Checkout branch
uses: actions/checkout@v4
with:
ref: ${{ env.juju-track }}
- name: Download artifact
uses: dawidd6/action-download-artifact@v2
id: download_artifact
with:
name: ${{ env.id }}
if_no_artifact_found: ignore
workflow_conclusion: success
- name: Check latest juju version tested
shell: bash
run: |
candidate=$(snap info juju | grep ${{ env.channel }} | awk '{print $2}')
last_tested=NA
if [ -f ${{ env.id }} ]; then
last_tested=$(cat ${{ env.id }})
fi
echo "Last tested was $last_tested"
echo "Latest juju version found is $candidate"
next_test=NA
if [[ "$candidate" == "^" ]]; then
echo "No candidate to test"
else
if [[ "$candidate" == "$last_tested" ]]; then
echo "Candidate $candidate was already tested"
else
echo "Candidate $candidate has to be tested"
next_test="$candidate"
fi
fi
echo "next-test=$next_test" >> $GITHUB_ENV
echo "$next_test" > ~/${{ env.id }}
- name: Setup go
if: ${{ env.next-test != 'NA' }}
uses: actions/setup-go@v5
with:
go-version-file: "go.mod"
cache: true
- name: Install terraform
if: ${{ env.next-test != 'NA' }}
uses: hashicorp/setup-terraform@v3
with:
terraform_version: ${{ matrix.terraform }}
terraform_wrapper: false
- name: Install target juju
if: ${{ env.next-test != 'NA' }}
uses: charmed-kubernetes/actions-operator@main
with:
provider: ${{ matrix.cloud }}
channel: ${{ matrix.cloud-channel }}
juju-channel: ${{ env.channel }}
- name: "Set environment to configure provider"
if: ${{ env.next-test != 'NA' }}
# language=bash
run: |
CONTROLLER=$(juju whoami --format yaml | yq .controller)
echo "JUJU_CONTROLLER_ADDRESSES=$(juju show-controller | yq .$CONTROLLER.details.api-endpoints | yq -r '. | join(",")')" >> $GITHUB_ENV
echo "JUJU_USERNAME=$(juju show-controller | yq .$CONTROLLER.account.user)" >> $GITHUB_ENV
echo "JUJU_PASSWORD=$(cat ~/.local/share/juju/accounts.yaml | yq .controllers.$CONTROLLER.password)" >> $GITHUB_ENV
echo "JUJU_CA_CERT<<EOF" >> $GITHUB_ENV
juju show-controller | yq .$CONTROLLER.details.ca-cert >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Run integration tests
if: ${{ env.next-test != 'NA' }}
id: test
env:
TF_ACC: "1"
TEST_CLOUD: ${{ matrix.cloud }}
run: go test -timeout 40m -v -cover ./internal/provider/
timeout-minutes: 40
- uses: actions/upload-artifact@v3
if: ${{ success() }}
with:
name: ${{ env.id }}
path: "~/${{ env.id }}"