From 9b4b50d663532279b073d2d1ae7d4daec96b261f Mon Sep 17 00:00:00 2001 From: Chris Fegan Date: Sun, 6 Jul 2025 18:27:15 +1000 Subject: [PATCH 1/6] Add CI/CD GitHub workflow for java17 (stable and staging). --- .../workflows/example-http-java17-stable.yaml | 115 ++++++++++++++++++ .../example-http-java17-staging.yaml | 115 ++++++++++++++++++ README.md | 1 + 3 files changed, 231 insertions(+) create mode 100644 .github/workflows/example-http-java17-stable.yaml create mode 100644 .github/workflows/example-http-java17-staging.yaml diff --git a/.github/workflows/example-http-java17-stable.yaml b/.github/workflows/example-http-java17-stable.yaml new file mode 100644 index 00000000..a5c43dfd --- /dev/null +++ b/.github/workflows/example-http-java17-stable.yaml @@ -0,0 +1,115 @@ +name: examples/http-java17 (stable) + +on: + workflow_dispatch: + + push: + branches: [main] + paths: + - '.github/workflows/example-http-java17-stable.yaml' + - 'http-java17/**' + - '!http-java17/README.md' + + pull_request: + types: [opened, synchronize, reopened] + branches: [main] + paths: + - '.github/workflows/example-http-java17-stable.yaml' + - 'http-java17/**' + - '!http-java17/README.md' + + schedule: + - cron: '45 15 * * 1-5' + +# Automatically cancel in-progress actions on the same branch +concurrency: + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }} + cancel-in-progress: true + +env: + UKC_METRO: ${{ vars.UKC_METRO }} + UKC_TOKEN: ${{ secrets.UKC_TOKEN }} + KRAFTKIT_NO_CHECK_UPDATES: true + KRAFTKIT_LOG_LEVEL: debug + +jobs: + integration: + timeout-minutes: 60 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Test + id: test + uses: unikraft/kraftkit@staging + continue-on-error: true + with: + run: | + set -xe; + + cd http-java17; + + kraft cloud deploy \ + --no-start \ + --memory 512 \ + --name http-java17-${GITHUB_RUN_ID} \ + --runtime index.unikraft.io/official-testing/java:17 \ + --subdomain http-java17-${GITHUB_RUN_ID} \ + -p 443:8080 \ + .; + + # wait for the instance to start + kraft cloud vm start -w 60s http-java17-${GITHUB_RUN_ID}; + sleep 5; + + curl -Lv --fail-with-body --max-time 10 https://http-java17-${GITHUB_RUN_ID}.${UKC_METRO}.kraft.host + + - name: Cleanup + uses: unikraft/kraftkit@staging + if: always() + with: + run: | + set -xe; + + kraft cloud vm stop http-java17-${GITHUB_RUN_ID} || true; + kraft cloud vm logs http-java17-${GITHUB_RUN_ID} || true; + kraft cloud vm rm http-java17-${GITHUB_RUN_ID} || true; + kraft cloud img rm index.unikraft.io/test/http-java17-${GITHUB_RUN_ID} || true; + + - name: Re-test with debug info + id: re-test + if: ${{ success() && steps.test.outcome == 'failure' }} + uses: unikraft/kraftkit@staging + with: + run: | + set -xe; + + cd http-java17; + + kraft cloud deploy \ + --no-start \ + --memory 512 \ + --name http-java17-${GITHUB_RUN_ID}-dbg \ + --runtime index.unikraft.io/official-testing/java:17-dbg \ + --subdomain http-java17-${GITHUB_RUN_ID}-dbg \ + -p 443:8080 \ + .; + + # wait for the instance to start + kraft cloud vm start -w 60s http-java17-${GITHUB_RUN_ID}-dbg; + sleep 5; + + curl -Lv --fail-with-body --max-time 10 https://http-java17-${GITHUB_RUN_ID}-dbg.${UKC_METRO}.kraft.host + + - name: Cleanup Debug + uses: unikraft/kraftkit@staging + if: always() + with: + run: | + set -xe; + + kraft cloud vm stop http-java17-${GITHUB_RUN_ID}-dbg || true; + kraft cloud vm logs http-java17-${GITHUB_RUN_ID}-dbg || true; + kraft cloud vm rm http-java17-${GITHUB_RUN_ID}-dbg || true; + kraft cloud img rm index.unikraft.io/test/http-java17-${GITHUB_RUN_ID}-dbg || true; diff --git a/.github/workflows/example-http-java17-staging.yaml b/.github/workflows/example-http-java17-staging.yaml new file mode 100644 index 00000000..2f8f889a --- /dev/null +++ b/.github/workflows/example-http-java17-staging.yaml @@ -0,0 +1,115 @@ +name: examples/http-java17 (staging) + +on: + workflow_dispatch: + + push: + branches: [main] + paths: + - '.github/workflows/example-http-java17-staging.yaml' + - 'http-java17/**' + - '!http-java17/README.md' + + pull_request: + types: [opened, synchronize, reopened] + branches: [main] + paths: + - '.github/workflows/example-http-java17-staging.yaml' + - 'http-java17/**' + - '!http-java17/README.md' + + schedule: + - cron: '45 15 * * 1-5' + +# Automatically cancel in-progress actions on the same branch +concurrency: + group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }} + cancel-in-progress: true + +env: + UKC_METRO: ${{ vars.UKC_METRO }} + UKC_TOKEN: ${{ secrets.UKC_TOKEN }} + KRAFTKIT_NO_CHECK_UPDATES: true + KRAFTKIT_LOG_LEVEL: debug + +jobs: + integration: + timeout-minutes: 60 + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Test + id: test + uses: unikraft/kraftkit@staging + continue-on-error: true + with: + run: | + set -xe; + + cd http-java17; + + kraft cloud deploy \ + --no-start \ + --memory 512 \ + --name http-java17-${GITHUB_RUN_ID} \ + --runtime index.unikraft.io/official-staging/java:17 \ + --subdomain http-java17-${GITHUB_RUN_ID} \ + -p 443:8080 \ + .; + + # wait for the instance to start + kraft cloud vm start -w 60s http-java17-${GITHUB_RUN_ID}; + sleep 5; + + curl -Lv --fail-with-body --max-time 10 https://http-java17-${GITHUB_RUN_ID}.${UKC_METRO}.kraft.host + + - name: Cleanup + uses: unikraft/kraftkit@staging + if: always() + with: + run: | + set -xe; + + kraft cloud vm stop http-java17-${GITHUB_RUN_ID} || true; + kraft cloud vm logs http-java17-${GITHUB_RUN_ID} || true; + kraft cloud vm rm http-java17-${GITHUB_RUN_ID} || true; + kraft cloud img rm index.unikraft.io/test/http-java17-${GITHUB_RUN_ID} || true; + + - name: Re-test with debug info + id: re-test + if: ${{ success() && steps.test.outcome == 'failure' }} + uses: unikraft/kraftkit@staging + with: + run: | + set -xe; + + cd http-java17; + + kraft cloud deploy \ + --no-start \ + --memory 512 \ + --name http-java17-${GITHUB_RUN_ID}-dbg \ + --runtime index.unikraft.io/official-staging/java:17-dbg \ + --subdomain http-java17-${GITHUB_RUN_ID}-dbg \ + -p 443:8080 \ + .; + + # wait for the instance to start + kraft cloud vm start -w 60s http-java17-${GITHUB_RUN_ID}-dbg; + sleep 5; + + curl -Lv --fail-with-body --max-time 10 https://http-java17-${GITHUB_RUN_ID}-dbg.${UKC_METRO}.kraft.host + + - name: Cleanup Debug + uses: unikraft/kraftkit@staging + if: always() + with: + run: | + set -xe; + + kraft cloud vm stop http-java17-${GITHUB_RUN_ID}-dbg || true; + kraft cloud vm logs http-java17-${GITHUB_RUN_ID}-dbg || true; + kraft cloud vm rm http-java17-${GITHUB_RUN_ID}-dbg || true; + kraft cloud img rm index.unikraft.io/test/http-java17-${GITHUB_RUN_ID}-dbg || true; diff --git a/README.md b/README.md index aa3001d3..3cbc7d64 100644 --- a/README.md +++ b/README.md @@ -11,6 +11,7 @@ Example | Unikraft Cloud
`stable` | Unikraft Cloud
`staging` | [`http-cpp`](https://github.com/unikraft-cloud/examples/tree/main/http-cpp) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-cpp-stable.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-cpp-stable.yaml) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-cpp-staging.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-cpp-staging.yaml) | [`http-cpp-boost`](https://github.com/unikraft-cloud/examples/tree/main/http-cpp-boost) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-cpp-boost-stable.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-cpp-boost-stable.yaml) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-cpp-boost-staging.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-cpp-boost-staging.yaml) | [`http-go1.21`](https://github.com/unikraft-cloud/examples/tree/main/http-go1.21) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-go1.21-stable.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-go1.21-stable.yaml) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-go1.21-staging.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-go1.21-staging.yaml) | +[`http-java17`](https://github.com/unikraft-cloud/examples/tree/main/http-java17) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-java17-stable.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-java17-stable.yaml) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-java17-staging.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-java17-staging.yaml) | [`http-lua5.1`](https://github.com/unikraft-cloud/examples/tree/main/http-lua5.1) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-lua5.1-stable.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-lua5.1-stable.yaml) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-lua5.1-staging.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-lua5.1-staging.yaml) | [`http-node21`](https://github.com/unikraft-cloud/examples/tree/main/http-node21) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-node21-stable.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-node21-stable.yaml) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-node21-staging.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-node21-staging.yaml) | [`http-perl5.38`](https://github.com/unikraft-cloud/examples/tree/main/http-perl5.38) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-perl5.38-stable.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-perl5.38-stable.yaml) | [![](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-perl5.38-staging.yaml/badge.svg)](https://github.com/unikraft-cloud/examples/actions/workflows/example-http-perl5.38-staging.yaml) | From 953aff41d9194c32717d91d26719bcb1b9638a66 Mon Sep 17 00:00:00 2001 From: chrisf-aarnet <65877535+chrisf-aarnet@users.noreply.github.com> Date: Sun, 6 Jul 2025 20:23:06 +1000 Subject: [PATCH 2/6] Update example-http-java17-staging.yaml Remove the explicitly set runtime as CI/CD experiment Signed-off-by: chrisf-aarnet <65877535+chrisf-aarnet@users.noreply.github.com> --- .github/workflows/example-http-java17-staging.yaml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/example-http-java17-staging.yaml b/.github/workflows/example-http-java17-staging.yaml index 2f8f889a..9a0c249b 100644 --- a/.github/workflows/example-http-java17-staging.yaml +++ b/.github/workflows/example-http-java17-staging.yaml @@ -54,7 +54,6 @@ jobs: --no-start \ --memory 512 \ --name http-java17-${GITHUB_RUN_ID} \ - --runtime index.unikraft.io/official-staging/java:17 \ --subdomain http-java17-${GITHUB_RUN_ID} \ -p 443:8080 \ .; @@ -91,7 +90,6 @@ jobs: --no-start \ --memory 512 \ --name http-java17-${GITHUB_RUN_ID}-dbg \ - --runtime index.unikraft.io/official-staging/java:17-dbg \ --subdomain http-java17-${GITHUB_RUN_ID}-dbg \ -p 443:8080 \ .; From e448ed05e4f9a6279e8e7dfc8c5d2ca6d4a127fb Mon Sep 17 00:00:00 2001 From: chrisf-aarnet <65877535+chrisf-aarnet@users.noreply.github.com> Date: Sun, 6 Jul 2025 20:34:58 +1000 Subject: [PATCH 3/6] Update example-http-java17-staging.yaml Change to use the official java runtime. specific argument: --runtime index.unikraft.io/official/java:17 \ Signed-off-by: chrisf-aarnet <65877535+chrisf-aarnet@users.noreply.github.com> --- .github/workflows/example-http-java17-staging.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/example-http-java17-staging.yaml b/.github/workflows/example-http-java17-staging.yaml index 9a0c249b..ad48f2dc 100644 --- a/.github/workflows/example-http-java17-staging.yaml +++ b/.github/workflows/example-http-java17-staging.yaml @@ -54,6 +54,7 @@ jobs: --no-start \ --memory 512 \ --name http-java17-${GITHUB_RUN_ID} \ + --runtime index.unikraft.io/official/java:17 \ --subdomain http-java17-${GITHUB_RUN_ID} \ -p 443:8080 \ .; @@ -90,6 +91,7 @@ jobs: --no-start \ --memory 512 \ --name http-java17-${GITHUB_RUN_ID}-dbg \ + --runtime index.unikraft.io/official/java:17 \ --subdomain http-java17-${GITHUB_RUN_ID}-dbg \ -p 443:8080 \ .; From 9c9fe85d7f3b8b7576d9d3cb8b56bebd8a0a151c Mon Sep 17 00:00:00 2001 From: chrisf-aarnet <65877535+chrisf-aarnet@users.noreply.github.com> Date: Sun, 6 Jul 2025 20:42:37 +1000 Subject: [PATCH 4/6] Update example-http-java17-stable.yaml Add more CI/CD debugging for java-http workflow Signed-off-by: chrisf-aarnet <65877535+chrisf-aarnet@users.noreply.github.com> --- .github/workflows/example-http-java17-stable.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/example-http-java17-stable.yaml b/.github/workflows/example-http-java17-stable.yaml index a5c43dfd..f88527bf 100644 --- a/.github/workflows/example-http-java17-stable.yaml +++ b/.github/workflows/example-http-java17-stable.yaml @@ -73,6 +73,7 @@ jobs: set -xe; kraft cloud vm stop http-java17-${GITHUB_RUN_ID} || true; + kraft cloud instance get http-java17-${GITHUB_RUN_ID} || true; kraft cloud vm logs http-java17-${GITHUB_RUN_ID} || true; kraft cloud vm rm http-java17-${GITHUB_RUN_ID} || true; kraft cloud img rm index.unikraft.io/test/http-java17-${GITHUB_RUN_ID} || true; @@ -110,6 +111,7 @@ jobs: set -xe; kraft cloud vm stop http-java17-${GITHUB_RUN_ID}-dbg || true; + kraft cloud instance get http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud vm logs http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud vm rm http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud img rm index.unikraft.io/test/http-java17-${GITHUB_RUN_ID}-dbg || true; From 6460b24d7ac84a332d6b74cf4550f984c52c4690 Mon Sep 17 00:00:00 2001 From: chrisf-aarnet <65877535+chrisf-aarnet@users.noreply.github.com> Date: Sun, 6 Jul 2025 20:53:58 +1000 Subject: [PATCH 5/6] Update example-http-java17-stable.yaml Update the runtime for http-java CI/CD to one that exists Signed-off-by: chrisf-aarnet <65877535+chrisf-aarnet@users.noreply.github.com> --- .github/workflows/example-http-java17-stable.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/example-http-java17-stable.yaml b/.github/workflows/example-http-java17-stable.yaml index f88527bf..2cf47c68 100644 --- a/.github/workflows/example-http-java17-stable.yaml +++ b/.github/workflows/example-http-java17-stable.yaml @@ -54,7 +54,7 @@ jobs: --no-start \ --memory 512 \ --name http-java17-${GITHUB_RUN_ID} \ - --runtime index.unikraft.io/official-testing/java:17 \ + --runtime index.unikraft.io/official/java:17 \ --subdomain http-java17-${GITHUB_RUN_ID} \ -p 443:8080 \ .; @@ -92,7 +92,7 @@ jobs: --no-start \ --memory 512 \ --name http-java17-${GITHUB_RUN_ID}-dbg \ - --runtime index.unikraft.io/official-testing/java:17-dbg \ + --runtime index.unikraft.io/official/java:17-dbg \ --subdomain http-java17-${GITHUB_RUN_ID}-dbg \ -p 443:8080 \ .; From 9d816771b36ea0094984f42abb0b228572a430f2 Mon Sep 17 00:00:00 2001 From: Chris Fegan Date: Sun, 6 Jul 2025 21:00:01 +1000 Subject: [PATCH 6/6] Add additional debug for failing http-java CI/CD --- .github/workflows/example-http-java17-stable.yaml | 2 ++ .github/workflows/example-http-java17-staging.yaml | 6 +++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/.github/workflows/example-http-java17-stable.yaml b/.github/workflows/example-http-java17-stable.yaml index 2cf47c68..b463730f 100644 --- a/.github/workflows/example-http-java17-stable.yaml +++ b/.github/workflows/example-http-java17-stable.yaml @@ -72,6 +72,7 @@ jobs: run: | set -xe; + kraft cloud vm logs http-java17-${GITHUB_RUN_ID} || true; kraft cloud vm stop http-java17-${GITHUB_RUN_ID} || true; kraft cloud instance get http-java17-${GITHUB_RUN_ID} || true; kraft cloud vm logs http-java17-${GITHUB_RUN_ID} || true; @@ -110,6 +111,7 @@ jobs: run: | set -xe; + kraft cloud vm logs http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud vm stop http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud instance get http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud vm logs http-java17-${GITHUB_RUN_ID}-dbg || true; diff --git a/.github/workflows/example-http-java17-staging.yaml b/.github/workflows/example-http-java17-staging.yaml index ad48f2dc..1ee2dee3 100644 --- a/.github/workflows/example-http-java17-staging.yaml +++ b/.github/workflows/example-http-java17-staging.yaml @@ -72,7 +72,9 @@ jobs: run: | set -xe; + kraft cloud vm logs http-java17-${GITHUB_RUN_ID} || true; kraft cloud vm stop http-java17-${GITHUB_RUN_ID} || true; + kraft cloud instance get http-java17-${GITHUB_RUN_ID} || true; kraft cloud vm logs http-java17-${GITHUB_RUN_ID} || true; kraft cloud vm rm http-java17-${GITHUB_RUN_ID} || true; kraft cloud img rm index.unikraft.io/test/http-java17-${GITHUB_RUN_ID} || true; @@ -91,7 +93,7 @@ jobs: --no-start \ --memory 512 \ --name http-java17-${GITHUB_RUN_ID}-dbg \ - --runtime index.unikraft.io/official/java:17 \ + --runtime index.unikraft.io/official/java:17-dbg \ --subdomain http-java17-${GITHUB_RUN_ID}-dbg \ -p 443:8080 \ .; @@ -109,7 +111,9 @@ jobs: run: | set -xe; + kraft cloud vm logs http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud vm stop http-java17-${GITHUB_RUN_ID}-dbg || true; + kraft cloud instance get http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud vm logs http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud vm rm http-java17-${GITHUB_RUN_ID}-dbg || true; kraft cloud img rm index.unikraft.io/test/http-java17-${GITHUB_RUN_ID}-dbg || true;