diff --git a/.github/workflows/generate-local-artifact-tarball.sh b/.github/workflows/generate-local-artifact-tarball.sh new file mode 100755 index 000000000..d14d30fbf --- /dev/null +++ b/.github/workflows/generate-local-artifact-tarball.sh @@ -0,0 +1,34 @@ +#!/bin/bash +# Copyright (c) 2019 Intel Corporation +# Copyright (c) 2020 Ant Group +# +# SPDX-License-Identifier: Apache-2.0 +# + +set -o errexit +set -o pipefail + + +main() { + artifact_stage=${1:-} + artifact=$(echo ${artifact_stage} | sed -n -e 's/^install_//p' | sed -r 's/_/-/g') + if [ -z "${artifact}" ]; then + "Scripts needs artifact name to build" + exit 1 + fi + + tag=$(echo $GITHUB_REF | cut -d/ -f3-) + pushd $GITHUB_WORKSPACE/tools/packaging/obs-packaging + git checkout $tag + ./gen_versions_txt.sh $tag + popd + + pushd $GITHUB_WORKSPACE/tools/packaging/release + source ./kata-deploy-binaries.sh + ${artifact_stage} $tag + popd + + mv $GITHUB_WORKSPACE/tools/packaging/release/kata-static-${artifact}.tar.gz . +} + +main $@ diff --git a/.github/workflows/main.yaml b/.github/workflows/main.yaml index 9d0bb922b..718e4e1b1 100644 --- a/.github/workflows/main.yaml +++ b/.github/workflows/main.yaml @@ -2,7 +2,7 @@ name: Publish release tarball on: push: tags: - - '*' + - '1.*' jobs: get-artifact-list: @@ -10,12 +10,11 @@ jobs: steps: - name: get the list run: | - git clone https://github.com/kata-containers/packaging - pushd packaging + pushd $GITHUB_WORKSPACE tag=$(echo $GITHUB_REF | cut -d/ -f3-) git checkout $tag popd - ./packaging/artifact-list.sh > artifact-list.txt + $GITHUB_WORKSPACE/tools/packaging/artifact-list.sh > artifact-list.txt - name: save-artifact-list uses: actions/upload-artifact@master with: diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 000000000..6a8ef6284 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,321 @@ +name: Publish Kata 2.x release artifacts +on: + push: + tags: + - '2.*' + +jobs: + get-artifact-list: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: get the list + run: | + pushd $GITHUB_WORKSPACE + tag=$(echo $GITHUB_REF | cut -d/ -f3-) + git checkout $tag + popd + $GITHUB_WORKSPACE/tools/packaging/artifact-list.sh > artifact-list.txt + - name: save-artifact-list + uses: actions/upload-artifact@v2 + with: + name: artifact-list + path: artifact-list.txt + + build-kernel: + runs-on: ubuntu-16.04 + needs: get-artifact-list + env: + buildstr: "install_kernel" + steps: + - uses: actions/checkout@v2 + - name: get-artifact-list + uses: actions/download-artifact@v2 + with: + name: artifact-list + - run: | + sudo apt-get update && sudo apt install -y flex bison libelf-dev bc iptables + - name: build-kernel + run: | + if grep -q $buildstr artifact-list.txt; then + $GITHUB_WORKSPACE/.github/workflows/generate-local-artifact-tarball.sh $buildstr + echo ::set-env name=artifact-built::true + else + echo ::set-env name=artifact-built::false + fi + - name: store-artifacts + if: env.artifact-built == 'true' + uses: actions/upload-artifact@v2 + with: + name: kata-artifacts + path: kata-static-kernel.tar.gz + + build-experimental-kernel: + runs-on: ubuntu-16.04 + needs: get-artifact-list + env: + buildstr: "install_experimental_kernel" + steps: + - uses: actions/checkout@v2 + - name: get-artifact-list + uses: actions/download-artifact@v2 + with: + name: artifact-list + - run: | + sudo apt-get update && sudo apt install -y flex bison libelf-dev bc iptables + - name: build-experimental-kernel + run: | + if grep -q $buildstr artifact-list.txt; then + $GITHUB_WORKSPACE/.github/workflows/generate-local-artifact-tarball.sh $buildstr + echo ::set-env name=artifact-built::true + else + echo ::set-env name=artifact-built::false + fi + - name: store-artifacts + if: env.artifact-built == 'true' + uses: actions/upload-artifact@v2 + with: + name: kata-artifacts + path: kata-static-experimental-kernel.tar.gz + + build-qemu: + runs-on: ubuntu-16.04 + needs: get-artifact-list + env: + buildstr: "install_qemu" + steps: + - uses: actions/checkout@v2 + - name: get-artifact-list + uses: actions/download-artifact@v2 + with: + name: artifact-list + - name: build-qemu + run: | + if grep -q $buildstr artifact-list.txt; then + $GITHUB_WORKSPACE/.github/workflows/generate-local-artifact-tarball.sh $buildstr + echo ::set-env name=artifact-built::true + else + echo ::set-env name=artifact-built::false + fi + - name: store-artifacts + if: env.artifact-built == 'true' + uses: actions/upload-artifact@v2 + with: + name: kata-artifacts + path: kata-static-qemu.tar.gz + + build-qemu-virtiofsd: + runs-on: ubuntu-16.04 + needs: get-artifact-list + env: + buildstr: "install_qemu_virtiofsd" + steps: + - uses: actions/checkout@v2 + - name: get-artifact-list + uses: actions/download-artifact@v2 + with: + name: artifact-list + - name: build-qemu-virtiofsd + run: | + if grep -q $buildstr artifact-list.txt; then + $GITHUB_WORKSPACE/.github/workflows/generate-local-artifact-tarball.sh $buildstr + echo ::set-env name=artifact-built::true + else + echo ::set-env name=artifact-built::false + fi + - name: store-artifacts + if: env.artifact-built == 'true' + uses: actions/upload-artifact@v2 + with: + name: kata-artifacts + path: kata-static-qemu-virtiofsd.tar.gz + + build-image: + runs-on: ubuntu-16.04 + needs: get-artifact-list + env: + buildstr: "install_image" + steps: + - uses: actions/checkout@v2 + - name: get-artifact-list + uses: actions/download-artifact@v2 + with: + name: artifact-list + - name: build-image + run: | + if grep -q $buildstr artifact-list.txt; then + $GITHUB_WORKSPACE/.github/workflows/generate-local-artifact-tarball.sh $buildstr + echo ::set-env name=artifact-built::true + else + echo ::set-env name=artifact-built::false + fi + - name: store-artifacts + if: env.artifact-built == 'true' + uses: actions/upload-artifact@v2 + with: + name: kata-artifacts + path: kata-static-image.tar.gz + + build-firecracker: + runs-on: ubuntu-16.04 + needs: get-artifact-list + env: + buildstr: "install_firecracker" + steps: + - uses: actions/checkout@v2 + - name: get-artifact-list + uses: actions/download-artifact@v2 + with: + name: artifact-list + - name: build-firecracker + run: | + if grep -q $buildstr artifact-list.txt; then + $GITHUB_WORKSPACE/.github/workflows/generate-local-artifact-tarball.sh $buildstr + echo ::set-env name=artifact-built::true + else + echo ::set-env name=artifact-built::false + fi + - name: store-artifacts + if: env.artifact-built == 'true' + uses: actions/upload-artifact@v2 + with: + name: kata-artifacts + path: kata-static-firecracker.tar.gz + + + build-clh: + runs-on: ubuntu-16.04 + needs: get-artifact-list + env: + buildstr: "install_clh" + steps: + - uses: actions/checkout@v2 + - name: get-artifact-list + uses: actions/download-artifact@v2 + with: + name: artifact-list + - name: build-clh + run: | + if grep -q $buildstr artifact-list.txt; then + $GITHUB_WORKSPACE/.github/workflows/generate-local-artifact-tarball.sh $buildstr + echo ::set-env name=artifact-built::true + else + echo ::set-env name=artifact-built::false + fi + - name: store-artifacts + if: env.artifact-built == 'true' + uses: actions/upload-artifact@v2 + with: + name: kata-artifacts + path: kata-static-clh.tar.gz + + build-kata-components: + runs-on: ubuntu-16.04 + needs: get-artifact-list + env: + buildstr: "install_kata_components" + steps: + - uses: actions/checkout@v2 + - name: get-artifact-list + uses: actions/download-artifact@v2 + with: + name: artifact-list + - name: build-kata-components + run: | + if grep -q $buildstr artifact-list.txt; then + $GITHUB_WORKSPACE/.github/workflows/generate-local-artifact-tarball.sh $buildstr + echo ::set-env name=artifact-built::true + else + echo ::set-env name=artifact-built::false + fi + - name: store-artifacts + if: env.artifact-built == 'true' + uses: actions/upload-artifact@v2 + with: + name: kata-artifacts + path: kata-static-kata-components.tar.gz + + gather-artifacts: + runs-on: ubuntu-16.04 + needs: [build-experimental-kernel, build-kernel, build-qemu, build-qemu-virtiofsd, build-image, build-firecracker, build-kata-components, build-clh] + steps: + - uses: actions/checkout@v2 + - name: get-artifacts + uses: actions/download-artifact@v2 + with: + name: kata-artifacts + path: kata-artifacts + - name: colate-artifacts + run: | + $GITHUB_WORKSPACE/.github/workflows/gather-artifacts.sh + - name: store-artifacts + uses: actions/upload-artifact@v2 + with: + name: release-candidate + path: kata-static.tar.xz + + kata-deploy: + needs: gather-artifacts + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: get-artifacts + uses: actions/download-artifact@v2 + with: + name: release-candidate + - name: build-and-push-kata-deploy-ci + id: build-and-push-kata-deploy-ci + run: | + tag=$(echo $GITHUB_REF | cut -d/ -f3-) + pushd $GITHUB_WORKSPACE + git checkout $tag + pkg_sha=$(git rev-parse HEAD) + popd + mv kata-static.tar.xz $GITHUB_WORKSPACE/tools/packaging/kata-deploy/kata-static.tar.xz + docker build --build-arg KATA_ARTIFACTS=kata-static.tar.xz -t katadocker/kata-deploy-ci:$pkg_sha $GITHUB_WORKSPACE/tools/packaging/kata-deploy + docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} + docker push katadocker/kata-deploy-ci:$pkg_sha + + echo "##[set-output name=PKG_SHA;]${pkg_sha}" + echo ::set-env name=TAG::$tag + mkdir -p packaging/kata-deploy + ln -s $GITHUB_WORKSPACE/tools/packaging/kata-deploy/action packaging/kata-deploy/action + - name: test-kata-deploy-ci-in-aks + uses: ./packaging/kata-deploy/action + with: + packaging-sha: ${{steps.build-and-push-kata-deploy-ci.outputs.PKG_SHA}} + env: + PKG_SHA: ${{steps.build-and-push-kata-deploy-ci.outputs.PKG_SHA}} + AZ_APPID: ${{ secrets.AZ_APPID }} + AZ_PASSWORD: ${{ secrets.AZ_PASSWORD }} + AZ_SUBSCRIPTION_ID: ${{ secrets.AZ_SUBSCRIPTION_ID }} + AZ_TENANT_ID: ${{ secrets.AZ_TENANT_ID }} + - name: push-tarball + run: | + # tag the container image we created and push to DockerHub + tag=$(echo $GITHUB_REF | cut -d/ -f3-) + docker tag katadocker/kata-deploy-ci:${{steps.build-and-push-kata-deploy-ci.outputs.PKG_SHA}} katadocker/kata-deploy:${tag} + docker push katadocker/kata-deploy:${tag} + + upload-static-tarball: + needs: kata-deploy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: download-artifacts + uses: actions/download-artifact@v2 + with: + name: release-candidate + - name: install hub + run: | + HUB_VER=$(curl -s "https://api.github.com/repos/github/hub/releases/latest" | jq -r .tag_name | sed 's/^v//') + wget -q -O- https://github.com/github/hub/releases/download/v$HUB_VER/hub-linux-amd64-$HUB_VER.tgz | \ + tar xz --strip-components=2 --wildcards '*/bin/hub' && sudo mv hub /usr/local/bin/hub + - name: push static tarball to github + run: | + tag=$(echo $GITHUB_REF | cut -d/ -f3-) + tarball="kata-static-$tag-x86_64.tar.xz" + mv kata-static.tar.xz "$GITHUB_WORKSPACE/${tarball}" + pushd $GITHUB_WORKSPACE + echo "uploading asset '${tarball}' for tag: ${tag}" + GITHUB_TOKEN=${{ secrets.GIT_UPLOAD_TOKEN }} hub release edit -m "" -a "${tarball}" "${tag}" diff --git a/tools/packaging/obs-packaging/gen_versions_txt.sh b/tools/packaging/obs-packaging/gen_versions_txt.sh index b760f72dc..027a3fe9e 100755 --- a/tools/packaging/obs-packaging/gen_versions_txt.sh +++ b/tools/packaging/obs-packaging/gen_versions_txt.sh @@ -20,8 +20,7 @@ source "${script_dir}/../scripts/lib.sh" ARCH=${ARCH:-$(arch_to_golang "$(uname -m)")} get_kata_version() { - local branch="$1" - curl -SsL "https://raw.githubusercontent.com/${project}/kata-containers/${branch}/VERSION" + cat "${script_dir}/../../../VERSION" } gen_version_file() { @@ -54,7 +53,7 @@ gen_version_file() { # - is not a valid char for rpmbuild # see https://github.com/semver/semver/issues/145 - kata_version=$(get_kata_version "${branch}") + kata_version=$(get_kata_version) kata_version=${kata_version/-/\~} cat > "$versions_txt" <&2 if [ ! -e "${versions_file}" ]; then - yaml_url="https://raw.githubusercontent.com/kata-containers/kata-containers/${branch}/versions.yaml" - echo "versions file (${versions_file}) does not exist" >&2 - echo "Download from ${yaml_url}" >&2 - curl --silent -o "${versions_file}" "$yaml_url" + cp "${this_script_dir}/../../../versions.yaml" ${versions_file} fi result=$("${GOPATH}/bin/yq" read -X "$versions_file" "$dependency") [ "$result" = "null" ] && result=""