From 2275b8396bc3d9e80e36c9a99ba78a1ee4985c64 Mon Sep 17 00:00:00 2001 From: Anthony Gitter <4290837+ploegieku@users.noreply.github.com> Date: Fri, 9 Aug 2019 11:41:12 -0500 Subject: [PATCH] Add AppVeyor pull request previews Merges https://github.com/manubot/rootstock/pull/262 References https://github.com/manubot/rootstock/issues/198 Add an AppVeyor continuous integration file to enable manuscript build previews in pull requests. AppVeyorBot comments in pull requests with a link to the latest manuscript PDF. Move shared continuous integration steps to an install script. Change the continuous integration skip message in the deploy script to work across multiple continuous integration services. --- .appveyor.yml | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++ .travis.yml | 13 +----------- SETUP.md | 11 ++++++++++ ci/deploy.sh | 4 +--- ci/install.sh | 19 +++++++++++++++++ 5 files changed, 89 insertions(+), 15 deletions(-) create mode 100644 .appveyor.yml create mode 100755 ci/install.sh diff --git a/.appveyor.yml b/.appveyor.yml new file mode 100644 index 0000000..6427f5a --- /dev/null +++ b/.appveyor.yml @@ -0,0 +1,57 @@ +# See https://www.appveyor.com/docs/getting-started-with-appveyor-for-linux/ +skip_branch_with_pr: true + +# Enable 'Do not build on "Push" events' in the AppVeyor project settings +# to only build commits from pull requests +branches: + only: + - master + +# Only run AppVeyor on commits that modify at least one of the following files +# Delete these lines to run AppVeyor on all master branch commits +only_commits: + files: + - .appveyor.yml + - build/ + - ci/install.sh + - content/ + +image: ubuntu +services: + - docker + +install: + # Create the message with the triggering commit before install so it is + # available if the build fails + - TRIGGERING_COMMIT=${APPVEYOR_PULL_REQUEST_HEAD_COMMIT:-APPVEYOR_REPO_COMMIT} + - appveyor AddMessage "commit $TRIGGERING_COMMIT" + - source ci/install.sh + +test_script: + - bash build/build.sh + - MANUSCRIPT_FILENAME=manuscript-$APPVEYOR_BUILD_VERSION-${TRIGGERING_COMMIT:0:7}.pdf + - cp output/manuscript.pdf $MANUSCRIPT_FILENAME + - appveyor PushArtifact $MANUSCRIPT_FILENAME + +build: off + +cache: + - ci/cache + +on_success: + - echo "Artifacts available from $APPVEYOR_URL/project/$APPVEYOR_ACCOUNT_NAME/$APPVEYOR_PROJECT_SLUG/builds/$APPVEYOR_BUILD_ID/artifacts" + - echo "Updated PDF available from $APPVEYOR_URL/api/buildjobs/$APPVEYOR_JOB_ID/artifacts/$MANUSCRIPT_FILENAME" + +# The following lines can be safely deleted, which will disable AppVeyorBot +# notifications in GitHub pull requests +# Notifications use Mustache templates http://mustache.github.io/mustache.5.html +# See https://www.appveyor.com/docs/notifications/#customizing-message-template +# for available variables +notifications: + - provider: GitHubPullRequest + template: "AppVeyor [build {{buildVersion}}]({{buildUrl}}) + {{#jobs}}{{#messages}} for {{message}} by @{{&commitAuthorUsername}} {{/messages}}{{/jobs}} + {{#passed}} is now complete.{{/passed}} + {{#failed}} failed.{{/failed}} + {{#jobs}}{{#artifacts}} The rendered manuscript from this build is temporarily available for download at + [`{{fileName}}`]({{permalink}}).{{/artifacts}}{{/jobs}}" diff --git a/.travis.yml b/.travis.yml index ab7f160..8edfab9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -6,19 +6,8 @@ services: branches: only: - master -before_install: - - wget https://repo.continuum.io/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh - --output-document miniconda.sh - - bash miniconda.sh -b -p $HOME/miniconda - - source $HOME/miniconda/etc/profile.d/conda.sh - - hash -r - - conda config - --set always_yes yes - --set changeps1 no install: - - conda env create --quiet --file build/environment.yml - - conda list --name manubot - - conda activate manubot + - source ci/install.sh script: - bash build/build.sh cache: diff --git a/SETUP.md b/SETUP.md index 70c1c82..e405858 100644 --- a/SETUP.md +++ b/SETUP.md @@ -196,3 +196,14 @@ When there are no longer any unstaged changes, then do `git commit`. If updating `master` via a pull request, proceed to push the commit to GitHub and open a pull request. Once the pull request is ready to merge, use GitHub's "Create a merge commit" option rather than "Squash and merge" or "Rebase and merge" to preserve the rootstock commit hashes. + +# Previewing pull request builds with AppVeyor + +You can optionally enable AppVeyor continuous integration to view pull request builds. +Unlike Travis CI, AppVeyor supports storing manuscripts generated during pull request builds as artifacts. +These can be previewed to facilitate pull request review and ensure formatting and reference changes render as expected. +When a pull request build runs successfully, **@AppVeyorBot** will comment on the pull request with a download link to the manuscript PDF. + +To enable AppVeyor, follow steps 1 and 2 of the [AppVeyor welcome](https://www.appveyor.com/docs/) to sign in to AppVeyor and add your manuscript repository as an AppVeyor project. +The repository already contains an `.appveyor.yml` build configuration file, so no other setup is required. +AppVeyor only runs when it detects changes that are likely to affect the manuscript. diff --git a/ci/deploy.sh b/ci/deploy.sh index b6c0514..4f9127a 100755 --- a/ci/deploy.sh +++ b/ci/deploy.sh @@ -59,7 +59,7 @@ fi # Commit message MESSAGE="\ -$(git log --max-count=1 --format='%s') +$(git log --max-count=1 --format='%s') [ci skip] This build is based on https://github.com/$TRAVIS_REPO_SLUG/commit/$TRAVIS_COMMIT. @@ -68,8 +68,6 @@ This commit was created by the following Travis CI build and job: $TRAVIS_BUILD_WEB_URL $TRAVIS_JOB_WEB_URL -[ci skip] - The full commit message that triggered this build is copied below: $TRAVIS_COMMIT_MESSAGE diff --git a/ci/install.sh b/ci/install.sh new file mode 100755 index 0000000..252d889 --- /dev/null +++ b/ci/install.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +## install.sh: run during a Travis CI or AppVeyor build to install the conda environment. + +# Set options for extra caution & debugging +set -o errexit \ + -o pipefail + +wget https://repo.continuum.io/miniconda/Miniconda3-4.6.14-Linux-x86_64.sh \ + --output-document miniconda.sh +bash miniconda.sh -b -p $HOME/miniconda +source $HOME/miniconda/etc/profile.d/conda.sh +hash -r +conda config \ + --set always_yes yes \ + --set changeps1 no +conda env create --quiet --file build/environment.yml +conda list --name manubot +conda activate manubot