Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Deduplicate github actions #892

Merged
merged 11 commits into from
Dec 18, 2024
61 changes: 61 additions & 0 deletions .github/actions/download-k8s-snap/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: Download k8s-snap
louiseschmidtgen marked this conversation as resolved.
Show resolved Hide resolved

inputs:
# Download k8s-snap using either a GH action artifact or a snap channel.
artifact:
description: The name of a GH action artifact.
type: string
channel:
description: k8s snap channel.
type: string

outputs:
snap-path:
description: The *.snap destination path.
value: ${{ steps.retrieve-path.outputs.snap-path }}

runs:
using: "composite"
steps:
- name: Exit if no input provided
if: inputs.artifact == '' && inputs.channel == ''
shell: bash
run: |
echo "No k8s-snap artifact or channel specified..."
exit 1
- name: Exit if multiple inputs provided
if: inputs.artifact != '' && inputs.channel != ''
shell: bash
run: |
echo "Received snap artifact AND snap channel."
exit 1

petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
- name: Download snap artifact
if: inputs.artifact != ''
uses: actions/download-artifact@v4
with:
name: ${{ inputs.artifact }}
path: ${{ github.workspace }}

- name: Download snap channel
if: inputs.channel != ''
shell: bash
run: |
snap download k8s --channel=${{ inputs.channel }} --basename k8s
full_path=`realpath k8s.snap`
echo "Downloaded snap: $full_path"
ls -lh $full_path

- name: Retrieve resulting snap path
shell: bash
id: retrieve-path
run: |
if [[ -n "${{ inputs.artifact }}" ]]; then
snap_path="${{ github.workspace }}/${{ inputs.artifact }}"
else
snap_path="${{ github.workspace }}/k8s.snap"
fi
echo "snap-path=$snap_path" >> "$GITHUB_OUTPUT"

echo "Downloaded snap: $snap_path"
petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
ls -lh $snap_path
20 changes: 20 additions & 0 deletions .github/actions/install-lxd/action.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
name: Install lxd

runs:
using: "composite"
steps:
- name: Install lxd snap
shell: bash
run: |
sudo snap refresh lxd --channel 5.21/stable
petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
- name: Initialize lxd
shell: bash
run: |
sudo lxd init --auto
sudo usermod --append --groups lxd $USER
sg lxd -c 'lxc version'
- name: Apply Docker iptables workaround
shell: bash
run: |
petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
sudo iptables -I DOCKER-USER -i lxdbr0 -j ACCEPT
sudo iptables -I DOCKER-USER -o lxdbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
51 changes: 51 additions & 0 deletions .github/workflows/build-snap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
name: Build k8s-snap

on:
workflow_call:
inputs:
flavor:
description: k8s-snap flavor (e.g. moonray or strict)
type: string
outputs:
snap-artifact:
description: Name of the uploaded snap artifact
value: ${{ jobs.build-snap.outputs.snap-artifact }}

jobs:
build-snap:
name: Build snap
runs-on: ubuntu-20.04
petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
outputs:
snap-artifact: ${{ steps.build.outputs.snap-artifact }}
steps:
- name: Checking out repo
uses: actions/checkout@v4
- name: Apply patches
petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
if: inputs.flavor != ''
run: |
./build-scripts/patches/${{ inputs.flavor }}/apply
- name: Install lxd
uses: ./.github/actions/install-lxd
- name: Install snapcraft
run: |
sudo snap install snapcraft --classic
- name: Build snap
petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
id: build
env:
flavor: ${{ inputs.flavor }}
run: |
if [[ -n "$flavor" ]]; then
out_snap=k8s-$flavor.snap
else
out_snap=k8s.snap
fi

sg lxd -c 'snapcraft --use-lxd'
mv k8s_*.snap $out_snap

echo "snap-artifact=$out_snap" >> "$GITHUB_OUTPUT"
- name: Uploading snap
petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
uses: actions/upload-artifact@v4
with:
name: ${{ steps.build.outputs.snap-artifact }}
path: ${{ steps.build.outputs.snap-artifact }}
126 changes: 0 additions & 126 deletions .github/workflows/cron-jobs.yaml

This file was deleted.

81 changes: 81 additions & 0 deletions .github/workflows/e2e-tests.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
name: Run k8s-snap e2e tests

on:
workflow_call:
inputs:
arch:
description: Job runner architecture (amd64 or arm64)
default: amd64
type: string
os:
description: LXD image to use when running e2e tests
default: ubuntu:24.04
type: string
# Download k8s-snap using either a GH action artifact or a snap channel.
artifact:
description: The name of a GH action artifact.
type: string
channel:
description: k8s snap channel.
type: string
test-tags:
description: Test filter tags (e.g. pull_request, up_to_weekly)
petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
default: pull_request
type: string
flavor:
description: Test flavor (e.g. moonray or strict)
default: ""
type: string

petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
jobs:
test-integration:
name: Integration Test ${{ inputs.os }} ${{ inputs.arch }} ${{ inputs.artifact }}
runs-on: ${{ inputs.arch == 'arm64' && 'self-hosted-linux-arm64-jammy-large' || 'self-hosted-linux-amd64-jammy-large' }}
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: '3.10'
- name: Apply patches
if: inputs.flavor != ''
run: |
./build-scripts/patches/${{ inputs.flavor }}/apply
- name: Download k8s-snap
id: download-snap
uses: ./.github/actions/download-k8s-snap
with:
channel: ${{ inputs.channel }}
artifact: ${{ inputs.artifact }}
- name: Install lxd
uses: ./.github/actions/install-lxd
- name: Install tox
run: pip install tox
- name: Run e2e tests
env:
TEST_SNAP: ${{ steps.download-snap.outputs.snap-path }}
TEST_SUBSTRATE: lxd
TEST_LXD_IMAGE: ${{ inputs.os }}
TEST_FLAVOR: ${{ inputs.flavor }}
TEST_INSPECTION_REPORTS_DIR: ${{ github.workspace }}/inspection-reports
# Test the latest (up to) 6 releases for the flavour
# TODO(ben): upgrade nightly to run all flavours
TEST_VERSION_UPGRADE_CHANNELS: "recent 6 classic"
petrutlucian94 marked this conversation as resolved.
Show resolved Hide resolved
# Upgrading from 1.30 is not supported.
TEST_VERSION_UPGRADE_MIN_RELEASE: "1.31"
TEST_STRICT_INTERFACE_CHANNELS: "recent 6 strict"
TEST_MIRROR_LIST: '[{"name": "ghcr.io", "port": 5000, "remote": "https://ghcr.io", "username": "${{ github.actor }}", "password": "${{ secrets.GITHUB_TOKEN }}"}, {"name": "docker.io", "port": 5001, "remote": "https://registry-1.docker.io", "username": "", "password": ""}, {"name": "rocks.canonical.com", "port": 5002, "remote": "https://rocks.canonical.com/cdk"}]'
run: |
cd tests/integration && sg lxd -c "tox -e integration -- --tags ${{ inputs.test-tags }}"
- name: Prepare inspection reports
if: failure()
run: |
tar -czvf inspection-reports.tar.gz -C ${{ github.workspace }} inspection-reports
echo "artifact_name=inspection-reports-${{ inputs.os }}" | sed 's/:/-/g' >> $GITHUB_ENV
- name: Upload inspection report artifact
if: failure()
uses: actions/upload-artifact@v4
with:
name: ${{ env.artifact_name }}
path: ${{ github.workspace }}/inspection-reports.tar.gz
16 changes: 2 additions & 14 deletions .github/workflows/go.yaml
Original file line number Diff line number Diff line change
@@ -1,19 +1,7 @@
name: Go
name: Go lint and unit tests

on:
push:
paths-ignore:
- 'docs/**'
branches:
- main
- autoupdate/strict
- autoupdate/moonray
- 'release-[0-9]+.[0-9]+'
- 'autoupdate/release-[0-9]+.[0-9]+-strict'
- 'autoupdate/sync/**'
pull_request:
paths-ignore:
- 'docs/**'
workflow_call:

permissions:
contents: read
Expand Down
Loading
Loading