Skip to content
This repository was archived by the owner on Nov 17, 2023. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions ci/docker/Dockerfile.build.ubuntu
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
apt-get install -y \
## Utilities
curl \
zip \
unzip \
pandoc \
## Development tools
Expand Down
24 changes: 24 additions & 0 deletions ci/docker/runtime_functions.sh
Original file line number Diff line number Diff line change
Expand Up @@ -1212,6 +1212,30 @@ build_docs_beta() {
popd
}

push_docs() {
folder_name=$1
set -ex
pip3 install --user awscli
export PATH=~/.local/bin:$PATH
pushd docs/_build
tar -xzf full_website.tgz --strip-components 1
# check if folder_name already exists in versions
pushd versions
if [ -d "$folder_name" ]; then
echo "Folder $folder_name already exists in versions. Please double check the FOLDER_NAME variable in Jenkens pipeline"
exit 1
fi
mv master $folder_name
popd
zip -r9 versions.zip versions/.
# Upload versions folder
aws s3 cp versions.zip s3://mxnet-website-static-artifacts --acl public-read
# Backup versions folder with the latest version name
backup_file="versions_backup_upto_$folder_name.zip"
aws s3 cp s3://mxnet-website-static-artifacts/versions.zip s3://mxnet-website-static-artifacts/$backup_file --acl public-read
popd
}

create_repo() {
repo_folder=$1
mxnet_url=$2
Expand Down
46 changes: 46 additions & 0 deletions ci/jenkins/Jenkins_steps.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -1093,6 +1093,30 @@ def docs_prepare() {
}]
}

// This is for updateing the new version of website artifact
// Assumes you have run all of the docs generation functions
// Called from Jenkins_website_version_artifacts
def docs_full_website() {
return ['Build artifacts full_website.tgz': {
node(NODE_LINUX_CPU) {
ws('workspace/docs') {
timeout(time: max_time, unit: 'MINUTES') {
utils.init_git()

unstash 'jekyll-artifacts'
unstash 'python-artifacts'

utils.docker_run('ubuntu_cpu_jekyll', 'build_docs', false)

utils.pack_lib('full_website', 'docs/_build/full_website.tgz', false)

// archive so the publish pipeline can access the artifact
archiveArtifacts 'docs/_build/full_website.tgz'
}
}
}
}]
}

def docs_prepare_beta() {
return ['Prepare for publication to the staging website': {
Expand Down Expand Up @@ -1168,6 +1192,28 @@ def docs_publish_beta() {
}]
}

// This is for uploading website artifacts to S3 bucket
// Assumes you have run docs_full_website function
def docs_upload_s3() {
return ['Upload artifacts to s3 bucket': {
node(NODE_LINUX_CPU) {
ws('workspace/docs') {
timeout(time: max_time, unit: 'MINUTES') {
if(env.FOLDER_NAME) {
utils.unpack_and_init('full_website', 'docs/_build/full_website.tgz')

utils.docker_run('ubuntu_cpu', "push_docs ${env.FOLDER_NAME}", false)

archiveArtifacts 'docs/_build/versions.zip'
} else {
sh 'echo Can not find website version for release. Please specify env var FOLDER_NAME in Jenkins pipeline'
sh 'exit 1'
}
}
}
}
}]
}

def sanity_lint() {
return ['Lint': {
Expand Down
61 changes: 61 additions & 0 deletions ci/jenkins/Jenkinsfile_website_version_artifacts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
// -*- 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/

// timeout in minutes
max_time = 240

node('restricted-utility') {
// Loading the utilities requires a node context unfortunately
checkout scm
utils = load('ci/Jenkinsfile_utils.groovy')
custom_steps = load('ci/jenkins/Jenkins_steps.groovy')
}

utils.assign_node_labels(utility: 'restricted-utility', linux_cpu: 'restricted-mxnetlinux-cpu', linux_gpu: 'restricted-mxnetlinux-gpu', linux_gpu_p3: 'restricted-mxnetlinux-gpu-p3', windows_cpu: 'restricted-mxnetwindows-cpu', windows_gpu: 'restricted-mxnetwindows-gpu')

utils.main_wrapper(
core_logic: {
utils.parallel_stage('Build', [
custom_steps.compile_unix_cpu_openblas('libmxnet')
])

utils.parallel_stage('Build Docs', [
custom_steps.docs_jekyll(),
custom_steps.docs_python('libmxnet'),
])

utils.parallel_stage('Build Full Website', [
custom_steps.docs_full_website()
])

utils.parallel_stage('Upload Docs', [
custom_steps.docs_upload_s3()
])
}
,
failure_handler: {
// Only send email if master or release branches failed
if (currentBuild.result == "FAILURE" && (env.BRANCH_NAME == "master" || env.BRANCH_NAME.startsWith("v"))) {
emailext body: 'Build for MXNet branch ${BRANCH_NAME} has broken. Please view the build at ${BUILD_URL}', replyTo: '${EMAIL}', subject: '[BUILD FAILED] Branch ${BRANCH_NAME} build ${BUILD_NUMBER}', to: '${EMAIL}'
}
}
)