diff --git a/.github/workflows/PR-wip-checks.yaml b/.github/workflows/PR-wip-checks.yaml index 16f8167b2b..97c35145a7 100644 --- a/.github/workflows/PR-wip-checks.yaml +++ b/.github/workflows/PR-wip-checks.yaml @@ -15,6 +15,7 @@ jobs: name: WIP Check steps: - name: WIP Check + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} uses: tim-actions/wip-check@1c2a1ca6c110026b3e2297bb2ef39e1747b5a755 with: labels: '["do-not-merge", "wip", "rfc"]' diff --git a/.github/workflows/commit-message-check.yaml b/.github/workflows/commit-message-check.yaml index 55f03fecde..7abb5d8515 100644 --- a/.github/workflows/commit-message-check.yaml +++ b/.github/workflows/commit-message-check.yaml @@ -5,6 +5,8 @@ on: - opened - reopened - synchronize + - labeled + - unlabeled env: error_msg: |+ @@ -18,24 +20,26 @@ jobs: name: Commit Message Check steps: - name: Get PR Commits + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} id: 'get-pr-commits' uses: tim-actions/get-pr-commits@v1.0.0 with: token: ${{ secrets.GITHUB_TOKEN }} - name: DCO Check + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} uses: tim-actions/dco@2fd0504dc0d27b33f542867c300c60840c6dcb20 with: commits: ${{ steps.get-pr-commits.outputs.commits }} - name: Commit Body Missing Check - if: ${{ success() || failure() }} + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') && ( success() || failure() ) }} uses: tim-actions/commit-body-check@v1.0.2 with: commits: ${{ steps.get-pr-commits.outputs.commits }} - name: Check Subject Line Length - if: ${{ success() || failure() }} + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') && ( success() || failure() ) }} uses: tim-actions/commit-message-checker-with-regex@v0.3.1 with: commits: ${{ steps.get-pr-commits.outputs.commits }} @@ -44,7 +48,7 @@ jobs: post_error: ${{ env.error_msg }} - name: Check Body Line Length - if: ${{ success() || failure() }} + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') && ( success() || failure() ) }} uses: tim-actions/commit-message-checker-with-regex@v0.3.1 with: commits: ${{ steps.get-pr-commits.outputs.commits }} @@ -71,7 +75,7 @@ jobs: post_error: ${{ env.error_msg }} - name: Check Fixes - if: ${{ success() || failure() }} + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') && ( success() || failure() ) }} uses: tim-actions/commit-message-checker-with-regex@v0.3.1 with: commits: ${{ steps.get-pr-commits.outputs.commits }} @@ -82,7 +86,7 @@ jobs: one_pass_all_pass: 'true' - name: Check Subsystem - if: ${{ success() || failure() }} + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') && ( success() || failure() ) }} uses: tim-actions/commit-message-checker-with-regex@v0.3.1 with: commits: ${{ steps.get-pr-commits.outputs.commits }} diff --git a/.github/workflows/kata-deploy-push.yaml b/.github/workflows/kata-deploy-push.yaml index effca2e20e..0de8749303 100644 --- a/.github/workflows/kata-deploy-push.yaml +++ b/.github/workflows/kata-deploy-push.yaml @@ -1,6 +1,15 @@ name: kata deploy build -on: [push, pull_request] +on: + pull_request: + types: + - opened + - edited + - reopened + - synchronize + - labeled + - unlabeled + push: jobs: build-asset: @@ -19,11 +28,13 @@ jobs: steps: - uses: actions/checkout@v2 - name: Install docker + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} run: | curl -fsSL https://test.docker.com -o test-docker.sh sh test-docker.sh - name: Build ${{ matrix.asset }} + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} run: | make "${KATA_ASSET}-tarball" build_dir=$(readlink -f build) @@ -33,6 +44,7 @@ jobs: KATA_ASSET: ${{ matrix.asset }} - name: store-artifact ${{ matrix.asset }} + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} uses: actions/upload-artifact@v2 with: name: kata-artifacts @@ -45,14 +57,17 @@ jobs: steps: - uses: actions/checkout@v2 - name: get-artifacts + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} uses: actions/download-artifact@v2 with: name: kata-artifacts path: build - name: merge-artifacts + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} run: | make merge-builds - name: store-artifacts + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} uses: actions/upload-artifact@v2 with: name: kata-static-tarball @@ -63,6 +78,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: make kata-tarball + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} run: | make kata-tarball sudo make install-tarball diff --git a/.github/workflows/kata-deploy-test.yaml b/.github/workflows/kata-deploy-test.yaml index 4dce7b2f30..6b93c1ec9f 100644 --- a/.github/workflows/kata-deploy-test.yaml +++ b/.github/workflows/kata-deploy-test.yaml @@ -48,7 +48,18 @@ jobs: - rootfs-initrd - shim-v2 steps: + # As Github action event `issue_comment` does not provide the right ref + # (commit/branch) to be tested, let's use this third part action to work + # this limitation around. + - name: resolve pr refs + id: refs + uses: kata-containers/resolve-pr-refs@v0.0.3 + with: + token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/checkout@v2 + with: + ref: ${{ steps.refs.outputs.head_ref }} - name: Install docker run: | curl -fsSL https://test.docker.com -o test-docker.sh @@ -75,7 +86,17 @@ jobs: runs-on: ubuntu-latest needs: build-asset steps: + # As Github action event `issue_comment` does not provide the right ref + # (commit/branch) to be tested, let's use this third part action to work + # this limitation around. + - name: resolve pr refs + id: refs + uses: kata-containers/resolve-pr-refs@v0.0.3 + with: + token: ${{ secrets.GITHUB_TOKEN }} - uses: actions/checkout@v2 + with: + ref: ${{ steps.refs.outputs.head_ref }} - name: get-artifacts uses: actions/download-artifact@v2 with: @@ -94,7 +115,17 @@ jobs: needs: create-kata-tarball runs-on: ubuntu-latest steps: + # As Github action event `issue_comment` does not provide the right ref + # (commit/branch) to be tested, let's use this third part action to work + # this limitation around. + - name: resolve pr refs + id: refs + uses: kata-containers/resolve-pr-refs@v0.0.3 + with: + token: ${{ secrets.GITHUB_TOKEN }} - uses: actions/checkout@v2 + with: + ref: ${{ steps.refs.outputs.head_ref }} - name: get-kata-tarball uses: actions/download-artifact@v2 with: diff --git a/.github/workflows/move-issues-to-in-progress.yaml b/.github/workflows/move-issues-to-in-progress.yaml index 6a55340af3..ab97e2de9b 100644 --- a/.github/workflows/move-issues-to-in-progress.yaml +++ b/.github/workflows/move-issues-to-in-progress.yaml @@ -10,12 +10,15 @@ on: types: - opened - reopened + - labeled + - unlabeled jobs: move-linked-issues-to-in-progress: runs-on: ubuntu-latest steps: - name: Install hub + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} run: | HUB_ARCH="amd64" HUB_VER=$(curl -sL "https://api.github.com/repos/github/hub/releases/latest" |\ @@ -26,6 +29,7 @@ jobs: sudo install hub /usr/local/bin - name: Install hub extension script + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} run: | # Clone into a temporary directory to avoid overwriting # any existing github directory. @@ -35,9 +39,11 @@ jobs: popd &>/dev/null - name: Checkout code to allow hub to communicate with the project + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} uses: actions/checkout@v2 - name: Move issue to "In progress" + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} env: GITHUB_TOKEN: ${{ secrets.KATA_GITHUB_ACTIONS_TOKEN }} run: | diff --git a/.github/workflows/require-pr-porting-labels.yaml b/.github/workflows/require-pr-porting-labels.yaml index 3f38071947..585e86bc42 100644 --- a/.github/workflows/require-pr-porting-labels.yaml +++ b/.github/workflows/require-pr-porting-labels.yaml @@ -20,6 +20,7 @@ jobs: runs-on: ubuntu-latest steps: - name: Install hub + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} run: | HUB_ARCH="amd64" HUB_VER=$(curl -sL "https://api.github.com/repos/github/hub/releases/latest" |\ @@ -30,6 +31,7 @@ jobs: sudo install hub /usr/local/bin - name: Checkout code to allow hub to communicate with the project + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} uses: actions/checkout@v2 - name: Install porting checker script @@ -42,6 +44,7 @@ jobs: popd &>/dev/null - name: Stop PR being merged unless it has a correct set of porting labels + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} env: GITHUB_TOKEN: ${{ secrets.KATA_GITHUB_ACTIONS_TOKEN }} run: | diff --git a/.github/workflows/snap.yaml b/.github/workflows/snap.yaml index 165a3a3bef..5ec399e83c 100644 --- a/.github/workflows/snap.yaml +++ b/.github/workflows/snap.yaml @@ -1,17 +1,29 @@ name: snap CI -on: ["pull_request"] +on: + pull_request: + types: + - opened + - synchronize + - reopened + - edited + - labeled + - unlabeled + jobs: test: runs-on: ubuntu-20.04 steps: - name: Check out + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} uses: actions/checkout@v2 with: fetch-depth: 0 - name: Install Snapcraft + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} uses: samuelmeuli/action-snapcraft@v1 - name: Build snap + if: ${{ !contains(github.event.pull_request.labels.*.name, 'force-skip-ci') }} run: | snapcraft -d snap --destructive-mode diff --git a/src/runtime/virtcontainers/container.go b/src/runtime/virtcontainers/container.go index 60a409a527..b0bffa266d 100644 --- a/src/runtime/virtcontainers/container.go +++ b/src/runtime/virtcontainers/container.go @@ -604,33 +604,44 @@ func (c *Container) unmountHostMounts(ctx context.Context) error { span, ctx := katatrace.Trace(ctx, c.Logger(), "unmountHostMounts", containerTracingTags, map[string]string{"container_id": c.id}) defer span.End() + unmountFunc := func(m Mount) (err error) { + span, _ := katatrace.Trace(ctx, c.Logger(), "unmount", containerTracingTags, map[string]string{"container_id": c.id, "host-path": m.HostPath}) + defer func() { + if err != nil { + katatrace.AddTags(span, "error", err) + } + span.End() + }() + + if err = syscall.Unmount(m.HostPath, syscall.MNT_DETACH|UmountNoFollow); err != nil { + c.Logger().WithFields(logrus.Fields{ + "host-path": m.HostPath, + "error": err, + }).Warn("Could not umount") + return err + } + + if m.Type == "bind" { + s, err := os.Stat(m.HostPath) + if err != nil { + return errors.Wrapf(err, "Could not stat host-path %v", m.HostPath) + } + // Remove the empty file or directory + if s.Mode().IsRegular() && s.Size() == 0 { + os.Remove(m.HostPath) + } + if s.Mode().IsDir() { + syscall.Rmdir(m.HostPath) + } + } + return nil + } + for _, m := range c.mounts { if m.HostPath != "" { - span, _ := katatrace.Trace(ctx, c.Logger(), "unmount", containerTracingTags, map[string]string{"container_id": c.id, "host-path": m.HostPath}) - - if err := syscall.Unmount(m.HostPath, syscall.MNT_DETACH|UmountNoFollow); err != nil { - c.Logger().WithFields(logrus.Fields{ - "host-path": m.HostPath, - "error": err, - }).Warn("Could not umount") + if err := unmountFunc(m); err != nil { return err } - - if m.Type == "bind" { - s, err := os.Stat(m.HostPath) - if err != nil { - return errors.Wrapf(err, "Could not stat host-path %v", m.HostPath) - } - // Remove the empty file or directory - if s.Mode().IsRegular() && s.Size() == 0 { - os.Remove(m.HostPath) - } - if s.Mode().IsDir() { - syscall.Rmdir(m.HostPath) - } - } - - span.End() } } diff --git a/src/runtime/virtcontainers/kata_agent.go b/src/runtime/virtcontainers/kata_agent.go index cd0336ee8d..ebfbb6df99 100644 --- a/src/runtime/virtcontainers/kata_agent.go +++ b/src/runtime/virtcontainers/kata_agent.go @@ -2068,10 +2068,20 @@ func (k *kataAgent) sendReq(spanCtx context.Context, request interface{}) (inter } msgName := proto.MessageName(request.(proto.Message)) + + k.Lock() + + if k.reqHandlers == nil { + return nil, errors.New("Client has already disconnected") + } + handler := k.reqHandlers[msgName] if msgName == "" || handler == nil { return nil, errors.New("Invalid request type") } + + k.Unlock() + message := request.(proto.Message) ctx, cancel := k.getReqContext(spanCtx, msgName) if cancel != nil { diff --git a/tools/packaging/static-build/qemu/build-base-qemu.sh b/tools/packaging/static-build/qemu/build-base-qemu.sh index a45651f155..0be853e59c 100755 --- a/tools/packaging/static-build/qemu/build-base-qemu.sh +++ b/tools/packaging/static-build/qemu/build-base-qemu.sh @@ -54,4 +54,4 @@ sudo "${container_engine}" run \ -v "${PWD}":/share qemu-static \ mv "${qemu_destdir}/${qemu_tar}" /share/ -sudo chown ${USER}:${USER} "${PWD}/${qemu_tar}" +sudo chown ${USER}:$(id -gn ${USER}) "${PWD}/${qemu_tar}"