Skip to content

add GHA

add GHA #19

Workflow file for this run

---
name: Test
on:
push:
branches:
- master
- main
- release/**
- dev
pull_request: null
workflow_dispatch:
jobs:
#golangci-lint:
# runs-on: ubuntu-22.04
# timeout-minutes: 20
# steps:
# - uses: actions/[email protected]
# with:
# fetch-depth: 1
# - uses: actions/setup-go@v3
# with:
# go-version: 1.21.x
# - run: sudo apt-get update
# - name: golangci-lint
# uses: golangci/[email protected]
# with:
# version: v1.55.2
# args: --verbose
create-lxc-image:
name: create-lxc-image
runs-on: ubuntu-22.04
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
- uses: actions/cache/restore@v4
id: cache-restore
with:
key: lxc-image-base-${{ hashFiles('go.sum', 'tests/setup_test.sh', 'tests/sync_lxc.sh') }}
path: /tmp/test-image.tar.zst
lookup-only: true
- name: setup lxd
id: s1
if: steps.cache-restore.outputs.cache-hit != 'true'
run: ./tests/setup_lxd.sh
- name: launch lxc container
id: s2
if: steps.s1.conclusion == 'success'
run: ./tests/launch_test_lxc.sh
- name: install dependencies and build
id: s3
if: steps.s2.conclusion == 'success'
run: sudo lxc exec test -- sudo --login --user ubuntu /host/tests/setup_test.sh
- name: export image
id: s4
if: steps.s3.conclusion == 'success'
run: ./tests/export_lxc_image.sh test
- uses: actions/cache/save@v4
id: s5
if: steps.s4.conclusion == 'success'
with:
key: lxc-image-base-${{ hashFiles('go.sum', 'tests/setup_test.sh', 'tests/sync_lxc.sh') }}
path: /tmp/test-image.tar.zst
sync:
runs-on: ubuntu-22.04
needs: create-lxc-image
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- name: setup lxd
run: ./tests/setup_lxd.sh
- uses: actions/cache/restore@v4
id: cache-restore
with:
key: lxc-image-base-${{ hashFiles('go.sum', 'tests/setup_test.sh', 'tests/sync_lxc.sh') }}
path: /tmp/test-image.tar.zst
fail-on-cache-miss: true
- name: load lxc image
run: sudo lxc image import /tmp/test-image.tar.zst --alias test-export
- name: launch lxc container
run: ./tests/launch_test_lxc.sh test-export
- name: run test
run: sudo lxc exec test -- sudo --login --user ubuntu /bin/bash -c "sleep 3 && /home/ubuntu/d4c/tests/sync_lxc.sh"
# some source codes may be updated. re-export new image.
- name: export image
run: sudo lxc image alias delete test-export && rm -f /tmp/test-image.tar.zst && ./tests/export_lxc_image.sh test
- uses: actions/cache/save@v4
with:
key: lxc-image-${{ github.sha }}
path: /tmp/test-image.tar.zst
benchmark:
runs-on: ubuntu-22.04
needs: sync
timeout-minutes: 20
strategy:
matrix:
script: ["apache", "mysql", "nginx", "postgres", "redis"]
steps:
- uses: actions/checkout@v4
- name: setup lxd
run: ./tests/setup_lxd.sh
- uses: actions/cache/restore@v4
id: cache-restore
with:
key: lxc-image-${{ github.sha }}
path: /tmp/test-image.tar.zst
fail-on-cache-miss: true
- name: load lxc image
run: sudo lxc image import /tmp/test-image.tar.zst --alias test-export
- name: launch lxc container
run: ./tests/launch_test_lxc.sh test-export
- name: run benchmark (${{ matrix.script }})
run: sudo lxc exec test -- sudo --login --user ubuntu /bin/bash -c "sleep 3 && sudo /home/ubuntu/d4c/tests/bench_lxc.sh ${{ matrix.script }}"
- name: get result
id: get_result
run: |
mkdir /tmp/benchmark-results
sudo lxc file pull test/home/ubuntu/d4c/tests/benchmark/${{ matrix.script }}-benchmark.log /tmp/benchmark-results/.
- uses: actions/upload-artifact@v3
if: steps.get_result.conclusion == 'success'
with:
name: benchmark-${{ matrix.script }}
path: /tmp/benchmark-results
benchmark-all:
runs-on: ubuntu-22.04
needs: sync
timeout-minutes: 20
steps:
- uses: actions/checkout@v4
- name: setup lxd
run: ./tests/setup_lxd.sh
- uses: actions/cache/restore@v4
id: cache-restore
with:
key: lxc-image-${{ github.sha }}
path: /tmp/test-image.tar.zst
fail-on-cache-miss: true
- name: load lxc image
run: sudo lxc image import /tmp/test-image.tar.zst --alias test-export
- name: launch lxc container
run: ./tests/launch_test_lxc.sh test-export
- name: run benchmark (${{ matrix.script }})
run: sudo lxc exec test -- sudo --login --user ubuntu /bin/bash -c "sleep 3 && sudo /home/ubuntu/d4c/tests/bench.sh"