Skip to content

CircleCI setup for PR documentation previews #104

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Feb 15, 2023
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
70 changes: 70 additions & 0 deletions .circleci/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
# Use the latest 2.1 version of CircleCI pipeline process engine.
# See: https://circleci.com/docs/2.0/configuration-reference
version: 2.1

# Orbs are reusable packages of CircleCI configuration that you may share across projects, enabling you to create encapsulated, parameterized commands, jobs, and executors that can be used across multiple projects.
# See: https://circleci.com/docs/2.0/orb-intro/
orbs:
# The python orb contains a set of prepackaged CircleCI configuration you can use repeatedly in your configuration files
# Orb commands and jobs help you with common scripting around a language/tool
# so you dont have to copy and paste it everywhere.
# See the orb documentation here: https://circleci.com/developer/orbs/orb/circleci/python
python: circleci/python@1.5.0

# Define a job to be invoked later in a workflow.
# See: https://circleci.com/docs/2.0/configuration-reference/#jobs
jobs:
build-docs: # This is the name of the job, feel free to change it to better match what you're trying to do!
# These next lines defines a Docker executors: https://circleci.com/docs/2.0/executor-types/
# You can specify an image from Dockerhub or use one of the convenience images from CircleCI's Developer Hub
# A list of available CircleCI Docker convenience images are available here: https://circleci.com/developer/images/image/cimg/python
# The executor is the environment in which the steps below will be executed - below will use a python 3.10.2 container
# Change the version below to your required version of python
docker:
- image: cimg/python:3.10.2
# Checkout the code as the first step. This is a dedicated CircleCI step.
# The python orb's install-packages step will install the dependencies from a Pipfile via Pipenv by default.
# Here we're making sure we use just use the system-wide pip. By default it uses the project root's requirements.txt.
# Then run your tests!
# CircleCI will report the results back to your VCS provider.
steps:
- checkout
- run:
name: Install qt libs + xvfb
command: sudo apt-get update && sudo apt-get install -y xvfb libegl1 libdbus-1-3 libxkbcommon-x11-0 libxcb-icccm4 libxcb-image0 libxcb-keysyms1 libxcb-randr0 libxcb-render-util0 libxcb-xinerama0 libxcb-xinput0 libxcb-xfixes0 x11-utils

- run:
name: Install python dependencies
# app-dir: ~/project/package-directory/ # If you're requirements.txt isn't in the root directory.
command: |
python -m venv venv
. venv/bin/activate
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
- run:
name: Clone main repo
command: git clone git@github.com:napari/napari.git napari
- run:
name: Install napari-dev
command: |
. venv/bin/activate
python -m pip install -e napari/".[pyside,dev]"
- run:
name: Build docs
command: |
. venv/bin/activate
xvfb-run --auto-servernum make docs-build GALLERY_PATH=../napari/examples/
- store_artifacts:
path: docs/_build/
- persist_to_workspace:
root: .
paths:
- docs/_build/

# Invoke jobs via workflows
# See: https://circleci.com/docs/2.0/configuration-reference/#workflows
workflows:
build-docs: # This is the name of the workflow, feel free to change it to better match your workflow.
# Inside the workflow, you define the jobs you want to run.
jobs:
- build-docs
23 changes: 23 additions & 0 deletions .github/workflows/circleci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# To enable this workflow on a fork, comment out:
#
# if: github.repository == 'napari/docs'

name: CircleCI artifact redirector

on: [status]
jobs:
circleci_artifacts_redirector_job:
runs-on: ubuntu-latest
if: "github.event.context == 'ci/circleci: build-docs'"
permissions:
statuses: write
name: Run CircleCI artifacts redirector
# if: github.repository == 'napari/docs'
Copy link
Member

@psobolewskiPhD psobolewskiPhD Feb 12, 2023

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should this line be changed to be un-commented before merging? Based on the line at the top of the file to enable this workflow on a fork comment out:

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah - so if this is commented the action also runs on forks (the case now that I'm running this on my fork). We should probably remove this before merging. If you folks are ready for that (i.e. no other reviews are necessary) I can do that.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For me, the code seems correct and it works on your fork...
This doesn't directly affect the website or any end users, so I'd be game to merge sooner rather than later and then if need be tweak something? Dunno if that makes sense in the grand scheme of things—will defer to others with more experience, like you and @jni

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why? By default, a contributor will not have circleCI configured, so the workflow will not be triggered. But could a contributor allow testing without creating PR? I would rather see a limited list of branches.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Wait, am I missing something?
I understood this action would still run on PRs in this repo, and make a clickable link like the numpy PRs...
See #98 (comment)
The contributor shouldn't need to do anything on their fork I don't think once this is in main anyways.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sometimes people work on their Fort until get a satisfying solution to not depend on the test queue of the napari organization.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hmm, fair enough. But I think docs contributors may be less savvy and more like end-users, rather than developers, so this PR is a nice quality of life improvement where they can see the rendered docs online.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is my understanding this will only run in their forks if they do sign up with CircleCI - otherwise they won't have the appropriate credentials.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't have an opinion here. It's easy enough for a contributor to edit that line... Is this ready other than this discussion?

steps:
- name: GitHub Action step
uses: larsoner/circleci-artifacts-redirector-action@master
with:
repo-token: ${{ secrets.CIRCLECI_TOKEN }}
artifact-path: 0/docs/_build/index.html
circleci-jobs: build-docs
job-title: Check the rendered docs here!