From 325c33985eabaa0f3aa4ab27a18909c75a9f1b51 Mon Sep 17 00:00:00 2001 From: driazati Date: Tue, 6 Dec 2022 14:42:15 -0800 Subject: [PATCH] [ci] Remove Jenkinsfile for migration to platform-specific jobs --- .asf.yaml | 13 +- Jenkinsfile | 3896 --------------------------------------------------- 2 files changed, 11 insertions(+), 3898 deletions(-) delete mode 100755 Jenkinsfile diff --git a/.asf.yaml b/.asf.yaml index f4aba210d2cc..34d191e376bb 100644 --- a/.asf.yaml +++ b/.asf.yaml @@ -56,8 +56,17 @@ github: main: required_status_checks: contexts: - # Require a passing run from Jenkins - - tvm-ci/pr-head + # Require passing runs from Jenkins for all platforms + - arm/pr-head + - cortexm/pr-head + - cpu/pr-head + - gpu/pr-head + - hexagon/pr-head + - i386/pr-head + - lint/pr-head + - minimal/pr-head + - riscv/pr-head + - wasm/pr-head required_pull_request_reviews: required_approving_review_count: 1 diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100755 index ea26b9e8ac02..000000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,3896 +0,0 @@ -#!groovy -// -*- mode: groovy -*- - -// Licensed to the Apache Software Foundation (ASF) under one -// or more contributor license agreements. See the NOTICE file -// distributed with this work for additional information -// regarding copyright ownership. The ASF licenses this file -// to you under the Apache License, Version 2.0 (the -// "License"); you may not use this file except in compliance -// with the License. You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, -// software distributed under the License is distributed on an -// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -// KIND, either express or implied. See the License for the -// specific language governing permissions and limitations -// under the License. - -// Jenkins pipeline -// See documents at https://jenkins.io/doc/book/pipeline/jenkinsfile/ - -// Docker env used for testing -// Different image may have different version tag -// because some of them are more stable than anoter. -// -// Docker images are maintained by PMC, cached in dockerhub -// and remains relatively stable over the time. -// Flow for upgrading docker env(need commiter) -// -// - Send PR to upgrade build script in the repo -// - Build the new docker image -// - Tag the docker image with a new version and push to a binary cache. -// - Update the version in the Jenkinsfile, send a PR -// - Fix any issues wrt to the new image version in the PR -// - Merge the PR and now we are in new version -// - Tag the new version as the lates -// - Periodically cleanup the old versions on local workers -// - -// ============================= IMPORTANT NOTE ============================= -// This file is generated by 'jenkins/generate.py'. Do not edit this file directly! -// Make edits to 'jenkins/Jenkinsfile.j2' and regenerate this with -// 'python3 jenkins/generate.py' -// Note: This timestamp is here to ensure that updates to the Jenkinsfile are -// always rebased on main before merging: -// Generated at 2022-11-22T15:04:11.262643 - -import org.jenkinsci.plugins.pipeline.modeldefinition.Utils -// NOTE: these lines are scanned by docker/dev_common.sh. Please update the regex as needed. --> -ci_lint = 'tlcpack/ci-lint:20221128-070141-ae4fd7df7' -ci_gpu = 'tlcpack/ci-gpu:20221128-070141-ae4fd7df7' -ci_cpu = 'tlcpack/ci-cpu:20221128-070141-ae4fd7df7' -ci_minimal = 'tlcpack/ci-minimal:20221128-070141-ae4fd7df7' -ci_wasm = 'tlcpack/ci-wasm:20221128-070141-ae4fd7df7' -ci_i386 = 'tlcpack/ci-i386:20221128-070141-ae4fd7df7' -ci_cortexm = 'tlcpack/ci-cortexm:20221128-070141-ae4fd7df7' -ci_arm = 'tlcpack/ci-arm:20221128-070141-ae4fd7df7' -ci_hexagon = 'tlcpack/ci-hexagon:20221025-182121-e41d0ed6e' -ci_riscv = 'tlcpack/ci-riscv:20221128-070141-ae4fd7df7' -// <--- End of regex-scanned config. - -// Parameters to allow overriding (in Jenkins UI), the images -// to be used by a given build. When provided, they take precedence -// over default values above. -properties([ - parameters([ - string(name: 'ci_arm_param', defaultValue: ''), - string(name: 'ci_cortexm_param', defaultValue: ''), - string(name: 'ci_cpu_param', defaultValue: ''), - string(name: 'ci_gpu_param', defaultValue: ''), - string(name: 'ci_hexagon_param', defaultValue: ''), - string(name: 'ci_i386_param', defaultValue: ''), - string(name: 'ci_lint_param', defaultValue: ''), - string(name: 'ci_minimal_param', defaultValue: ''), - string(name: 'ci_riscv_param', defaultValue: ''), - string(name: 'ci_wasm_param', defaultValue: ''), - ]) -]) - -// Placeholders for newly built Docker image names (if rebuild_docker_images -// is used) - built_ci_arm = null; - built_ci_cortexm = null; - built_ci_cpu = null; - built_ci_gpu = null; - built_ci_hexagon = null; - built_ci_i386 = null; - built_ci_lint = null; - built_ci_minimal = null; - built_ci_riscv = null; - built_ci_wasm = null; - -// Global variable assigned during Sanity Check that holds the sha1 which should be -// merged into the PR in all branches. -upstream_revision = null - -// command to start a docker container -docker_run = 'docker/bash.sh --env CI --env TVM_SHARD_INDEX --env TVM_NUM_SHARDS --env RUN_DISPLAY_URL --env PLATFORM --env SKIP_SLOW_TESTS --env TEST_STEP_NAME' -docker_build = 'docker/build.sh' -// timeout in minutes -max_time = 180 -rebuild_docker_images = false - -// Filenames for stashing between build and test steps -s3_bucket = 'tvm-jenkins-artifacts-prod' -s3_prefix = "tvm/${env.BRANCH_NAME}/${env.BUILD_NUMBER}" - -// Jenkins script root directory -jenkins_scripts_root = "ci/scripts/jenkins" - -// General note: Jenkins has limits on the size of a method (or top level code) -// that are pretty strict, so most usage of groovy methods in these templates -// are purely to satisfy the JVM -def per_exec_ws(folder) { - return "workspace/exec_${env.EXECUTOR_NUMBER}/" + folder -} - -// initialize source codes -def init_git() { - retry(5) { - checkout scm - } - - // Add more info about job node - sh ( - script: './tests/scripts/task_show_node_info.sh', - label: 'Show executor node info', - ) - - // Determine merge commit to use for all stages - if (env.BRANCH_NAME == 'main') { - // Only set upstream_revision to HEAD and skip merging to avoid a race with another commit merged to main. - update_upstream_revision("HEAD") - } else { - // This is PR branch so merge with latest main. - merge_with_main() - } - - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - retry 3 timeout 5m git submodule update --init -f --jobs 0 - """, - label: 'Update git submodules', - ) - checkout_trusted_files() -} - -def update_upstream_revision(git_ref) { - if (upstream_revision == null) { - upstream_revision = sh( - script: "git log -1 ${git_ref} --format=\'%H\'", - label: 'Determine upstream revision', - returnStdout: true, - ).trim() - } -} - -def merge_with_main() { - sh ( - script: 'git fetch origin main', - label: 'Fetch upstream', - ) - update_upstream_revision("FETCH_HEAD") - sh ( - script: "git -c user.name=TVM-Jenkins -c user.email=jenkins@tvm.apache.org merge ${upstream_revision}", - label: 'Merge to origin/main' - ) -} - -def docker_init(image) { - // Clear out all Docker images that aren't going to be used - sh( - script: """ - set -eux - docker image ls --all - IMAGES=\$(docker image ls --all --format '{{.Repository}}:{{.Tag}} {{.ID}}') - - echo -e "Found images:\\n\$IMAGES" - echo "\$IMAGES" | { grep -vE '${image}' || test \$? = 1; } | { xargs docker rmi || test \$? = 123; } - - docker image ls --all - """, - label: 'Clean old Docker images', - ) - - if (image.contains("amazonaws.com")) { - // If this string is in the image name it's from ECR and needs to be pulled - // with the right credentials - ecr_pull(image) - } else { - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - retry 5 docker pull ${image} - """, - label: 'Pull docker image', - ) - } -} - -def should_skip_slow_tests(pr_number) { - withCredentials([string( - credentialsId: 'tvm-bot-jenkins-reader', - variable: 'GITHUB_TOKEN', - )]) { - // Exit code of 1 means run slow tests, exit code of 0 means skip slow tests - result = sh ( - returnStatus: true, - script: "./${jenkins_scripts_root}/should_run_slow_tests.py --pr '${pr_number}'", - label: 'Check if CI should run slow tests', - ) - } - return result == 0 -} - -def cancel_previous_build() { - // cancel previous build if it is not on main. - if (env.BRANCH_NAME != 'main') { - def buildNumber = env.BUILD_NUMBER as int - // Milestone API allows us to cancel previous build - // with the same milestone number - if (buildNumber > 1) milestone(buildNumber - 1) - milestone(buildNumber) - } -} - -def checkout_trusted_files() { - // trust everything from branch builds - if (env.BRANCH_NAME == null || !env.BRANCH_NAME.startsWith('PR-')) { - return; - } - - // trust peoople listed in CONTRIBUTING.md - grep_code = sh( - returnStatus: true, - script: "git show '${upstream_revision}:CONTRIBUTORS.md' | grep '@${env.CHANGE_AUTHOR}'", - label: 'Check if change is from a contributor', - ) - - if (grep_code == 1) { - // Any scripts that run on the bare host and not inside a Docker container - // (especially those that access secrets) should be checked out here so - // only trusted versions are used in CI - sh( - script: "git checkout ${upstream_revision} ${jenkins_scripts_root}/.", - label: 'Check out trusted files', - ) - } -} - -def should_skip_ci(pr_number) { - if (env.BRANCH_NAME == null || !env.BRANCH_NAME.startsWith('PR-')) { - // never skip CI on build sourced from a branch - return false - } - glob_skip_ci_code = sh ( - returnStatus: true, - script: "./${jenkins_scripts_root}/git_skip_ci_globs.py", - label: 'Check if CI should be skipped due to changed files', - ) - if (glob_skip_ci_code == 0) { - return true - } - withCredentials([string( - credentialsId: 'tvm-bot-jenkins-reader', - variable: 'GITHUB_TOKEN', - )]) { - // Exit code of 1 means run full CI (or the script had an error, so run - // full CI just in case). Exit code of 0 means skip CI. - git_skip_ci_code = sh ( - returnStatus: true, - script: "./${jenkins_scripts_root}/git_skip_ci.py --pr '${pr_number}'", - label: 'Check if CI should be skipped', - ) - } - return git_skip_ci_code == 0 -} - -def check_pr(pr_number) { - if (env.BRANCH_NAME == null || !env.BRANCH_NAME.startsWith('PR-')) { - // never skip CI on build sourced from a branch - return false - } - withCredentials([string( - credentialsId: 'tvm-bot-jenkins-reader', - variable: 'GITHUB_TOKEN', - )]) { - sh ( - script: "python3 ${jenkins_scripts_root}/check_pr.py --pr ${pr_number}", - label: 'Check PR title and body', - ) - } - -} - -def prepare() { - stage('Prepare') { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/prepare") { - init_git() - - check_pr(env.CHANGE_ID) - - if (env.DETERMINE_DOCKER_IMAGES == 'yes') { - sh( - script: "./${jenkins_scripts_root}/determine_docker_images.py ci_arm=${ci_arm} ci_cortexm=${ci_cortexm} ci_cpu=${ci_cpu} ci_gpu=${ci_gpu} ci_hexagon=${ci_hexagon} ci_i386=${ci_i386} ci_lint=${ci_lint} ci_minimal=${ci_minimal} ci_riscv=${ci_riscv} ci_wasm=${ci_wasm} ", - label: 'Decide whether to use tlcpack or tlcpackstaging for Docker images', - ) - // Pull image names from the results of should_rebuild_docker.py - ci_arm = sh( - script: "cat .docker-image-names/ci_arm", - label: "Find docker image name for ci_arm", - returnStdout: true, - ).trim() - ci_cortexm = sh( - script: "cat .docker-image-names/ci_cortexm", - label: "Find docker image name for ci_cortexm", - returnStdout: true, - ).trim() - ci_cpu = sh( - script: "cat .docker-image-names/ci_cpu", - label: "Find docker image name for ci_cpu", - returnStdout: true, - ).trim() - ci_gpu = sh( - script: "cat .docker-image-names/ci_gpu", - label: "Find docker image name for ci_gpu", - returnStdout: true, - ).trim() - ci_hexagon = sh( - script: "cat .docker-image-names/ci_hexagon", - label: "Find docker image name for ci_hexagon", - returnStdout: true, - ).trim() - ci_i386 = sh( - script: "cat .docker-image-names/ci_i386", - label: "Find docker image name for ci_i386", - returnStdout: true, - ).trim() - ci_lint = sh( - script: "cat .docker-image-names/ci_lint", - label: "Find docker image name for ci_lint", - returnStdout: true, - ).trim() - ci_minimal = sh( - script: "cat .docker-image-names/ci_minimal", - label: "Find docker image name for ci_minimal", - returnStdout: true, - ).trim() - ci_riscv = sh( - script: "cat .docker-image-names/ci_riscv", - label: "Find docker image name for ci_riscv", - returnStdout: true, - ).trim() - ci_wasm = sh( - script: "cat .docker-image-names/ci_wasm", - label: "Find docker image name for ci_wasm", - returnStdout: true, - ).trim() - } - - ci_arm = params.ci_arm_param ?: ci_arm - ci_cortexm = params.ci_cortexm_param ?: ci_cortexm - ci_cpu = params.ci_cpu_param ?: ci_cpu - ci_gpu = params.ci_gpu_param ?: ci_gpu - ci_hexagon = params.ci_hexagon_param ?: ci_hexagon - ci_i386 = params.ci_i386_param ?: ci_i386 - ci_lint = params.ci_lint_param ?: ci_lint - ci_minimal = params.ci_minimal_param ?: ci_minimal - ci_riscv = params.ci_riscv_param ?: ci_riscv - ci_wasm = params.ci_wasm_param ?: ci_wasm - - sh (script: """ - echo "Docker images being used in this build:" - echo " ci_arm = ${ci_arm}" - echo " ci_cortexm = ${ci_cortexm}" - echo " ci_cpu = ${ci_cpu}" - echo " ci_gpu = ${ci_gpu}" - echo " ci_hexagon = ${ci_hexagon}" - echo " ci_i386 = ${ci_i386}" - echo " ci_lint = ${ci_lint}" - echo " ci_minimal = ${ci_minimal}" - echo " ci_riscv = ${ci_riscv}" - echo " ci_wasm = ${ci_wasm}" - """, label: 'Docker image names') - - is_docs_only_build = sh ( - returnStatus: true, - script: "./${jenkins_scripts_root}/git_change_docs.sh", - label: 'Check for docs only changes', - ) - skip_ci = should_skip_ci(env.CHANGE_ID) - skip_slow_tests = should_skip_slow_tests(env.CHANGE_ID) - rebuild_docker_images = sh ( - returnStatus: true, - script: "./${jenkins_scripts_root}/git_change_docker.sh", - label: 'Check for any docker changes', - ) - - if (skip_ci) { - // Don't rebuild when skipping CI - rebuild_docker_images = false - } - } - } - } -} -def ecr_push(full_name) { - aws_account_id = sh( - returnStdout: true, - script: 'aws sts get-caller-identity | grep Account | cut -f4 -d\\"', - label: 'Get AWS ID' - ).trim() - - def ecr_name = "${aws_account_id}.dkr.ecr.us-west-2.amazonaws.com/${full_name}" - try { - withEnv([ - "AWS_ACCOUNT_ID=${aws_account_id}", - 'AWS_DEFAULT_REGION=us-west-2', - "AWS_ECR_REPO=${aws_account_id}.dkr.ecr.us-west-2.amazonaws.com"]) { - sh( - script: ''' - set -eux - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ECR_REPO - ''', - label: 'Log in to ECR' - ) - sh( - script: """ - set -x - . ${jenkins_scripts_root}/retry.sh - docker tag ${full_name} \$AWS_ECR_REPO/${full_name} - retry 5 docker push \$AWS_ECR_REPO/${full_name} - """, - label: 'Upload image to ECR' - ) - } - } finally { - withEnv([ - "AWS_ACCOUNT_ID=${aws_account_id}", - 'AWS_DEFAULT_REGION=us-west-2', - "AWS_ECR_REPO=${aws_account_id}.dkr.ecr.us-west-2.amazonaws.com"]) { - sh( - script: 'docker logout $AWS_ECR_REPO', - label: 'Clean up login credentials' - ) - } - } - return ecr_name -} - -def ecr_pull(full_name) { - aws_account_id = sh( - returnStdout: true, - script: 'aws sts get-caller-identity | grep Account | cut -f4 -d\\"', - label: 'Get AWS ID' - ).trim() - - try { - withEnv([ - "AWS_ACCOUNT_ID=${aws_account_id}", - 'AWS_DEFAULT_REGION=us-west-2', - "AWS_ECR_REPO=${aws_account_id}.dkr.ecr.us-west-2.amazonaws.com"]) { - sh( - script: ''' - set -eux - aws ecr get-login-password --region $AWS_DEFAULT_REGION | docker login --username AWS --password-stdin $AWS_ECR_REPO - ''', - label: 'Log in to ECR' - ) - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - retry 5 docker pull ${full_name} - """, - label: 'Pull image from ECR' - ) - } - } finally { - withEnv([ - "AWS_ACCOUNT_ID=${aws_account_id}", - 'AWS_DEFAULT_REGION=us-west-2', - "AWS_ECR_REPO=${aws_account_id}.dkr.ecr.us-west-2.amazonaws.com"]) { - sh( - script: 'docker logout $AWS_ECR_REPO', - label: 'Clean up login credentials' - ) - } - } -} - -def build_image(image_name) { - hash = sh( - returnStdout: true, - script: 'git log -1 --format=\'%h\'' - ).trim() - def full_name = "${image_name}:${env.BRANCH_NAME}-${hash}-${env.BUILD_NUMBER}" - sh( - script: "${docker_build} ${image_name} --spec ${full_name}", - label: 'Build docker image' - ) - return ecr_push(full_name) -} - - -def build_docker_images() { - stage('Docker Image Build') { - parallel( - 'ci_arm': { - node('ARM') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_arm = build_image('ci_arm') - built_ci_arm = build_image('ci_arm'); - } - } - }, - 'ci_cortexm': { - node('CPU') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_cortexm = build_image('ci_cortexm') - built_ci_cortexm = build_image('ci_cortexm'); - } - } - }, - 'ci_cpu': { - node('CPU') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_cpu = build_image('ci_cpu') - built_ci_cpu = build_image('ci_cpu'); - } - } - }, - 'ci_gpu': { - node('CPU') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_gpu = build_image('ci_gpu') - built_ci_gpu = build_image('ci_gpu'); - } - } - }, - 'ci_hexagon': { - node('CPU') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_hexagon = build_image('ci_hexagon') - built_ci_hexagon = build_image('ci_hexagon'); - } - } - }, - 'ci_i386': { - node('CPU') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_i386 = build_image('ci_i386') - built_ci_i386 = build_image('ci_i386'); - } - } - }, - 'ci_lint': { - node('CPU') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_lint = build_image('ci_lint') - built_ci_lint = build_image('ci_lint'); - } - } - }, - 'ci_minimal': { - node('CPU') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_minimal = build_image('ci_minimal') - built_ci_minimal = build_image('ci_minimal'); - } - } - }, - 'ci_riscv': { - node('CPU') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_riscv = build_image('ci_riscv') - built_ci_riscv = build_image('ci_riscv'); - } - } - }, - 'ci_wasm': { - node('CPU') { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - // We're purposefully not setting the built image here since they - // are not yet being uploaded to tlcpack - // ci_wasm = build_image('ci_wasm') - built_ci_wasm = build_image('ci_wasm'); - } - } - }, - ) - } -} -def lint() { - stage('Lint') { - parallel( - 'Lint 1 of 2': { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/lint") { - init_git() - docker_init(ci_lint) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'TVM_NUM_SHARDS=2', - 'TEST_STEP_NAME=Lint', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh ( - script: "${docker_run} ${ci_lint} ./tests/scripts/task_lint.sh", - label: 'Run lint', - ) - }) - } - } - } - }, - 'Lint 2 of 2': { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/lint") { - init_git() - docker_init(ci_lint) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'TVM_NUM_SHARDS=2', - 'TEST_STEP_NAME=Lint', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh ( - script: "${docker_run} ${ci_lint} ./tests/scripts/task_lint.sh", - label: 'Run lint', - ) - }) - } - } - } - }, - ) - } -} -def ci_setup(image) { - sh ( - script: "${docker_run} ${image} ./tests/scripts/task_clear_pytest.sh", - label: 'Clean up old workspace', - ) -} - -def python_unittest(image) { - sh ( - script: "${docker_run} ${image} ./tests/scripts/task_python_unittest.sh", - label: 'Run Python unit tests', - ) -} - -def fsim_test(image) { - sh ( - script: "${docker_run} ${image} ./tests/scripts/task_python_vta_fsim.sh", - label: 'Run VTA tests in FSIM', - ) -} - -def make_standalone_crt(image, build_dir) { - sh ( - script: """ - set -eux - ${docker_run} ${image} python3 ./tests/scripts/task_build.py \ - --sccache-bucket tvm-sccache-prod \ - --cmake-target standalone_crt \ - --build-dir build - ${docker_run} ${image} python3 ./tests/scripts/task_build.py \ - --sccache-bucket tvm-sccache-prod \ - --cmake-target crttest \ - --build-dir build - """, - label: 'Make standalone CRT', - ) -} - -def make_cpp_tests(image, build_dir) { - sh ( - script: """ - set -eux - ${docker_run} ${image} python3 ./tests/scripts/task_build.py \ - --sccache-bucket tvm-sccache-prod \ - --cmake-target cpptest \ - --build-dir ${build_dir} - """, - label: 'Make C++ tests', - ) -} - -def cmake_build(image, path, make_flag) { - sh ( - script: "${docker_run} --env CI_NUM_EXECUTORS ${image} ./tests/scripts/task_build.py --sccache-bucket tvm-sccache-prod", - label: 'Run cmake build', - ) -} - -def build() { -stage('Build') { - environment { - SKIP_SLOW_TESTS = "${skip_slow_tests}" - } - parallel( - - 'BUILD: GPU': { - if (!skip_ci) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/build-gpu") { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - sh "${docker_run} --no-gpu ${ci_gpu} ./tests/scripts/task_config_build_gpu.sh build" - cmake_build("${ci_gpu} --no-gpu", 'build', '-j2') - make_standalone_crt("${ci_gpu} --no-gpu", 'build') - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu --items build/libtvm.so build/libvta_fsim.so build/libtvm_runtime.so build/config.cmake build/libtvm_allvisible.so build/microtvm_template_projects build/crttest build/standalone_crt build/build.ninja", - label: 'Upload artifacts to S3', - ) - - - // compiler test - sh "rm -rf build" - sh "${docker_run} --no-gpu ${ci_gpu} ./tests/scripts/task_config_build_gpu_other.sh build" - cmake_build("${ci_gpu} --no-gpu", 'build', '-j2') - make_standalone_crt("${ci_gpu} --no-gpu", 'build') - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu2 --items build/libtvm.so build/libtvm_runtime.so build/config.cmake build/crttest build/standalone_crt build/build.ninja", - label: 'Upload artifacts to S3', - ) - } - } - } - } else { - Utils.markStageSkippedForConditional('BUILD: GPU') - } - }, - - 'BUILD: CPU': { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/build-cpu") { - init_git() - docker_init(ci_cpu) - timeout(time: max_time, unit: 'MINUTES') { - sh ( - script: "${docker_run} ${ci_cpu} ./tests/scripts/task_config_build_cpu.sh build", - label: 'Create CPU cmake config', - ) - cmake_build(ci_cpu, 'build', '-j2') - make_standalone_crt(ci_cpu, 'build') - make_cpp_tests(ci_cpu, 'build') - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/cpu --items build/libvta_tsim.so build/libtvm.so build/libvta_fsim.so build/libtvm_runtime.so build/config.cmake build/libtvm_allvisible.so build/crttest build/cpptest build/build.ninja build/CMakeFiles/rules.ninja build/standalone_crt build/build.ninja", - label: 'Upload artifacts to S3', - ) - - ci_setup(ci_cpu) - // sh "${docker_run} ${ci_cpu} ./tests/scripts/task_golang.sh" - // TODO(@jroesch): need to resolve CI issue will turn back on in follow up patch - sh (script: "${docker_run} ${ci_cpu} ./tests/scripts/task_rust.sh", label: 'Rust build and test') - } - } - } - } else { - Utils.markStageSkippedForConditional('BUILD: CPU') - } - }, - - 'BUILD: CPU MINIMAL': { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/build-cpu-minimal") { - init_git() - docker_init(ci_minimal) - timeout(time: max_time, unit: 'MINUTES') { - sh ( - script: "${docker_run} ${ci_minimal} ./tests/scripts/task_config_build_minimal.sh build", - label: 'Create CPU minimal cmake config', - ) - cmake_build(ci_minimal, 'build', '-j2') - make_standalone_crt(ci_minimal, 'build') - make_cpp_tests(ci_minimal, 'build') - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/cpu-minimal --items build/libtvm.so build/libtvm_runtime.so build/config.cmake build/libtvm_allvisible.so build/crttest build/cpptest build/build.ninja build/CMakeFiles/rules.ninja build/standalone_crt build/build.ninja", - label: 'Upload artifacts to S3', - ) - } - } - } - } else { - Utils.markStageSkippedForConditional('BUILD: CPU MINIMAL') - } - }, - - 'BUILD: WASM': { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/build-wasm") { - init_git() - docker_init(ci_wasm) - timeout(time: max_time, unit: 'MINUTES') { - sh ( - script: "${docker_run} ${ci_wasm} ./tests/scripts/task_config_build_wasm.sh build", - label: 'Create WASM cmake config', - ) - cmake_build(ci_wasm, 'build', '-j2') - make_standalone_crt(ci_wasm, 'build') - make_cpp_tests(ci_wasm, 'build') - cpp_unittest(ci_wasm) - ci_setup(ci_wasm) - sh ( - script: "${docker_run} ${ci_wasm} ./tests/scripts/task_web_wasm.sh", - label: 'Run WASM lint and tests', - ) - } - } - } - } else { - Utils.markStageSkippedForConditional('BUILD: WASM') - } - }, - - 'BUILD: i386': { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/build-i386") { - init_git() - docker_init(ci_i386) - timeout(time: max_time, unit: 'MINUTES') { - sh ( - script: "${docker_run} ${ci_i386} ./tests/scripts/task_config_build_i386.sh build", - label: 'Create i386 cmake config', - ) - cmake_build(ci_i386, 'build', '-j2') - make_standalone_crt(ci_i386, 'build') - make_cpp_tests(ci_i386, 'build') - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/i386 --items build/libvta_tsim.so build/libtvm.so build/libvta_fsim.so build/libtvm_runtime.so build/config.cmake build/standalone_crt build/build.ninja build/crttest build/cpptest build/build.ninja build/CMakeFiles/rules.ninja", - label: 'Upload artifacts to S3', - ) - } - } - } - } else { - Utils.markStageSkippedForConditional('BUILD: i386') - } - }, - - 'BUILD: arm': { - if (!skip_ci && is_docs_only_build != 1) { - node('ARM-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/build-arm") { - init_git() - docker_init(ci_arm) - timeout(time: max_time, unit: 'MINUTES') { - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_config_build_arm.sh build", - label: 'Create ARM cmake config', - ) - cmake_build(ci_arm, 'build', '-j4') - make_standalone_crt(ci_arm, 'build') - make_cpp_tests(ci_arm, 'build') - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/arm --items build/libtvm.so build/libvta_fsim.so build/libtvm_runtime.so build/config.cmake build/cpptest build/build.ninja build/CMakeFiles/rules.ninja build/crttest build/standalone_crt build/build.ninja", - label: 'Upload artifacts to S3', - ) - } - } - } - } else { - Utils.markStageSkippedForConditional('BUILD: arm') - } - }, - - 'BUILD: Cortex-M': { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/build-cortexm") { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_config_build_cortexm.sh build", - label: 'Create Cortex-M cmake config', - ) - cmake_build(ci_cortexm, 'build', '-j2') - make_standalone_crt(ci_cortexm, 'build') - make_cpp_tests(ci_cortexm, 'build') - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm --items build/libtvm.so build/libtvm_runtime.so build/config.cmake build/libtvm_allvisible.so build/crttest build/standalone_crt build/build.ninja build/cpptest build/build.ninja build/CMakeFiles/rules.ninja build/microtvm_template_projects", - label: 'Upload artifacts to S3', - ) - } - } - } - } else { - Utils.markStageSkippedForConditional('BUILD: Cortex-M') - } - }, - - 'BUILD: Hexagon': { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/build-hexagon") { - init_git() - docker_init(ci_hexagon) - timeout(time: max_time, unit: 'MINUTES') { - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_config_build_hexagon.sh build", - label: 'Create Hexagon cmake config', - ) - cmake_build(ci_hexagon, 'build', '-j2') - make_cpp_tests(ci_hexagon, 'build') - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_build_hexagon_api.sh", - label: 'Build Hexagon API', - ) - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/hexagon --items build/libtvm.so build/libtvm_runtime.so build/config.cmake build/cpptest build/build.ninja build/CMakeFiles/rules.ninja build/hexagon_api_output", - label: 'Upload artifacts to S3', - ) - } - } - } - } else { - Utils.markStageSkippedForConditional('BUILD: Hexagon') - } - }, - - 'BUILD: RISC-V': { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/build-riscv") { - init_git() - docker_init(ci_riscv) - timeout(time: max_time, unit: 'MINUTES') { - sh ( - script: "${docker_run} ${ci_riscv} ./tests/scripts/task_config_build_riscv.sh build", - label: 'Create RISC-V cmake config', - ) - cmake_build(ci_riscv, 'build', '-j2') - make_standalone_crt(ci_riscv, 'build') - make_cpp_tests(ci_riscv, 'build') - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/riscv --items build/libtvm.so build/libtvm_runtime.so build/config.cmake build/libtvm_allvisible.so build/standalone_crt build/build.ninja build/crttest build/cpptest build/build.ninja build/CMakeFiles/rules.ninja build/microtvm_template_projects", - label: 'Upload artifacts to S3', - ) - } - } - } - } else { - Utils.markStageSkippedForConditional('BUILD: RISC-V') - } - }, - - ) -} -} - -def cpp_unittest(image) { - sh ( - script: "${docker_run} --env CI_NUM_EXECUTORS ${image} ./tests/scripts/task_cpp_unittest.sh", - label: 'Run C++ tests', - ) -} - -def micro_cpp_unittest(image) { - sh ( - script: "${docker_run} --env CI_NUM_EXECUTORS ${image} ./tests/scripts/task_microtvm_cpp_tests.sh build", - label: 'Run microTVM C++ tests', - ) -} - -// We have to do this whacky split of the code from where it's used since the -// JVM limits method length to 64k and we easily exceed that with all this -// autogenerated code. This makes it so each test step is in its own method so -// that each individual method isn't too big. - -def shard_run_unittest_GPU_1_of_3() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=unittest: GPU', - 'TVM_NUM_SHARDS=3', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu2", - label: 'Download artifacts from S3', - ) - - sh "${docker_run} --no-gpu ${ci_gpu} ./tests/scripts/task_config_build_gpu_other.sh build" - // These require a GPU to finish the build (i.e. CUDA needs to be load-able) - make_standalone_crt(ci_gpu, 'build') - // make_cpp_tests(ci_gpu, 'build') - // cpp_unittest(ci_gpu) - - sh "rm -rf build" - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh "${docker_run} --no-gpu ${ci_gpu} ./tests/scripts/task_config_build_gpu.sh build" - make_standalone_crt(ci_gpu, 'build') - make_cpp_tests(ci_gpu, 'build') - cpp_unittest(ci_gpu) - micro_cpp_unittest(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_unittest_gpuonly.sh", - label: 'Run Python GPU unit tests', - ) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_integration_gpuonly.sh", - label: 'Run Python GPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/unittest_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('unittest: GPU 1 of 3') - } -} - -def shard_run_unittest_GPU_2_of_3() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=unittest: GPU', - 'TVM_NUM_SHARDS=3', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_java_unittest.sh", - label: 'Run Java unit tests', - ) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_unittest_gpuonly.sh", - label: 'Run Python GPU unit tests', - ) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_integration_gpuonly.sh", - label: 'Run Python GPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/unittest_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('unittest: GPU 2 of 3') - } -} - -def shard_run_unittest_GPU_3_of_3() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=unittest: GPU', - 'TVM_NUM_SHARDS=3', - 'TVM_SHARD_INDEX=2', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_unittest_gpuonly.sh", - label: 'Run Python GPU unit tests', - ) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_integration_gpuonly.sh", - label: 'Run Python GPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/unittest_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('unittest: GPU 3 of 3') - } -} - - -def shard_run_integration_CPU_1_of_4() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/integration-python-cpu") { - try { - init_git() - docker_init(ci_cpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cpu', - 'TEST_STEP_NAME=integration: CPU', - 'TVM_NUM_SHARDS=4', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cpu) - sh ( - script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_integration.sh", - label: 'Run CPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/integration_CPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('integration: CPU 1 of 4') - } -} - -def shard_run_integration_CPU_2_of_4() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/integration-python-cpu") { - try { - init_git() - docker_init(ci_cpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cpu', - 'TEST_STEP_NAME=integration: CPU', - 'TVM_NUM_SHARDS=4', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cpu) - sh ( - script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_integration.sh", - label: 'Run CPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/integration_CPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('integration: CPU 2 of 4') - } -} - -def shard_run_integration_CPU_3_of_4() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/integration-python-cpu") { - try { - init_git() - docker_init(ci_cpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cpu', - 'TEST_STEP_NAME=integration: CPU', - 'TVM_NUM_SHARDS=4', - 'TVM_SHARD_INDEX=2', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cpu) - sh ( - script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_integration.sh", - label: 'Run CPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/integration_CPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('integration: CPU 3 of 4') - } -} - -def shard_run_integration_CPU_4_of_4() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/integration-python-cpu") { - try { - init_git() - docker_init(ci_cpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cpu', - 'TEST_STEP_NAME=integration: CPU', - 'TVM_NUM_SHARDS=4', - 'TVM_SHARD_INDEX=3', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cpu) - sh ( - script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_integration.sh", - label: 'Run CPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/integration_CPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('integration: CPU 4 of 4') - } -} - - -def shard_run_python_i386_1_of_3() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/integration-python-i386") { - try { - init_git() - docker_init(ci_i386) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=i386', - 'TEST_STEP_NAME=python: i386', - 'TVM_NUM_SHARDS=3', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/i386", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_i386) - cpp_unittest(ci_i386) - micro_cpp_unittest(ci_i386) - python_unittest(ci_i386) - sh ( - script: "${docker_run} ${ci_i386} ./tests/scripts/task_python_integration_i386only.sh", - label: 'Run i386 integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/python_i386 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('python: i386 1 of 3') - } -} - -def shard_run_python_i386_2_of_3() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/integration-python-i386") { - try { - init_git() - docker_init(ci_i386) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=i386', - 'TEST_STEP_NAME=python: i386', - 'TVM_NUM_SHARDS=3', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/i386", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_i386) - python_unittest(ci_i386) - sh ( - script: "${docker_run} ${ci_i386} ./tests/scripts/task_python_integration_i386only.sh", - label: 'Run i386 integration tests', - ) - fsim_test(ci_i386) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/python_i386 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('python: i386 2 of 3') - } -} - -def shard_run_python_i386_3_of_3() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/integration-python-i386") { - try { - init_git() - docker_init(ci_i386) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=i386', - 'TEST_STEP_NAME=python: i386', - 'TVM_NUM_SHARDS=3', - 'TVM_SHARD_INDEX=2', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/i386", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_i386) - python_unittest(ci_i386) - sh ( - script: "${docker_run} ${ci_i386} ./tests/scripts/task_python_integration_i386only.sh", - label: 'Run i386 integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/python_i386 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('python: i386 3 of 3') - } -} - - -def shard_run_test_Hexagon_1_of_8() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-hexagon") { - try { - init_git() - docker_init(ci_hexagon) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=hexagon', - 'TEST_STEP_NAME=test: Hexagon', - 'TVM_NUM_SHARDS=8', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/hexagon", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_hexagon) - cpp_unittest(ci_hexagon) - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_python_hexagon.sh", - label: 'Run Hexagon tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Hexagon --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Hexagon 1 of 8') - } -} - -def shard_run_test_Hexagon_2_of_8() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-hexagon") { - try { - init_git() - docker_init(ci_hexagon) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=hexagon', - 'TEST_STEP_NAME=test: Hexagon', - 'TVM_NUM_SHARDS=8', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/hexagon", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_hexagon) - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_python_hexagon.sh", - label: 'Run Hexagon tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Hexagon --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Hexagon 2 of 8') - } -} - -def shard_run_test_Hexagon_3_of_8() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-hexagon") { - try { - init_git() - docker_init(ci_hexagon) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=hexagon', - 'TEST_STEP_NAME=test: Hexagon', - 'TVM_NUM_SHARDS=8', - 'TVM_SHARD_INDEX=2', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/hexagon", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_hexagon) - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_python_hexagon.sh", - label: 'Run Hexagon tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Hexagon --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Hexagon 3 of 8') - } -} - -def shard_run_test_Hexagon_4_of_8() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-hexagon") { - try { - init_git() - docker_init(ci_hexagon) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=hexagon', - 'TEST_STEP_NAME=test: Hexagon', - 'TVM_NUM_SHARDS=8', - 'TVM_SHARD_INDEX=3', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/hexagon", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_hexagon) - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_python_hexagon.sh", - label: 'Run Hexagon tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Hexagon --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Hexagon 4 of 8') - } -} - -def shard_run_test_Hexagon_5_of_8() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-hexagon") { - try { - init_git() - docker_init(ci_hexagon) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=hexagon', - 'TEST_STEP_NAME=test: Hexagon', - 'TVM_NUM_SHARDS=8', - 'TVM_SHARD_INDEX=4', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/hexagon", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_hexagon) - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_python_hexagon.sh", - label: 'Run Hexagon tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Hexagon --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Hexagon 5 of 8') - } -} - -def shard_run_test_Hexagon_6_of_8() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-hexagon") { - try { - init_git() - docker_init(ci_hexagon) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=hexagon', - 'TEST_STEP_NAME=test: Hexagon', - 'TVM_NUM_SHARDS=8', - 'TVM_SHARD_INDEX=5', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/hexagon", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_hexagon) - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_python_hexagon.sh", - label: 'Run Hexagon tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Hexagon --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Hexagon 6 of 8') - } -} - -def shard_run_test_Hexagon_7_of_8() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-hexagon") { - try { - init_git() - docker_init(ci_hexagon) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=hexagon', - 'TEST_STEP_NAME=test: Hexagon', - 'TVM_NUM_SHARDS=8', - 'TVM_SHARD_INDEX=6', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/hexagon", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_hexagon) - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_python_hexagon.sh", - label: 'Run Hexagon tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Hexagon --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Hexagon 7 of 8') - } -} - -def shard_run_test_Hexagon_8_of_8() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-hexagon") { - try { - init_git() - docker_init(ci_hexagon) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=hexagon', - 'TEST_STEP_NAME=test: Hexagon', - 'TVM_NUM_SHARDS=8', - 'TVM_SHARD_INDEX=7', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/hexagon", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_hexagon) - sh ( - script: "${docker_run} ${ci_hexagon} ./tests/scripts/task_python_hexagon.sh", - label: 'Run Hexagon tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Hexagon --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Hexagon 8 of 8') - } -} - - -def shard_run_integration_aarch64_1_of_4() { - if (!skip_ci && is_docs_only_build != 1) { - node('ARM-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-arm") { - try { - init_git() - docker_init(ci_arm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=arm', - 'TEST_STEP_NAME=integration: aarch64', - 'TVM_NUM_SHARDS=4', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/arm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_arm) - python_unittest(ci_arm) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_integration.sh", - label: 'Run CPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/integration_aarch64 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('integration: aarch64 1 of 4') - } -} - -def shard_run_integration_aarch64_2_of_4() { - if (!skip_ci && is_docs_only_build != 1) { - node('ARM-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-arm") { - try { - init_git() - docker_init(ci_arm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=arm', - 'TEST_STEP_NAME=integration: aarch64', - 'TVM_NUM_SHARDS=4', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/arm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_arm) - python_unittest(ci_arm) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_integration.sh", - label: 'Run CPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/integration_aarch64 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('integration: aarch64 2 of 4') - } -} - -def shard_run_integration_aarch64_3_of_4() { - if (!skip_ci && is_docs_only_build != 1) { - node('ARM-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-arm") { - try { - init_git() - docker_init(ci_arm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=arm', - 'TEST_STEP_NAME=integration: aarch64', - 'TVM_NUM_SHARDS=4', - 'TVM_SHARD_INDEX=2', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/arm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_arm) - python_unittest(ci_arm) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_integration.sh", - label: 'Run CPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/integration_aarch64 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('integration: aarch64 3 of 4') - } -} - -def shard_run_integration_aarch64_4_of_4() { - if (!skip_ci && is_docs_only_build != 1) { - node('ARM-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-arm") { - try { - init_git() - docker_init(ci_arm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=arm', - 'TEST_STEP_NAME=integration: aarch64', - 'TVM_NUM_SHARDS=4', - 'TVM_SHARD_INDEX=3', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/arm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_arm) - python_unittest(ci_arm) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_integration.sh", - label: 'Run CPU integration tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/integration_aarch64 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('integration: aarch64 4 of 4') - } -} - - -def shard_run_topi_GPU_1_of_3() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/topi-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=topi: GPU', - 'TVM_NUM_SHARDS=3', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_topi.sh", - label: 'Run TOPI tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/topi_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('topi: GPU 1 of 3') - } -} - -def shard_run_topi_GPU_2_of_3() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/topi-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=topi: GPU', - 'TVM_NUM_SHARDS=3', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_topi.sh", - label: 'Run TOPI tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/topi_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('topi: GPU 2 of 3') - } -} - -def shard_run_topi_GPU_3_of_3() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/topi-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=topi: GPU', - 'TVM_NUM_SHARDS=3', - 'TVM_SHARD_INDEX=2', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_topi.sh", - label: 'Run TOPI tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/topi_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('topi: GPU 3 of 3') - } -} - - -def shard_run_frontend_GPU_1_of_6() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=frontend: GPU', - 'TVM_NUM_SHARDS=6', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_frontend.sh", - label: 'Run Python frontend tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/frontend_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('frontend: GPU 1 of 6') - } -} - -def shard_run_frontend_GPU_2_of_6() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=frontend: GPU', - 'TVM_NUM_SHARDS=6', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_frontend.sh", - label: 'Run Python frontend tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/frontend_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('frontend: GPU 2 of 6') - } -} - -def shard_run_frontend_GPU_3_of_6() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=frontend: GPU', - 'TVM_NUM_SHARDS=6', - 'TVM_SHARD_INDEX=2', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_frontend.sh", - label: 'Run Python frontend tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/frontend_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('frontend: GPU 3 of 6') - } -} - -def shard_run_frontend_GPU_4_of_6() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=frontend: GPU', - 'TVM_NUM_SHARDS=6', - 'TVM_SHARD_INDEX=3', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_frontend.sh", - label: 'Run Python frontend tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/frontend_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('frontend: GPU 4 of 6') - } -} - -def shard_run_frontend_GPU_5_of_6() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=frontend: GPU', - 'TVM_NUM_SHARDS=6', - 'TVM_SHARD_INDEX=4', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_frontend.sh", - label: 'Run Python frontend tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/frontend_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('frontend: GPU 5 of 6') - } -} - -def shard_run_frontend_GPU_6_of_6() { - if (!skip_ci && is_docs_only_build != 1) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-gpu") { - try { - init_git() - docker_init(ci_gpu) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=gpu', - 'TEST_STEP_NAME=frontend: GPU', - 'TVM_NUM_SHARDS=6', - 'TVM_SHARD_INDEX=5', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_frontend.sh", - label: 'Run Python frontend tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/frontend_GPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('frontend: GPU 6 of 6') - } -} - - -def shard_run_topi_aarch64_1_of_2() { - if (!skip_ci && is_docs_only_build != 1) { - node('ARM-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-arm") { - try { - init_git() - docker_init(ci_arm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=arm', - 'TEST_STEP_NAME=topi: aarch64', - 'TVM_NUM_SHARDS=2', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/arm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_arm) - cpp_unittest(ci_arm) - micro_cpp_unittest(ci_arm) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_arm_compute_library.sh", - label: 'Run test_arm_compute_lib test', - ) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_topi.sh", - label: 'Run TOPI tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/topi_aarch64 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('topi: aarch64 1 of 2') - } -} - -def shard_run_topi_aarch64_2_of_2() { - if (!skip_ci && is_docs_only_build != 1) { - node('ARM-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-arm") { - try { - init_git() - docker_init(ci_arm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=arm', - 'TEST_STEP_NAME=topi: aarch64', - 'TVM_NUM_SHARDS=2', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/arm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_arm) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_arm_compute_library.sh", - label: 'Run test_arm_compute_lib test', - ) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_topi.sh", - label: 'Run TOPI tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/topi_aarch64 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('topi: aarch64 2 of 2') - } -} - - -def shard_run_frontend_aarch64_1_of_2() { - if (!skip_ci && is_docs_only_build != 1) { - node('ARM-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-arm") { - try { - init_git() - docker_init(ci_arm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=arm', - 'TEST_STEP_NAME=frontend: aarch64', - 'TVM_NUM_SHARDS=2', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/arm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_arm) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_frontend_cpu.sh", - label: 'Run Python frontend tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/frontend_aarch64 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('frontend: aarch64 1 of 2') - } -} - -def shard_run_frontend_aarch64_2_of_2() { - if (!skip_ci && is_docs_only_build != 1) { - node('ARM-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-arm") { - try { - init_git() - docker_init(ci_arm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=arm', - 'TEST_STEP_NAME=frontend: aarch64', - 'TVM_NUM_SHARDS=2', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/arm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_arm) - sh ( - script: "${docker_run} ${ci_arm} ./tests/scripts/task_python_frontend_cpu.sh", - label: 'Run Python frontend tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/frontend_aarch64 --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('frontend: aarch64 2 of 2') - } -} - - -def shard_run_test_Cortex_M_1_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - cpp_unittest(ci_cortexm) - micro_cpp_unittest(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_demo_microtvm.sh", - label: 'Run microTVM demos', - ) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 1 of 12') - } -} - -def shard_run_test_Cortex_M_2_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=1', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 2 of 12') - } -} - -def shard_run_test_Cortex_M_3_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=2', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 3 of 12') - } -} - -def shard_run_test_Cortex_M_4_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=3', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 4 of 12') - } -} - -def shard_run_test_Cortex_M_5_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=4', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 5 of 12') - } -} - -def shard_run_test_Cortex_M_6_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=5', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 6 of 12') - } -} - -def shard_run_test_Cortex_M_7_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=6', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 7 of 12') - } -} - -def shard_run_test_Cortex_M_8_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=7', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 8 of 12') - } -} - -def shard_run_test_Cortex_M_9_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=8', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 9 of 12') - } -} - -def shard_run_test_Cortex_M_10_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=9', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 10 of 12') - } -} - -def shard_run_test_Cortex_M_11_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=10', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 11 of 12') - } -} - -def shard_run_test_Cortex_M_12_of_12() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-cortexm") { - try { - init_git() - docker_init(ci_cortexm) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=cortexm', - 'TEST_STEP_NAME=test: Cortex-M', - 'TVM_NUM_SHARDS=12', - 'TVM_SHARD_INDEX=11', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cortexm", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cortexm) - sh ( - script: "${docker_run} ${ci_cortexm} ./tests/scripts/task_python_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_Cortex_M --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: Cortex-M 12 of 12') - } -} - - -def shard_run_test_RISC_V_1_of_1() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/test-riscv") { - try { - init_git() - docker_init(ci_riscv) - timeout(time: max_time, unit: 'MINUTES') { - withEnv([ - 'PLATFORM=riscv', - 'TEST_STEP_NAME=test: RISC-V', - 'TVM_NUM_SHARDS=1', - 'TVM_SHARD_INDEX=0', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/riscv", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_riscv) - cpp_unittest(ci_cortexm) - micro_cpp_unittest(ci_cortexm) - sh ( - script: "${docker_run} ${ci_riscv} ./tests/scripts/task_riscv_microtvm.sh", - label: 'Run microTVM tests', - ) - }) - } - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/test_RISC_V --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } else { - Utils.markStageSkippedForConditional('test: RISC-V 1 of 1') - } -} - - -def run_unittest_minimal() { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-cpu-minimal") { - timeout(time: max_time, unit: 'MINUTES') { - try { - init_git() - docker_init(ci_minimal) - withEnv(['PLATFORM=minimal'], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cpu-minimal", - label: 'Download artifacts from S3', - ) - - cpp_unittest(ci_minimal) - micro_cpp_unittest(ci_minimal) - python_unittest(ci_minimal) - }) - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/unittest_CPU_MINIMAL --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } - } else { - Utils.markStageSkippedForConditional('unittest: CPU MINIMAL') - } -} - -def test() { -stage('Test') { - environment { - SKIP_SLOW_TESTS = "${skip_slow_tests}" - } - parallel( - 'unittest: GPU 1 of 3': { - shard_run_unittest_GPU_1_of_3() - }, - 'unittest: GPU 2 of 3': { - shard_run_unittest_GPU_2_of_3() - }, - 'unittest: GPU 3 of 3': { - shard_run_unittest_GPU_3_of_3() - }, - 'integration: CPU 1 of 4': { - shard_run_integration_CPU_1_of_4() - }, - 'integration: CPU 2 of 4': { - shard_run_integration_CPU_2_of_4() - }, - 'integration: CPU 3 of 4': { - shard_run_integration_CPU_3_of_4() - }, - 'integration: CPU 4 of 4': { - shard_run_integration_CPU_4_of_4() - }, - 'python: i386 1 of 3': { - shard_run_python_i386_1_of_3() - }, - 'python: i386 2 of 3': { - shard_run_python_i386_2_of_3() - }, - 'python: i386 3 of 3': { - shard_run_python_i386_3_of_3() - }, - 'test: Hexagon 1 of 8': { - shard_run_test_Hexagon_1_of_8() - }, - 'test: Hexagon 2 of 8': { - shard_run_test_Hexagon_2_of_8() - }, - 'test: Hexagon 3 of 8': { - shard_run_test_Hexagon_3_of_8() - }, - 'test: Hexagon 4 of 8': { - shard_run_test_Hexagon_4_of_8() - }, - 'test: Hexagon 5 of 8': { - shard_run_test_Hexagon_5_of_8() - }, - 'test: Hexagon 6 of 8': { - shard_run_test_Hexagon_6_of_8() - }, - 'test: Hexagon 7 of 8': { - shard_run_test_Hexagon_7_of_8() - }, - 'test: Hexagon 8 of 8': { - shard_run_test_Hexagon_8_of_8() - }, - 'integration: aarch64 1 of 4': { - shard_run_integration_aarch64_1_of_4() - }, - 'integration: aarch64 2 of 4': { - shard_run_integration_aarch64_2_of_4() - }, - 'integration: aarch64 3 of 4': { - shard_run_integration_aarch64_3_of_4() - }, - 'integration: aarch64 4 of 4': { - shard_run_integration_aarch64_4_of_4() - }, - 'topi: GPU 1 of 3': { - shard_run_topi_GPU_1_of_3() - }, - 'topi: GPU 2 of 3': { - shard_run_topi_GPU_2_of_3() - }, - 'topi: GPU 3 of 3': { - shard_run_topi_GPU_3_of_3() - }, - 'frontend: GPU 1 of 6': { - shard_run_frontend_GPU_1_of_6() - }, - 'frontend: GPU 2 of 6': { - shard_run_frontend_GPU_2_of_6() - }, - 'frontend: GPU 3 of 6': { - shard_run_frontend_GPU_3_of_6() - }, - 'frontend: GPU 4 of 6': { - shard_run_frontend_GPU_4_of_6() - }, - 'frontend: GPU 5 of 6': { - shard_run_frontend_GPU_5_of_6() - }, - 'frontend: GPU 6 of 6': { - shard_run_frontend_GPU_6_of_6() - }, - 'topi: aarch64 1 of 2': { - shard_run_topi_aarch64_1_of_2() - }, - 'topi: aarch64 2 of 2': { - shard_run_topi_aarch64_2_of_2() - }, - 'frontend: aarch64 1 of 2': { - shard_run_frontend_aarch64_1_of_2() - }, - 'frontend: aarch64 2 of 2': { - shard_run_frontend_aarch64_2_of_2() - }, - 'test: Cortex-M 1 of 12': { - shard_run_test_Cortex_M_1_of_12() - }, - 'test: Cortex-M 2 of 12': { - shard_run_test_Cortex_M_2_of_12() - }, - 'test: Cortex-M 3 of 12': { - shard_run_test_Cortex_M_3_of_12() - }, - 'test: Cortex-M 4 of 12': { - shard_run_test_Cortex_M_4_of_12() - }, - 'test: Cortex-M 5 of 12': { - shard_run_test_Cortex_M_5_of_12() - }, - 'test: Cortex-M 6 of 12': { - shard_run_test_Cortex_M_6_of_12() - }, - 'test: Cortex-M 7 of 12': { - shard_run_test_Cortex_M_7_of_12() - }, - 'test: Cortex-M 8 of 12': { - shard_run_test_Cortex_M_8_of_12() - }, - 'test: Cortex-M 9 of 12': { - shard_run_test_Cortex_M_9_of_12() - }, - 'test: Cortex-M 10 of 12': { - shard_run_test_Cortex_M_10_of_12() - }, - 'test: Cortex-M 11 of 12': { - shard_run_test_Cortex_M_11_of_12() - }, - 'test: Cortex-M 12 of 12': { - shard_run_test_Cortex_M_12_of_12() - }, - 'test: RISC-V 1 of 1': { - shard_run_test_RISC_V_1_of_1() - }, - 'unittest: CPU MINIMAL': { - run_unittest_minimal() - }, - 'unittest: CPU': { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/ut-python-cpu") { - timeout(time: max_time, unit: 'MINUTES') { - try { - init_git() - docker_init(ci_cpu) - withEnv(['PLATFORM=cpu', - 'TEST_STEP_NAME=unittest: CPU', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cpu) - cpp_unittest(ci_cpu) - micro_cpp_unittest(ci_cpu) - python_unittest(ci_cpu) - fsim_test(ci_cpu) - sh ( - script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_vta_tsim.sh", - label: 'Run VTA tests in TSIM', - ) - }) - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/unittest_CPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } - } else { - Utils.markStageSkippedForConditional('unittest: CPU') - } - }, - 'frontend: CPU': { - if (!skip_ci && is_docs_only_build != 1) { - node('CPU-SMALL') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/frontend-python-cpu") { - timeout(time: max_time, unit: 'MINUTES') { - try { - init_git() - docker_init(ci_cpu) - withEnv(['PLATFORM=cpu', - 'TEST_STEP_NAME=frontend: CPU', - "SKIP_SLOW_TESTS=${skip_slow_tests}"], { - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/cpu", - label: 'Download artifacts from S3', - ) - - ci_setup(ci_cpu) - sh ( - script: "${docker_run} ${ci_cpu} ./tests/scripts/task_python_frontend_cpu.sh", - label: 'Run Python frontend tests', - ) - }) - } finally { - try { - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/pytest-results/frontend_CPU --items build/pytest-results", - label: 'Upload JUnits to S3', - ) - - junit 'build/pytest-results/*.xml' - } catch (Exception e) { - echo 'Exception during JUnit upload: ' + e.toString() - } - } - } - } - } - } else { - Utils.markStageSkippedForConditional('frontend: CPU') - } - }, - 'docs: GPU': { - if (!skip_ci) { - node('GPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/docs-python-gpu") { - init_git() - docker_init(ci_gpu) - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/gpu", - label: 'Download artifacts from S3', - ) - - timeout(time: 180, unit: 'MINUTES') { - ci_setup(ci_gpu) - sh ( - script: "${docker_run} ${ci_gpu} ./tests/scripts/task_python_docs.sh", - label: 'Build docs', - ) - } - sh( - script: "./${jenkins_scripts_root}/s3.py --action upload --bucket ${s3_bucket} --prefix ${s3_prefix}/docs --items docs.tgz", - label: 'Upload artifacts to S3', - ) - - sh( - script: "aws s3 cp --no-progress _docs s3://${s3_bucket}/${s3_prefix}/docs --recursive", - label: 'Upload docs to S3', - ) - } - } - } - }, - ) -} -} -/* -stage('Build packages') { - parallel 'conda CPU': { - node('CPU') { - sh "${docker_run} tlcpack/conda-cpu ./conda/build_cpu.sh - } - }, - 'conda cuda': { - node('CPU') { - sh "${docker_run} tlcpack/conda-cuda90 ./conda/build_cuda.sh - sh "${docker_run} tlcpack/conda-cuda100 ./conda/build_cuda.sh - } - } -// Here we could upload the packages to anaconda for releases -// and/or the main branch -} -*/ - - -def update_docker(ecr_image, hub_image) { - if (ecr_image == null) { - sh("image was not rebuilt, skipping") - return - } - if (!ecr_image.contains("amazonaws.com")) { - sh("echo \"Skipping '${ecr_image}' -> '${hub_image}' since it doesn\'t look like an ECR image\"") - return - } - docker_init(ecr_image) - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker tag \ - ${ecr_image} \ - ${hub_image} - retry 5 docker push ${hub_image} - """, - label: "Update ${hub_image} on Docker Hub", - ) -} - -def deploy_docs() { - // Note: This code must stay in the Jenkinsfile to ensure that it runs - // from a trusted context only - sh( - script: ''' - set -eux - rm -rf tvm-site - git clone -b $DOCS_DEPLOY_BRANCH --depth=1 https://github.com/apache/tvm-site - cd tvm-site - git status - git checkout -B $DOCS_DEPLOY_BRANCH - - git ls-tree HEAD docs/ --name-only | grep -vP '^docs/v\\d' | xargs rm -rf - mkdir -p docs - tar xf ../docs.tgz -C docs - COMMIT=$(cat docs/commit_hash) - git add . - git config user.name tvm-bot - git config user.email 95660001+tvm-bot@users.noreply.github.com - git commit -m"deploying docs (apache/tvm@$COMMIT)" - git status - ''', - label: 'Unpack docs and update tvm-site' - ) - - withCredentials([string( - credentialsId: 'docs-push-token', - variable: 'GITHUB_TOKEN', - )]) { - sh( - script: ''' - cd tvm-site - git remote add deploy https://$GITHUB_TOKEN:x-oauth-basic@github.com/apache/tvm-site.git - git push deploy $DOCS_DEPLOY_BRANCH || true - ''', - label: 'Upload docs to apache/tvm-site' - ) - } -} - - -def deploy() { - stage('Deploy') { - if (env.BRANCH_NAME == 'main') { - parallel( - 'Deploy Docs': { - if (env.DOCS_DEPLOY_ENABLED == 'yes') { - node('CPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/deploy-docs") { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - sh( - script: "./${jenkins_scripts_root}/s3.py --action download --bucket ${s3_bucket} --prefix ${s3_prefix}/docs --items docs.tgz", - label: 'Download docs folder from S3', - ) - deploy_docs() - } - } - } - } else { - Utils.markStageSkippedForConditional('Deploy Docs') - } - }, - 'Upload built Docker images': { - if (env.DEPLOY_DOCKER_IMAGES == 'yes' && rebuild_docker_images && upstream_revision != null) { - node('CPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/deploy-docker") { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - try { - withCredentials([string( - credentialsId: 'dockerhub-tlcpackstaging-key', - variable: 'DOCKERHUB_KEY', - )]) { - sh( - script: 'docker login -u tlcpackstaging -p ${DOCKERHUB_KEY}', - label: 'Log in to Docker Hub', - ) - } - def date_Ymd_HMS = sh( - script: 'python3 -c \'import datetime; print(datetime.datetime.now().strftime("%Y%m%d-%H%M%S"))\'', - label: 'Determine date', - returnStdout: true, - ).trim() - def tag = "${date_Ymd_HMS}-${upstream_revision.substring(0, 8)}" - update_docker(built_ci_arm, "tlcpackstaging/ci_arm:${tag}") - update_docker(built_ci_cortexm, "tlcpackstaging/ci_cortexm:${tag}") - update_docker(built_ci_cpu, "tlcpackstaging/ci_cpu:${tag}") - update_docker(built_ci_gpu, "tlcpackstaging/ci_gpu:${tag}") - update_docker(built_ci_hexagon, "tlcpackstaging/ci_hexagon:${tag}") - update_docker(built_ci_i386, "tlcpackstaging/ci_i386:${tag}") - update_docker(built_ci_lint, "tlcpackstaging/ci_lint:${tag}") - update_docker(built_ci_minimal, "tlcpackstaging/ci_minimal:${tag}") - update_docker(built_ci_riscv, "tlcpackstaging/ci_riscv:${tag}") - update_docker(built_ci_wasm, "tlcpackstaging/ci_wasm:${tag}") - } finally { - sh( - script: 'docker logout', - label: 'Clean up login credentials' - ) - } - } - } - } - } else { - Utils.markStageSkippedForConditional('Upload built Docker images') - } - }, - 'Tag tlcpackstaging to tlcpack': { - if (env.DOCS_DEPLOY_ENABLED == 'yes') { - node('CPU') { - ws("workspace/exec_${env.EXECUTOR_NUMBER}/tvm/tag-images") { - timeout(time: max_time, unit: 'MINUTES') { - init_git() - withCredentials([string( - credentialsId: 'dockerhub-tlcpack-key', - variable: 'TLCPACK_TOKEN', - )]) { - try { - sh( - script: 'echo $TLCPACK_TOKEN | docker login --username octomldriazati --password-stdin', - label: 'Log in to Docker Hub' - ) - if (ci_arm.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_arm.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_arm:${tag} - docker tag tlcpackstaging/ci_arm:${tag} tlcpack/ci-arm:${tag} - retry 5 docker push tlcpack/ci-arm:${tag} - """, - label: 'Tag tlcpackstaging/ci_arm image to tlcpack', - ) - } - if (ci_cortexm.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_cortexm.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_cortexm:${tag} - docker tag tlcpackstaging/ci_cortexm:${tag} tlcpack/ci-cortexm:${tag} - retry 5 docker push tlcpack/ci-cortexm:${tag} - """, - label: 'Tag tlcpackstaging/ci_cortexm image to tlcpack', - ) - } - if (ci_cpu.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_cpu.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_cpu:${tag} - docker tag tlcpackstaging/ci_cpu:${tag} tlcpack/ci-cpu:${tag} - retry 5 docker push tlcpack/ci-cpu:${tag} - """, - label: 'Tag tlcpackstaging/ci_cpu image to tlcpack', - ) - } - if (ci_gpu.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_gpu.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_gpu:${tag} - docker tag tlcpackstaging/ci_gpu:${tag} tlcpack/ci-gpu:${tag} - retry 5 docker push tlcpack/ci-gpu:${tag} - """, - label: 'Tag tlcpackstaging/ci_gpu image to tlcpack', - ) - } - if (ci_hexagon.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_hexagon.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_hexagon:${tag} - docker tag tlcpackstaging/ci_hexagon:${tag} tlcpack/ci-hexagon:${tag} - retry 5 docker push tlcpack/ci-hexagon:${tag} - """, - label: 'Tag tlcpackstaging/ci_hexagon image to tlcpack', - ) - } - if (ci_i386.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_i386.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_i386:${tag} - docker tag tlcpackstaging/ci_i386:${tag} tlcpack/ci-i386:${tag} - retry 5 docker push tlcpack/ci-i386:${tag} - """, - label: 'Tag tlcpackstaging/ci_i386 image to tlcpack', - ) - } - if (ci_lint.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_lint.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_lint:${tag} - docker tag tlcpackstaging/ci_lint:${tag} tlcpack/ci-lint:${tag} - retry 5 docker push tlcpack/ci-lint:${tag} - """, - label: 'Tag tlcpackstaging/ci_lint image to tlcpack', - ) - } - if (ci_minimal.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_minimal.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_minimal:${tag} - docker tag tlcpackstaging/ci_minimal:${tag} tlcpack/ci-minimal:${tag} - retry 5 docker push tlcpack/ci-minimal:${tag} - """, - label: 'Tag tlcpackstaging/ci_minimal image to tlcpack', - ) - } - if (ci_riscv.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_riscv.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_riscv:${tag} - docker tag tlcpackstaging/ci_riscv:${tag} tlcpack/ci-riscv:${tag} - retry 5 docker push tlcpack/ci-riscv:${tag} - """, - label: 'Tag tlcpackstaging/ci_riscv image to tlcpack', - ) - } - if (ci_wasm.contains("tlcpackstaging")) { - // Push image to tlcpack - def tag = ci_wasm.split(":")[1] - sh( - script: """ - set -eux - . ${jenkins_scripts_root}/retry.sh - docker pull tlcpackstaging/ci_wasm:${tag} - docker tag tlcpackstaging/ci_wasm:${tag} tlcpack/ci-wasm:${tag} - retry 5 docker push tlcpack/ci-wasm:${tag} - """, - label: 'Tag tlcpackstaging/ci_wasm image to tlcpack', - ) - } - } finally { - sh( - script: 'docker logout', - label: 'Clean up login credentials' - ) - } - } - } - } - } - } else { - Utils.markStageSkippedForConditional('Tag tlcpackstaging to tlcpack') - } - }, - ) - } - } -} - - -cancel_previous_build() - -prepare() - -if (rebuild_docker_images) { - build_docker_images() -} - -lint() - -build() - -test() - -deploy()