Skip to content

run-tests

run-tests #8

Workflow file for this run

# Implicit requirements
# runner must have `docker` and `curl` installed (true on github-runners)
name: run-tests
on:
workflow_call:
workflow_dispatch:
jobs:
start-runner:
runs-on: ubuntu-latest
outputs:
runner-label: ${{ steps.start-yc-runner.outputs.label }}
instance-id: ${{ steps.start-yc-runner.outputs.instance-id }}
steps:
- name: start-yc-runner
id: start-yc-runner
uses: yc-actions/yc-github-runner@v1
with:
mode: start
yc-sa-json-credentials: ${{ secrets.CI_RUNNER_CREATOR_KEY }}
github-token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
folder-id: b1gmgbhccra2qca8v5g6
image-id: fd80o2eikcn22b229tsa
cores: 16
disk-type: network-ssd-nonreplicated
disk-size: 465GB
memory: 32GB
core-fraction: 100
subnet-id: e9bu12i8ocv6q8kl83ru
user: yc-admin
ssh-public-key: ${{ secrets.CI_RUNNER_DEBUG_SHH_PUBLIC_KEY }}
smart-checkout:
needs:
- start-runner
runs-on: ${{ needs.start-runner.outputs.runner-label }}
steps:
- name: checkout-when-fork-source
uses: actions/checkout@v3
if: github.event.pull_request.head.sha != ''
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: checkout-when-this-repo-source
uses: actions/checkout@v3
if: github.event.pull_request.head.sha == ''
lint:
concurrency:
group: lint-golangci-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
needs:
- start-runner
- smart-checkout
runs-on: ${{ needs.start-runner.outputs.runner-label }}
steps:
- name: set-env-vars
run: |
echo "HOME=/actions-runner" >> $GITHUB_ENV
- name: setup-go
uses: actions/setup-go@v3
with:
go-version: '1.20'
- name: golangci-lint
uses: golangci/golangci-lint-action@v2
with:
version: v1.52.2
code-format-check:
concurrency:
group: lint-autoformat-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
needs:
- start-runner
- smart-checkout
runs-on: ${{ needs.start-runner.outputs.runner-label }}
steps:
- name: set-env-vars
run: |
echo "HOME=/actions-runner" >> $GITHUB_ENV
- name: setup-go
uses: actions/setup-go@v3
with:
go-version: '1.20'
- name: Install utilities
run: |
go install mvdan.cc/[email protected]
go install github.com/rinchsan/gosimports/cmd/[email protected]
- name: format all files with auto-formatter
run: bash ./.github/scripts/format-all-go-code.sh "$PWD"
- name: Check repository diff
run: bash ./.github/scripts/check-work-copy-equals-to-committed.sh "auto-format broken"
run-unit-tests:
concurrency:
group: run-unit-tests-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
needs:
- start-runner
- smart-checkout
- lint
- code-format-check
runs-on: ${{ needs.start-runner.outputs.runner-label }}
outputs:
result: ${{ steps.run-unit-tests.outputs.result }}
steps:
- name: set-env-vars
run: |
echo "HOME=/actions-runner" >> $GITHUB_ENV
- name: setup-go
uses: actions/setup-go@v3
with:
go-version: '1.20'
- name: Set up gotestfmt
uses: gotesttools/gotestfmt-action@v2
- name: setup-medium-test-class-binaries
run: |
# This installs kube-apiserver and etcd binaries for `medium`
# class tests. Refer to the writing tests docs for more info.
make envtest
KUBEBUILDER_ASSETS=$(./bin/setup-envtest use 1.26 -p path)
echo "KUBEBUILDER_ASSETS=$KUBEBUILDER_ASSETS" >> $GITHUB_ENV
- name: run-unit-tests
run: |
set -euo pipefail
go test -json -v -timeout 900s -p 1 ./internal/... -ginkgo.v 2>&1 | tee /tmp/gotest.log | gotestfmt
- name: Upload test log
uses: actions/upload-artifact@v2
if: always()
with:
name: test-log
path: /tmp/gotest.log
if-no-files-found: error
run-e2e-tests:
concurrency:
group: run-e2e-tests-${{ github.head_ref || github.ref_name }}
cancel-in-progress: true
needs:
- start-runner
- smart-checkout
- lint
- code-format-check
runs-on: ${{ needs.start-runner.outputs.runner-label }}
outputs:
result: ${{ steps.run-e2e-tests.outputs.result }}
steps:
- name: set-env-vars
run: |
echo "HOME=/actions-runner" >> $GITHUB_ENV
- name: setup-go
uses: actions/setup-go@v3
with:
go-version: '1.20'
- name: Set up gotestfmt
uses: gotesttools/gotestfmt-action@v2
- name: install-dependencies
run: |
sudo apt-get update
sudo apt-get install -y build-essential
go install sigs.k8s.io/[email protected]
curl -LO https://dl.k8s.io/release/v1.25.3/bin/linux/amd64/kubectl
chmod +x ./kubectl
HELM_PKG="helm-v3.13.3-linux-amd64.tar.gz"
curl -LO https://get.helm.sh/"${HELM_PKG}"
tar -zxvf "${HELM_PKG}"
mv ./linux-amd64/helm .
curl -sSL https://storage.yandexcloud.net/yandexcloud-ydb/install.sh | bash
echo "$(pwd)" >> $GITHUB_PATH
echo "$HOME/ydb/bin" >> $GITHUB_PATH
echo "$HOME/go/bin" >> $GITHUB_PATH
- name: configure-system
run: |
sudo sysctl fs.inotify.max_user_instances=1280
sudo sysctl fs.inotify.max_user_watches=655360
- name: check-dependencies
run: |
gcc --version
go version
kind version
kubectl version --client=true
helm version
- name: setup-k8s-cluster
run: |
kind delete cluster
kind create cluster \
--image=kindest/node:v1.25.3@sha256:cd248d1438192f7814fbca8fede13cfe5b9918746dfa12583976158a834fd5c5 \
--config=./e2e/kind-cluster-config.yaml
kubectl wait --timeout=5m --for=condition=ready node -l worker=true
- name: build-operator-image
uses: docker/build-push-action@v3
with:
context: .
push: false
# Get commit short sha within Github action workflow
# Just a random string name, we aren't uploading anyway
tags: kind/ydb-operator:current
- name: load-and-deploy-operator
run: |
kind load docker-image kind/ydb-operator:current
- name: pull-and-load-other-images
run: |
docker pull k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0
kind load docker-image k8s.gcr.io/ingress-nginx/kube-webhook-certgen:v1.0
# TODO would be cool to parse YDB image from manifests to avoid duplicating information
docker pull cr.yandex/crptqonuodf51kdj7a7d/ydb:23.3.17
kind load docker-image cr.yandex/crptqonuodf51kdj7a7d/ydb:23.3.17
- name: run-e2e-tests
run: |
set -euo pipefail
go test -json -v -timeout 3600s -p 1 ./e2e/... -ginkgo.v 2>&1 | tee /tmp/gotest.log | gotestfmt
- name: Upload test log
uses: actions/upload-artifact@v2
if: always()
with:
name: test-log
path: /tmp/gotest.log
if-no-files-found: error
- name: teardown-k8s-cluster
run: |
kind delete cluster
stop-runner:
needs:
- start-runner
- lint
- code-format-check
- run-unit-tests
- run-e2e-tests
runs-on: ubuntu-latest
if: always()
steps:
- name: stop-yc-runner
uses: yc-actions/yc-github-runner@v1
with:
mode: stop
yc-sa-json-credentials: ${{ secrets.CI_RUNNER_CREATOR_KEY }}
github-token: ${{ secrets.GH_PERSONAL_ACCESS_TOKEN }}
label: ${{ needs.start-runner.outputs.runner-label }}
instance-id: ${{ needs.start-runner.outputs.instance-id }}