diff --git a/.github/workflows/ccruntime-nightly.yaml b/.github/workflows/ccruntime-nightly.yaml new file mode 100644 index 00000000..9c0d966e --- /dev/null +++ b/.github/workflows/ccruntime-nightly.yaml @@ -0,0 +1,24 @@ +name: ccruntime e2e test nightly +on: + schedule: + - cron: '0 2 * * *' + workflow_dispatch: + +jobs: + e2e-nightly: + uses: ./.github/workflows/ccruntime_e2e.yaml + + e2e-ibm-se-nightly: + runs-on: s390x + strategy: + fail-fast: false + matrix: + test_title: + - cc-operator-e2e-tests + steps: + - name: Fetch a test result for {{ matrix.test_title }} + run: | + file_name="${TEST_TITLE}-$(date +%Y-%m-%d).log" + /home/${USER}/script/handle_test_log.sh download $file_name + env: + TEST_TITLE: ${{ matrix.test_title }} diff --git a/.github/workflows/ccruntime-on-push.yaml b/.github/workflows/ccruntime-on-push.yaml new file mode 100644 index 00000000..1fcf4e1a --- /dev/null +++ b/.github/workflows/ccruntime-on-push.yaml @@ -0,0 +1,17 @@ +name: ccruntime e2e test on-push +on: + pull_request_target: + branches: + - 'main' + types: + - opened + - synchronize + - reopened + - labeled + paths-ignore: + - 'docs/**' + +jobs: + e2e-on-push: + if: ${{ contains(github.event.pull_request.labels.*.name, 'ok-to-test') }} + uses: ./.github/workflows/ccruntime_e2e.yaml diff --git a/.github/workflows/ccruntime_e2e.yaml b/.github/workflows/ccruntime_e2e.yaml index 89851e67..f0f82591 100644 --- a/.github/workflows/ccruntime_e2e.yaml +++ b/.github/workflows/ccruntime_e2e.yaml @@ -1,8 +1,6 @@ name: ccruntime e2e tests on: - pull_request: - branches: - - main + workflow_call: permissions: contents: read @@ -13,10 +11,24 @@ jobs: strategy: fail-fast: false matrix: - runtimeclass: ["kata-qemu", "kata-clh"] - instance: ["az-ubuntu-2004", "az-ubuntu-2204"] + runtimeclass: + - "kata-qemu" + - "kata-clh" + instance: + - "az-ubuntu-2004" + - "az-ubuntu-2204" + - "s390x" + exclude: + - runtimeclass: "kata-clh" + instance: "s390x" runs-on: ${{ matrix.instance }} steps: + - name: Take a pre-action for self-hosted runner + run: | + if [ -f ${HOME}/script/pre_action.sh ]; then + ${HOME}/script/pre_action.sh cc-operator + fi + - uses: actions/checkout@v4 - name: Install deps @@ -29,4 +41,17 @@ jobs: run: | cd tests/e2e export PATH="$PATH:/usr/local/bin" - ./run-local.sh -r "${{ matrix.runtimeclass }}" -u + args="-u" + if [ $RUNNING_INSTANCE = "s390x" ]; then + args="" + fi + ./run-local.sh -r "${{ matrix.runtimeclass }}" "${args}" + env: + RUNNING_INSTANCE: ${{ matrix.instance }} + + - name: Take a post-action + if: always() + run: | + if [ -f ${HOME}/script/post_action.sh ]; then + ${HOME}/script/post_action.sh cc-operator + fi diff --git a/tests/e2e/ansible/install_docker.yml b/tests/e2e/ansible/install_docker.yml index 9e3572d7..db26ea65 100644 --- a/tests/e2e/ansible/install_docker.yml +++ b/tests/e2e/ansible/install_docker.yml @@ -77,6 +77,43 @@ - docker-ce-cli state: present when: docker_exist.rc != 0 and ansible_distribution == "CentOS" +# +# In order to prevent "systemd: docker.service Start request repeated too quickly" +# +- name: Set StartLimitBurst to 0 on Ubuntu for s390x + block: + - name: If a fragment path starts with `/lib`, then create /etc/systemd/system/docker.service.d + block: + - name: Get FragmentPath + shell: systemctl show -p FragmentPath docker.service | awk -F'=' '{print $2}' + register: fragment_path + - name: Copy fragment file to /etc/systemd/system/docker.service.d + copy: + src: "{{ fragment_path.stdout }}" + dest: "{{ fragment_path.stdout.replace('/lib', '/etc') }}" + when: fragment_path.stdout.find('/lib') != -1 + - name: Configure `StartLimitBurst=0` in /etc/systemd/system/docker.service + block: + - name: Check if /etc/systemd/system/docker.service has StartLimitBurst=0 + shell: grep -q 'StartLimitBurst' /etc/systemd/system/docker.service + register: start_limit_burst + ignore_errors: yes + - name: Replace a value of StartLimitBurst to 0 + lineinfile: + path: /etc/systemd/system/docker.service + regexp: '^StartLimitBurst=' + line: 'StartLimitBurst=0' + when: start_limit_burst.rc == 0 + - name: Otherwise, insert `StartLimitBurst=0` just after a service section + lineinfile: + path: /etc/systemd/system/docker.service + insertafter: '\[Service\]' + line: 'StartLimitBurst=0' + when: start_limit_burst.rc != 0 + - name: Reload systemd + systemd: + daemon_reload: yes + when: ansible_distribution == "Ubuntu" and ansible_architecture == 's390x' - name: Start docker service service: name: docker