mirror of
https://github.com/outbackdingo/cozystack.git
synced 2026-01-27 10:18:39 +00:00
184 lines
5.2 KiB
YAML
184 lines
5.2 KiB
YAML
name: Pull Request
|
|
|
|
on:
|
|
pull_request:
|
|
types: [labeled, opened, synchronize, reopened]
|
|
|
|
concurrency:
|
|
group: pull-requests-${{ github.workflow }}-${{ github.event.pull_request.number }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build:
|
|
name: Build
|
|
runs-on: [self-hosted]
|
|
permissions:
|
|
contents: read
|
|
packages: write
|
|
|
|
# Never run when the PR carries the "release" label.
|
|
if: |
|
|
!contains(github.event.pull_request.labels.*.name, 'release')
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
fetch-tags: true
|
|
|
|
- name: Login to GitHub Container Registry
|
|
uses: docker/login-action@v3
|
|
with:
|
|
username: ${{ github.repository_owner }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
registry: ghcr.io
|
|
env:
|
|
DOCKER_CONFIG: ${{ runner.temp }}/.docker
|
|
|
|
- name: Build
|
|
run: make build
|
|
env:
|
|
DOCKER_CONFIG: ${{ runner.temp }}/.docker
|
|
|
|
- name: Build Talos image
|
|
run: make -C packages/core/installer talos-nocloud
|
|
|
|
- name: Upload installer
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: cozystack-installer
|
|
path: _out/assets/cozystack-installer.yaml
|
|
|
|
- name: Upload Talos image
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: talos-image
|
|
path: _out/assets/nocloud-amd64.raw.xz
|
|
|
|
prepare_env:
|
|
name: Prepare environment
|
|
runs-on: [self-hosted]
|
|
needs: build
|
|
|
|
# Never run when the PR carries the "release" label.
|
|
if: |
|
|
!contains(github.event.pull_request.labels.*.name, 'release')
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
fetch-tags: true
|
|
|
|
- name: Download installer
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: cozystack-installer
|
|
path: _out/assets/
|
|
|
|
- name: Download Talos image
|
|
uses: actions/download-artifact@v4
|
|
with:
|
|
name: talos-image
|
|
path: _out/assets/
|
|
|
|
- name: Set sandbox ID
|
|
run: echo "SANDBOX_NAME=cozy-e2e-sandbox-$(echo "${GITHUB_REPOSITORY}:${GITHUB_WORKFLOW}:${GITHUB_REF}" | sha256sum | cut -c1-10)" >> $GITHUB_ENV
|
|
|
|
- name: Prepare workspace
|
|
run: |
|
|
cd ..
|
|
rm -rf /tmp/$SANDBOX_NAME
|
|
mv cozystack /tmp/$SANDBOX_NAME
|
|
sudo systemd-run
|
|
--on-calendar="$(date -d 'now + 24 hours' '+%Y-%m-%d %H:%M:%S')"
|
|
--unit=rm-workspace-$SANDBOX_NAME
|
|
rm -rf /tmp/$SANDBOX_NAME
|
|
|
|
- name: Prepare environment
|
|
run: |
|
|
cd /tmp/$SANDBOX_NAME
|
|
make SANDBOX_NAME=$SANDBOX_NAME prepare-env
|
|
|
|
install_cozystack:
|
|
name: Install Cozystack
|
|
runs-on: [self-hosted]
|
|
needs: prepare_env
|
|
|
|
# Never run when the PR carries the "release" label.
|
|
if: |
|
|
!contains(github.event.pull_request.labels.*.name, 'release')
|
|
|
|
steps:
|
|
- name: Set sandbox ID
|
|
run: echo "SANDBOX_NAME=cozy-e2e-sandbox-$(echo "${GITHUB_REPOSITORY}:${GITHUB_WORKFLOW}:${GITHUB_REF}" | sha256sum | cut -c1-10)" >> $GITHUB_ENV
|
|
|
|
- name: Install Cozystack
|
|
run: |
|
|
cd /tmp/$SANDBOX_NAME
|
|
make -C packages/core/testing SANDBOX_NAME=$SANDBOX_NAME install-cozystack
|
|
|
|
setup_tenant:
|
|
name: Setup tenant-test
|
|
runs-on: [self-hosted]
|
|
needs: install_cozystack
|
|
|
|
# Never run when the PR carries the "release" label.
|
|
if: |
|
|
!contains(github.event.pull_request.labels.*.name, 'release')
|
|
|
|
steps:
|
|
- name: Set sandbox ID
|
|
run: echo "SANDBOX_NAME=cozy-e2e-sandbox-$(echo "${GITHUB_REPOSITORY}:${GITHUB_WORKFLOW}:${GITHUB_REF}" | sha256sum | cut -c1-10)" >> $GITHUB_ENV
|
|
|
|
- name: E2E Apps
|
|
run: |
|
|
cd /tmp/$SANDBOX_NAME
|
|
make -C packages/core/testing SANDBOX_NAME=$SANDBOX_NAME test-apps-tenant
|
|
|
|
|
|
test_apps:
|
|
strategy:
|
|
matrix:
|
|
app: [clickhouse,kubernetes,mysql,postgres,virtualmachine,vminstance]
|
|
name: Test ${{ matrix.app }}
|
|
runs-on: [self-hosted]
|
|
needs: setup_tenant
|
|
|
|
# Never run when the PR carries the "release" label.
|
|
if: |
|
|
!contains(github.event.pull_request.labels.*.name, 'release')
|
|
|
|
steps:
|
|
- name: Set sandbox ID
|
|
run: echo "SANDBOX_NAME=cozy-e2e-sandbox-$(echo "${GITHUB_REPOSITORY}:${GITHUB_WORKFLOW}:${GITHUB_REF}" | sha256sum | cut -c1-10)" >> $GITHUB_ENV
|
|
|
|
- name: E2E Apps
|
|
run: |
|
|
cd /tmp/$SANDBOX_NAME
|
|
make -C packages/core/testing SANDBOX_NAME=$SANDBOX_NAME test-apps-${{ matrix.app }}
|
|
|
|
cleanup:
|
|
name: Tear down environment
|
|
runs-on: [self-hosted]
|
|
needs: test_apps
|
|
|
|
# Never run when the PR carries the "release" label.
|
|
if: |
|
|
!contains(github.event.pull_request.labels.*.name, 'release')
|
|
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: 0
|
|
fetch-tags: true
|
|
|
|
- name: Set sandbox ID
|
|
run: echo "SANDBOX_NAME=cozy-e2e-sandbox-$(echo "${GITHUB_REPOSITORY}:${GITHUB_WORKFLOW}:${GITHUB_REF}" | sha256sum | cut -c1-10)" >> $GITHUB_ENV
|
|
|
|
- name: Tear down sandbox
|
|
run: make -C packages/core/testing SANDBOX_NAME=$SANDBOX_NAME delete
|