Skip to content

Fluent interface for atomic file writes #10101

Fluent interface for atomic file writes

Fluent interface for atomic file writes #10101

Workflow file for this run

name: Go build
on:
push:
branches:
- main
- release-*
paths-ignore:
- 'docs/**'
- 'examples/**'
- '**.md'
- LICENSE
- '**.svg'
- '.github/workflows/docs.yml'
- '.github/workflows/mkdocs-set-default-version.yml'
- 'mkdocs.yml'
pull_request:
branches:
- main
- release-*
paths-ignore:
- 'docs/**'
- 'examples/**'
- '**.md'
- LICENSE
- '**.svg'
- '.github/workflows/docs.yml'
- '.github/workflows/mkdocs-set-default-version.yml'
- 'mkdocs.yml'
env:
MAKEFLAGS: -j
jobs:
prepare:
name: Prepare
runs-on: ubuntu-latest
outputs:
smoketest-matrix: ${{ steps.generate-smoketest-matrix.outputs.smoketests }}
autopilot-matrix: ${{ steps.generate-autopilot-matrix.outputs.matrix }}
steps:
- name: "Workflow run :: Checkout"
uses: actions/checkout@v4
with:
persist-credentials: false
- name: "Generate :: Smoke test matrix"
id: generate-smoketest-matrix
run: |
./vars.sh FROM=inttest smoketests | jq --raw-input --raw-output \
'split(" ") | [ .[] | select(. != "") ] | "smoketests=" + tojson' >>$GITHUB_OUTPUT
- name: "Generate :: Autopilot test matrix"
id: generate-autopilot-matrix
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
k0sSortVersion=$(./vars.sh FROM=. k0s_sort_version)
mkdir -p build/cache/bin
curl -sSLo build/cache/bin/k0s_sort --retry 5 --retry-all-errors "https://github.com/k0sproject/version/releases/download/$k0sSortVersion/k0s_sort-linux-amd64"
chmod +x build/cache/bin/k0s_sort
export PATH="$(realpath build/cache/bin):$PATH"
set -x
k8sVersion="$(./vars.sh kubernetes_version)"
majorVersion="${k8sVersion%%.*}"
minorVersion=${k8sVersion#$majorVersion.}
minorVersion="${minorVersion%%.*}"
{
printf matrix=
hack/tools/gen-matrix.sh "$majorVersion.$(($minorVersion - 1))" "$majorVersion.$minorVersion"
} >> "$GITHUB_OUTPUT"
build-k0s:
strategy:
matrix:
target-os: [linux, windows]
target-arch: [amd64]
name: "Build :: k0s :: ${{ matrix.target-os }}-${{ matrix.target-arch }}"
uses: ./.github/workflows/build-k0s.yml
with:
target-os: ${{ matrix.target-os }}
target-arch: ${{ matrix.target-arch }}
build-airgap-image-bundle:
name: "Build :: Airgap image bundle"
needs: [build-k0s]
uses: ./.github/workflows/build-airgap-image-bundle.yml
with:
target-os: linux
target-arch: amd64
generate-sbom:
name: "Build :: SBOM"
needs: [build-k0s]
runs-on: ubuntu-22.04
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v4
- name: Generate SBOM
run: |
make bindata
mkdir -p sbom && chmod 777 sbom
make sbom/spdx.json
- uses: actions/upload-artifact@v4
with:
name: spdx.json
path: sbom/spdx.json
unittests-k0s-linux-amd64:
name: "Unit tests :: linux-amd64"
runs-on: ubuntu-22.04
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Cache GOCACHE
uses: actions/cache@v4
with:
key: unittests-k0s-linux-amd64-gocache-${{ github.ref_name }}-${{ github.sha }}
restore-keys: |
unittests-k0s-linux-amd64-gocache-${{ github.ref_name }}-
build-k0s-linux-amd64-gocache-${{ github.ref_name }}-
path: |
build/cache/go/build
- name: Cache GOMODCACHE
uses: actions/cache@v4
with:
key: unittests-k0s-linux-amd64-gomodcache-${{ hashFiles('go.sum') }}
restore-keys: |
build-k0s-linux-amd64-gomodcache-${{ hashFiles('go.sum') }}
path: |
build/cache/go/mod
- name: Run unit tests
env:
EMBEDDED_BINS_BUILDMODE: none
run: make check-unit
unittests-k0s-windows-amd64:
name: "Unit tests :: windows-amd64"
runs-on: windows-2022
defaults:
run:
shell: bash
steps:
- name: Check out
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Prepare build environment
run: .github/workflows/prepare-build-env.sh
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
- name: Cache GOCACHE
uses: actions/cache@v4
with:
key: unittests-k0s-windows-amd64-gocache-${{ github.ref_name }}-${{ github.sha }}
restore-keys: |
unittests-k0s-windows-amd64-gocache-${{ github.ref_name }}-
path: |
~\AppData\Local\go-build
- name: Cache GOMODCACHE
uses: actions/cache@v4
with:
key: unittests-k0s-windows-amd64-gomodcache-${{ hashFiles('go.sum') }}
restore-keys: |
build-k0s-windows-amd64-gomodcache-${{ hashFiles('go.sum') }}
path: |
~\go\pkg\mod
- name: Run unit tests
env:
EMBEDDED_BINS_BUILDMODE: none
TARGET_OS: windows
GO: go
GO_ENV: ''
run: |
make --touch .k0sbuild.docker-image.k0s
make check-unit
smoketests:
strategy:
fail-fast: false
matrix:
smoke-suite: ${{ fromJson(needs.prepare.outputs.smoketest-matrix) }}
name: "Smoke tests :: ${{ matrix.smoke-suite }}"
needs: [prepare, build-k0s, build-airgap-image-bundle]
runs-on: ubuntu-22.04
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v4
- name: Reclaim runner disk space
run: .github/workflows/reclaim-runner-disk-space.bash
- name: Prepare build environment
run: .github/workflows/prepare-build-env.sh
- name: Prepare docker for ipv6 dualstack tests
if: contains(matrix.smoke-suite, 'dualstack')
run: .github/workflows/prepare-docker-ipv6.sh
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
- name: Download compiled executable
uses: actions/download-artifact@v4
with:
name: k0s-linux-amd64
- name: k0s sysinfo
run: |
chmod +x k0s
./k0s sysinfo
- name: Download airgap image bundle
if: contains(matrix.smoke-suite, 'airgap')
uses: actions/download-artifact@v4
with:
name: airgap-image-bundle-linux-amd64
- name: Run inttest
run: make -C inttest ${{ matrix.smoke-suite }}
- name: Collect k0s logs and support bundle
if: failure()
uses: actions/upload-artifact@v4
with:
name: smoketests-${{ matrix.smoke-suite }}-files
path: |
/tmp/*.log
/tmp/support-bundle.tar.gz
- name: Collect sonobuoy results
if: failure() && contains(matrix.smoke-suite, 'conformance')
uses: actions/upload-artifact@v4
with:
name: smoketests-${{ matrix.smoke-suite }}-sonobuoy-results
path: /tmp/*_sonobuoy_*.tar.gz
autopilot-tests:
strategy:
fail-fast: false
matrix:
version: ${{fromJson(needs.prepare.outputs.autopilot-matrix)}}
name: "Autopilot tests :: ${{ matrix.version }}"
needs: [prepare, build-k0s]
runs-on: ubuntu-22.04
env:
K0S_VERSION: ${{ matrix.version }}
steps:
- name: Check out code into the Go module directory
uses: actions/checkout@v4
- name: Reclaim runner disk space
run: .github/workflows/reclaim-runner-disk-space.bash
- name: Prepare build environment
run: .github/workflows/prepare-build-env.sh
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
- name: Download compiled executable
uses: actions/download-artifact@v4
with:
name: k0s-linux-amd64
- name: Download latest release
run: |
curl -L -o "k0s-$K0S_VERSION" "https://github.com/k0sproject/k0s/releases/download/$K0S_VERSION/k0s-$K0S_VERSION-amd64"
chmod +x "k0s-$K0S_VERSION"
- name: k0s sysinfo
run: |
chmod +x k0s
./k0s sysinfo
- name: Run inttest
run: |
make -C inttest check-ap-ha3x3 K0S_UPDATE_FROM_BIN="../k0s-$K0S_VERSION"
- name: Collect k0s logs and support bundle
if: failure()
uses: actions/upload-artifact@v4
with:
name: autopilot-tests-${{ matrix.version }}-files
path: |
/tmp/*.log
/tmp/support-bundle.tar.gz
smoketest-arm:
name: Smoke test on armv7/arm64
if: github.repository == 'k0sproject/k0s'
strategy:
fail-fast: false
matrix:
arch:
- arm # this is armv7
- arm64
runs-on:
- self-hosted
- linux
- ${{ matrix.arch }}
steps:
# https://github.com/actions/checkout/issues/273#issuecomment-642908752 (see below)
- name: "Pre: Fixup directories"
if: matrix.arch == 'arm'
run: find . -type d -not -perm /u+w -exec chmod u+w '{}' \;
- name: Set up Docker Context for Buildx
if: matrix.arch != 'arm'
run: docker context create builders
- name: Set up Docker Buildx
if: matrix.arch != 'arm'
uses: docker/setup-buildx-action@v3
with:
endpoint: builders
- name: Check out code into the Go module directory
uses: actions/checkout@v4
with:
fetch-depth: 0 # for `git describe`
persist-credentials: false
- name: Prepare build environment
run: .github/workflows/prepare-build-env.sh
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
- name: Cache embedded binaries
uses: actions/cache@v4
with:
key: ${{ runner.os }}-embedded-bins-${{ matrix.arch }}-${{ hashFiles('**/embedded-bins/**/*') }}
path: |
.bins.linux.stamp
embedded-bins/staging/linux/bin/
embedded-bins/Makefile.variables
- name: Cache GOCACHE
uses: actions/cache@v4
with:
key: ${{ runner.os }}-smoketest-arm-gocache-${{ matrix.arch }}-${{ github.ref_name }}-${{ github.sha }}
restore-keys: |
${{ runner.os }}-smoketest-arm-gocache-${{ matrix.arch }}-${{ github.ref_name }}-
path: |
build/cache/go/build
- name: Cache GOMODCACHE
uses: actions/cache@v4
with:
key: ${{ runner.os }}-smoketest-arm-gomodcache-${{ matrix.arch }}-${{ hashFiles('go.sum') }}
path: |
build/cache/go/mod
- name: Build
run: |
make bindata
make --touch codegen
make build
- name: Upload compiled executable
uses: actions/upload-artifact@v4
with:
name: k0s-${{ matrix.arch }}
path: k0s
- name: Unit tests
run: make check-unit
- name: k0s sysinfo
run: ./k0s sysinfo
- name: Run smoketest
run: make check-basic
- name: Create airgap image list
run: make airgap-images.txt
- name: Cache airgap image bundle
id: cache-airgap-image-bundle
uses: actions/cache@v4
with:
key: airgap-image-bundle-linux-${{ matrix.arch }}-${{ hashFiles('Makefile', 'airgap-images.txt', 'hack/image-bundler/*') }}
path: |
airgap-images.txt
airgap-image-bundle-linux-${{ matrix.arch }}.tar
- name: Create airgap image bundle if not cached
if: steps.cache-airgap-image-bundle.outputs.cache-hit != 'true'
run: make airgap-image-bundle-linux-${{ matrix.arch }}.tar
- name: Run airgap test
run: |
make --touch airgap-image-bundle-linux-${{ matrix.arch }}.tar
make check-airgap
- name: Collect k0s logs and support bundle
if: failure()
uses: actions/upload-artifact@v4
with:
name: smoketest-${{ matrix.arch }}-check-basic-files
path: |
/tmp/*.log
/tmp/support-bundle.tar.gz
# https://github.com/actions/checkout/issues/273#issuecomment-642908752
# Golang mod cache tends to set directories to read-only, which breaks any
# attempts to simply remove those directories. The `make clean-gocache`
# target takes care of this, but the mod cache can't be deleted here,
# since it shall be cached across builds, and caching takes place as a
# post build action. So, as a workaround, ensure that all subdirectories
# are writable.
- name: "Post: Fixup directories"
if: always() && matrix.arch == 'arm'
run: find . -type d -not -perm /u+w -exec chmod u+w '{}' \;
- name: "Docker prune"
if: always() && matrix.arch == 'arm'
run: docker system prune --force --filter "until=$((24*7))h"