Skip to content

Merge pull request #18531 from wallyworld/backport-govuln-fix #854

Merge pull request #18531 from wallyworld/backport-govuln-fix

Merge pull request #18531 from wallyworld/backport-govuln-fix #854

Workflow file for this run

name: "Migrate"
on:
push:
branches: [2.*, 3.*, 4.*, main]
pull_request:
types: [opened, synchronize, reopened, ready_for_review]
paths:
- '**.go'
- 'go.mod'
- 'snap/**'
- '.github/workflows/migrate.yml'
- 'scripts/dqlite/**'
- 'Makefile'
- 'make_functions.sh'
workflow_dispatch:
permissions:
contents: read
jobs:
migrate:
name: migrate from ${{ matrix.channel }} via ${{ matrix.client }} client
timeout-minutes: 30
runs-on: [self-hosted, linux, arm64, aws, xlarge]
if: github.event.pull_request.draft == false
strategy:
fail-fast: false
matrix:
# TODO: add microk8s tests
cloud: ["lxd"]
channel: ["2.9/stable", "3.1/stable"]
client: ['source', 'target']
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version-file: 'go.mod'
cache: true
- name: Set up Go env
run: |
echo "GOPATH=$(go env GOPATH)" >> $GITHUB_ENV
echo "$(go env GOPATH)/bin" >> $GITHUB_PATH
- name: Setup LXD
if: matrix.cloud == 'lxd'
uses: canonical/setup-lxd@4e959f8e0d9c5feb27d44c5e4d9a330a782edee0
- name: Wait for LXD
if: matrix.cloud == 'lxd'
run: |
while ! ip link show lxdbr0; do
echo "Waiting for lxdbr0..."
sleep 10
done
- name: Install Juju ${{ matrix.channel }}
run: |
mkdir -p ~/.local/share/juju
if [[ ${{ matrix.channel }} == '2.9/stable' ]]; then
sudo snap install juju --classic --channel ${{ matrix.channel }}
else
sudo snap install juju --channel ${{ matrix.channel }}
fi
- name: Bootstrap a ${{ matrix.channel }} controller and model
run: |
/snap/bin/juju version
/snap/bin/juju bootstrap lxd source-controller --constraints "arch=$(go env GOARCH)"
/snap/bin/juju add-model test-migrate
/snap/bin/juju set-model-constraints arch=$(go env GOARCH)
/snap/bin/juju deploy ubuntu
- name: Install target juju client
run: |
make go-install &>/dev/null
- name: Bootstrap target controller
run: |
juju version
juju bootstrap lxd target-controller --constraints "arch=$(go env GOARCH)"
juju switch controller
juju wait-for application controller
- name: Migrate model to target controller
run: |
# Determine which Juju client to use
JUJU='juju'
if [[ ${{ matrix.client }} == 'source' ]]; then
JUJU='/snap/bin/juju'
fi
$JUJU switch source-controller
# Ensure application is fully deployed
# We have to use the old client to speak to the new controller, as
# this is blocked otherwise.
$JUJU wait-for application ubuntu
# Wait a few secs for the machine status to update
# so that migration prechecks pass.
sleep 10
$JUJU version
$JUJU migrate test-migrate target-controller
- name: Check the migration was successful
run: |
set -x
juju switch target-controller
# Wait for 'test-migrate' model to come through
attempt=0
while true; do
RES=$(juju models | grep 'test-migrate' || true)
if [[ -n $RES ]]; then
break
fi
sleep 5
attempt=$((attempt+1))
if [ "$attempt" -eq 10 ]; then
echo "Migration timed out"
exit 1
fi
done
juju switch test-migrate
juju wait-for application ubuntu
juju deploy ubuntu yet-another-ubuntu
juju wait-for application yet-another-ubuntu