From f02aa0956f4740576006393483be04734d948e96 Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 10:03:29 +0000 Subject: [PATCH 01/16] Delete some sandpaper files --- .gitignore | 53 ++------------------------------ FIXME.Rproj | 19 ------------ config.yaml | 82 -------------------------------------------------- index.md | 82 +++++++++++++++++++++++++++++++++++++++++++++++--- links.md | 10 ------ site/README.md | 2 -- 6 files changed, 79 insertions(+), 169 deletions(-) delete mode 100644 FIXME.Rproj delete mode 100644 config.yaml delete mode 100644 links.md delete mode 100644 site/README.md diff --git a/.gitignore b/.gitignore index bd874548..3a8d19aa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,51 +1,2 @@ -# sandpaper files -episodes/*html -site/* -!site/README.md - -# History files -.Rhistory -.Rapp.history - -# Session Data files -.RData - -# User-specific files -.Ruserdata - -# Example code in package build process -*-Ex.R - -# Output files from R CMD build -/*.tar.gz - -# Output files from R CMD check -/*.Rcheck/ - -# RStudio files -.Rproj.user/ - -# produced vignettes -vignettes/*.html -vignettes/*.pdf - -# OAuth2 token, see https://github.com/hadley/httr/releases/tag/v0.3 -.httr-oauth - -# knitr and R markdown default cache directories -*_cache/ -/cache/ - -# Temporary files created by R markdown -*.utf8.md -*.knit.md - -# R Environment Variables -.Renviron - -# pkgdown site -docs/ - -# translation temp files -po/*~ - +_build +.ipynb_checkpoints \ No newline at end of file diff --git a/FIXME.Rproj b/FIXME.Rproj deleted file mode 100644 index 718d2734..00000000 --- a/FIXME.Rproj +++ /dev/null @@ -1,19 +0,0 @@ -Version: 1.0 - -RestoreWorkspace: No -SaveWorkspace: No -AlwaysSaveHistory: Default - -EnableCodeIndexing: Yes -UseSpacesForTab: Yes -NumSpacesForTab: 2 -Encoding: UTF-8 - -RnwWeave: Sweave -LaTeX: pdfLaTeX - -AutoAppendNewline: Yes -StripTrailingWhitespace: Yes -LineEndingConversion: Posix - -BuildType: Website diff --git a/config.yaml b/config.yaml deleted file mode 100644 index e3c63e48..00000000 --- a/config.yaml +++ /dev/null @@ -1,82 +0,0 @@ -#------------------------------------------------------------ -# Values for this lesson. -#------------------------------------------------------------ - -# Which carpentry is this (swc, dc, lc, or cp)? -# swc: Software Carpentry -# dc: Data Carpentry -# lc: Library Carpentry -# cp: Carpentries (to use for instructor training for instance) -# incubator: The Carpentries Incubator -carpentry: 'incubator' - -# Overall title for pages. -title: 'JupyterHub Administration to Empower Research Communities' - -# Date the lesson was created (YYYY-MM-DD, this is empty by default) -created: 2024-01-24 - -# Comma-separated list of keywords for the lesson -keywords: 'software, Jupyter, lesson, cloud computing, interactive computing, The Carpentries' - -# Life cycle stage of the lesson -# possible values: pre-alpha, alpha, beta, stable -life_cycle: 'pre-alpha' - -# License of the lesson -license: 'CC-BY 4.0' - -# Link to the source repository for this lesson -source: 'https://github.com/czi-catalystproject/hub-champion-training' - -# Default branch of your lesson -branch: 'main' - -# Who to contact if there are any issues -contact: 'support@2i2c.org' - -# Navigation ------------------------------------------------ -# -# Use the following menu items to specify the order of -# individual pages in each dropdown section. Leave blank to -# include all pages in the folder. -# -# Example ------------- -# -# episodes: -# - introduction.md -# - first-steps.md -# -# learners: -# - setup.md -# -# instructors: -# - instructor-notes.md -# -# profiles: -# - one-learner.md -# - another-learner.md - -# Order of episodes in your lesson -episodes: -- introduction.md -- image_management.md -- custom_images.md -- hub_administration.md -- troubleshooting.md - -# Information for Learners -learners: - -# Information for Instructors -instructors: - -# Learner Profiles -profiles: - -# Customisation --------------------------------------------- -# -# This space below is where custom yaml items (e.g. pinning -# sandpaper and varnish versions) should live - - diff --git a/index.md b/index.md index af662764..17b54189 100644 --- a/index.md +++ b/index.md @@ -1,9 +1,81 @@ ---- -site: sandpaper::sandpaper_site ---- +# JupyterHub Administration to Empower Research Communities -This is a new lesson built with [The Carpentries Workbench][workbench]. +This lesson is aimed at Hub Champions and teaches the fundamentals of hub administration and user support for 2i2c managed JupyterHubs in the cloud. Delivered over two synchronous workshops, two hours in length a week apart. The time in between is dedicated to self-guided study with asynchronous support (via email 2i2c support / online Slack? To be discussed). +> [!WARNING] +> This lesson is under active development and not ready for teaching yet. -[workbench]: https://carpentries.github.io/sandpaper-docs +> [!NOTE] +> TODO: Link to the Spanish repo. +## Lesson objectives + +After attending this training, Hub Champions will be able to: + +- explain how interactive cloud computing can empower your user community +- control user authentication and access to your hub +- monitor usage and cloud billing costs +- apply software environments through containerization +- navigate the filesystem and transfer data to and from the hub +- provide user support and troubleshoot common issues + +## Episode objectives + +1. :star: Recognising the benefits your hub can provide for your user community + - identify use cases of your user community + - distinguish which hub features can support these use cases + - understand your role and capacity as a Hub Champion to administer and support your hub +1. Administering your hub + - add users to the hub with GitHub + - configure server options (CPU, GPU, RAM) + - stop and restart a server +1. Applying software environments + - explain the value of reproducibility with containerized software environments + - pull a pre-configured Jupyter or RStudio image container for your hub +1. Navigating the filesystem and transferring data to and from the hub + - recognise and locate your home directory + - distribute datasets to all hub users in a shared directory + - push and pull GitHub repos with `gh-scoped-creds` +1. :star: Troubleshooting and providing user support + - triage common problems and know where to look for help + - share learning experiences from self-guided study + - foster a sustainable support system for your community + +( :star: indicates this episode is delivered via a synchronous workshop) + +## Prerequisites + +Before joining the training, participants should be able to: + +- access the 2i2c training hub +- login to their GitHub account + +## Authors + +- [Toby Hodges](https://github.com/tobyhodges) +- [Sabrina Lopez](https://github.com/SLLDeC) +- [James Munroe](https://github.com/jmunroe) +- [Jenny Wong](https://github.com/jnywong) + +## Contributing + +See [CONTRIBUTING.md](./CONTRIBUTING.md). + +## License + +See [LICENSE.md](./LICENSE.md) + +## Acknowledgements and Funding + +We would like to acknowledge Chan Zuckerberg Initiative funding for the "A Collaborative Interactive Computing Service Model for Global Communities" project and our partner organisations: + +- [2i2c](https://2i2c.org/) +- [The Carpentries](https://carpentries.org/about/) +- [Center for Scientific Collaboration and Community Engagement](https://www.cscce.org/) +- [Invest in Open Infrastructure](https://investinopen.org/) +- [MetaDocencia](https://www.metadocencia.org/) +- [Open Life Science](https://openlifesci.org/) + +## Contacting us + +If you would like to get in touch with us, then please email [support@2i2c.org](mailto:support@2i2c.org). diff --git a/links.md b/links.md deleted file mode 100644 index 4c5cd2f9..00000000 --- a/links.md +++ /dev/null @@ -1,10 +0,0 @@ - - -[pandoc]: https://pandoc.org/MANUAL.html -[r-markdown]: https://rmarkdown.rstudio.com/ -[rstudio]: https://www.rstudio.com/ -[carpentries-workbench]: https://carpentries.github.io/sandpaper-docs/ - diff --git a/site/README.md b/site/README.md deleted file mode 100644 index 42997e3d..00000000 --- a/site/README.md +++ /dev/null @@ -1,2 +0,0 @@ -This directory contains rendered lesson materials. Please do not edit files -here. From 35e55fdd29f4afa5360325d2f5c24b5f1e60f74b Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 11:24:43 +0000 Subject: [PATCH 02/16] Port episodes --- _config.yml | 71 +++++++ _toc.yml | 20 ++ episodes/custom_images.md | 21 -- episodes/episode_template_components.md | 166 ++++++++++++++++ episodes/hub_administration.md | 53 ++--- episodes/image_management.md | 54 ++--- episodes/introduction.md | 188 +++++++++++------- episodes/troubleshooting.md | 36 +++- index.md | 10 +- media/Chan_Zuckerberg_Initiative.svg | 38 ++++ media/logo/catalyst-icon-dark.png | Bin 0 -> 40357 bytes .../logo/catalyst-icon-light-bg-darkgreen.png | Bin 0 -> 42507 bytes media/logo/catalyst-icon-light-bg-white.png | Bin 0 -> 29149 bytes media/logo/catalyst-logo-dark-bg-white.png | Bin 0 -> 25970 bytes media/logo/catalyst-logo-dark.png | Bin 0 -> 27407 bytes media/logo/catalyst-text-dark-rectangle.png | Bin 0 -> 10371 bytes media/logo/catalyst-text-dark-square.png | Bin 0 -> 10912 bytes media/logo/favicon.ico | Bin 0 -> 15406 bytes 18 files changed, 505 insertions(+), 152 deletions(-) create mode 100644 _config.yml create mode 100644 _toc.yml delete mode 100644 episodes/custom_images.md create mode 100644 episodes/episode_template_components.md create mode 100644 media/Chan_Zuckerberg_Initiative.svg create mode 100644 media/logo/catalyst-icon-dark.png create mode 100644 media/logo/catalyst-icon-light-bg-darkgreen.png create mode 100644 media/logo/catalyst-icon-light-bg-white.png create mode 100644 media/logo/catalyst-logo-dark-bg-white.png create mode 100644 media/logo/catalyst-logo-dark.png create mode 100644 media/logo/catalyst-text-dark-rectangle.png create mode 100644 media/logo/catalyst-text-dark-square.png create mode 100644 media/logo/favicon.ico diff --git a/_config.yml b/_config.yml new file mode 100644 index 00000000..969c48bf --- /dev/null +++ b/_config.yml @@ -0,0 +1,71 @@ +# Book settings +# Learn more at https://jupyterbook.org/customize/config.html + +title: Hub Champion Training +author: The Catalyst Project Team +email: catalyst-project-core-team@googlegroups.com +logo: images/logo/catalyst-text-dark-rectangle.png +copyright: '2024' +description: >- + Lessons for JupyterHub Administration to Empower Research Communities. + +# Force re-execution of notebooks on each build. +# See https://jupyterbook.org/content/execute.html +execute: + execute_notebooks: force + +# Define the name of the latex output file for PDF builds +# latex: +# latex_documents: +# targetname: book.tex + +# Add a bibtex file so that we can create citations +# bibtex_bibfiles: +# - references.bib + +# Information about where the book exists on the web +repository: + url: https://github.com/czi-catalystproject/hub-champion-training # Online location of your book +# path_to_book: . # Optional path to your book, relative to the repository root + branch: main # Which branch of the repository should be used when creating links (optional) + +# Add GitHub buttons to your book +# See https://jupyterbook.org/customize/config.html#add-a-link-to-your-repository +html: + use_issues_button: true + use_repository_button: true + home_page_in_navbar: false + favicon: images/logo/favicon.ico + +parse: + myst_enable_extensions: # default extensions to enable in the myst parser. See https://myst-parser.readthedocs.io/en/latest/using/syntax-optional.html + - amsmath + - colon_fence + - deflist + - dollarmath + - html_admonition + - html_image + - linkify + - replacements + - smartquotes + - substitution + +sphinx: + extra_extensions: + - sphinx_design + config: + language: en + html_last_updated_fmt: '%b %d, %Y' + html_show_copyright: true + html_search_language: ja + html_css_files: ["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css"] # for FontAwesome 6.1 icons (the defaults are version 5) + # see https://sphinx-design.readthedocs.io/en/latest/badges_buttons.html + html_theme_options: + toc_title: Table of contents. + # i18n + nb_render_priority: + gettext: {} + locale_dirs: ['locale/'] + gettext_compact: false + gettext_additional_targets: ['literal-block'] + gettext_location: false \ No newline at end of file diff --git a/_toc.yml b/_toc.yml new file mode 100644 index 00000000..584f2f49 --- /dev/null +++ b/_toc.yml @@ -0,0 +1,20 @@ +# Table of contents +# Learn more at https://jupyterbook.org/customize/toc.html + +format: jb-book +root: index +parts: +- caption: About + chapters: + - file: learners/setup + - file: profiles/learner-profiles + - file: instructors/instructor-notes + - file: learners/reference +- caption: Episodes + chapters: + - file: episodes/introduction + - file: episodes/hub_administration + - file: episodes/image_management + - file: episodes/troubleshooting + + diff --git a/episodes/custom_images.md b/episodes/custom_images.md deleted file mode 100644 index d8649eec..00000000 --- a/episodes/custom_images.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -title: "Customising Software Images" -teaching: 0 -exercises: 0 ---- - -:::::::::::::::::::::::::::::::::::::: questions - -- TODO - -:::::::::::::::::::::::::::::::::::::::::::::::: - -::::::::::::::::::::::::::::::::::::: objectives - -After completing this episode, learners will be able to... - -- customise an image from a template -- ensure the reproducibility of images using repo2docker -- host an image on a container registry - -:::::::::::::::::::::::::::::::::::::::::::::::: diff --git a/episodes/episode_template_components.md b/episodes/episode_template_components.md new file mode 100644 index 00000000..7eabbbfd --- /dev/null +++ b/episodes/episode_template_components.md @@ -0,0 +1,166 @@ +# Recognising the benefits your hub can provide for your user community + +teaching: 10 +exercises: 2 + +:::::{card} +OVERVIEW +^^^ + +::::{grid} +:gutter: 2 + +:::{grid-item} +Questions + +- Placeholder text +::: + +:::{grid-item} +Objectives + +- Placeholder text +::: + +::::: + +``` +:::::{card} +OVERVIEW +^^^ + +::::{grid} +:gutter: 2 + +:::{grid-item} +Questions + +::: + +:::{grid-item} +Objectives + +::: + +::::: +``` + +## Introduction + +Placeholder text. + +``` +::::{dropdown} Challenge Title +:open: + +Challenge content + +:::{dropdown} Solution +Solution content + +::: + +:::: +``` + +::::{dropdown} Challenge Template +:open: + +Challenge content + +:::{dropdown} Solution +Solution content + +::: + +:::: + +## Images and Figures + +### Inline image + +``` +![Catalyst icon](../media/logo/favicon.ico) +``` + +![Catalyst icon](../media/logo/favicon.ico) + +### Block-level image + +``` +:::{image} ../media/logo/catalyst-logo-dark.png +:alt: Block-level image +:width: 200px +:align: center + +::: +``` + +:::{image} ../media/logo/catalyst-logo-dark.png +:alt: Block-level image +:width: 200px +:align: center + +::: + +### Figure + + +``` +:::{figure} ../media/logo/catalyst-icon-dark.png +:scale: 50 % +:alt: Catalyst Project logo + +This is the caption of the figure (a simple paragraph). +::: + +``` +:::{figure} ../media/logo/catalyst-icon-dark.png +:scale: 50 % +:alt: Catalyst Project logo + +This is the caption of the figure (a simple paragraph). +::: + +## Math + +### Inline + +``` +$\alpha = \dfrac{1}{(1 - \beta)^2}$ +``` + +$\alpha = \dfrac{1}{(1 - \beta)^2}$ + +### Block + +``` +$$ +(a + b)^2 &= (a + b)(a + b) \\ + &= a^2 + 2ab + b^2 +$$ (mymath2) + +The equation {eq}`mymath2` is also a quadratic equation. +``` + +$$ +(a + b)^2 &= (a + b)(a + b) \\ + &= a^2 + 2ab + b^2 +$$ (mymath2) + +The equation {eq}`mymath2` is also a quadratic equation. + +``` +:::{card} +KEY POINTS +^^^ +- placeholder text +::: + +``` + +:::{card} +KEY POINTS +^^^ +- placeholder text +::: diff --git a/episodes/hub_administration.md b/episodes/hub_administration.md index 159bd874..d532dc02 100644 --- a/episodes/hub_administration.md +++ b/episodes/hub_administration.md @@ -1,33 +1,39 @@ ---- -title: "Administer your hub user community" +# Administering your hub + teaching: 0 exercises: 0 ---- -:::::::::::::::::::::::::::::::::::::: questions +:::::{card} +OVERVIEW +^^^ + +::::{grid} +:gutter: 2 + +:::{grid-item} +Questions - What is the difference between JupyterHub and JupyterLab? - Who has control over acces to a Hub? - What's really happening in the cloud when I run a server? -:::::::::::::::::::::::::::::::::::::::::::::::: - -::::::::::::::::::::::::::::::::::::: objectives - -- Explain the difference between JupyterHub and JupyterLab -- Add users to a hub using GitHub Teams -- Describe happens when a "server" is started -- How to stop and restart a server +::: -:::::::::::::::::::::::::::::::::::::::::::::::: +:::{grid-item} +Objectives +- Add users to the hub with GitHub +- Configure server options (CPU, GPU, RAM) +- Stop and restart a server +::: -Exercises +::::: -:::::::::::::::::::: challenge +## Exercises -### Why is my programme running slow? +::::{dropdown} Why is my programme running slow? +:open: Suppose a user writes a program to analyze a dataset. On their laptop using testing data the program works and is reasonably fast. When the user tries to run this same program on a real dataset their JupyterHub environment is it frustratingly slow. Why is their interactive computing session being so slow? @@ -39,22 +45,19 @@ b. Too many other users are using the cloud server at the same time. c. I am trying to a computationally intensive task and the cloud computer has poor hardware. d. I am accessing a very large file that is not local to the cloud server being used. -::::::::::: solution +:::{dropdown} Solution d. I am accessing a very large file that is not local to the cloud server being used. -:::::::::::::::::::: - -:::::::::::::::::::::::::::::: +::: -::: keypoints +:::: +:::{card} +KEY POINTS +^^^ - As a Hub Champion your main tool is JupyterHub. - You have control over who has access to your Hub - A Hub in a cloud is just a computer ::: - - - - diff --git a/episodes/image_management.md b/episodes/image_management.md index c7c4a305..611f2a4c 100644 --- a/episodes/image_management.md +++ b/episodes/image_management.md @@ -1,29 +1,35 @@ ---- -title: "Managing Software Images" +# Managing Software Images + teaching: 0 exercises: 0 ---- -:::::::::::::::::::::::::::::::::::::: questions +:::::{card} +OVERVIEW +^^^ + +::::{grid} +:gutter: 2 -- TODO +:::{grid-item} +Questions -:::::::::::::::::::::::::::::::::::::::::::::::: +- TODO -::::::::::::::::::::::::::::::::::::: objectives +::: -After completing this episode, learners will be able to... +:::{grid-item} +Objectives -- explain the value of reproducibility provided by images -- describe how software images are integrated with their hub environment -- evaluate whether an existing image meets users' software needs -- pull an image container to make it available on their hub instance +- explain the value of reproducibility with containerized software environments +- pull a pre-configured Jupyter or RStudio image container for your hub +::: -:::::::::::::::::::::::::::::::::::::::::::::::: +::::: -:::::::::::::::::::: challenge +## Exercises -### Specifying a custom image tag. +::::{dropdown} Specifying a custom image tag. +:open: Which of the following would you paste into the _Custom Image_ field to add the latest version of the `handbook-authoring-image` image to your hub? @@ -32,9 +38,7 @@ Which of the following would you paste into the _Custom Image_ field to add the 1. docker pull quay.io/2i2c/handbook-authoring-image:ad18f6ea575d 1. quay.io/2i2c/handbook-authoring-image:ad18f6ea575d - -::::::::::: solution - +:::{dropdown} Solution 4. quay.io/2i2c/handbook-authoring-image:ad18f6ea575d Notes on the other answers: @@ -42,16 +46,14 @@ Notes on the other answers: 1. This is using an older version tag and not the latest version. 2. This is missing the version tag. 3. Need to remove the 'docker pull' part. +::: +:::: -:::::::::::::::::::: - -:::::::::::::::::::::::::::::: - -::::::::::: keypoints - +:::{card} +KEY POINTS +^^^ - Container images are useful for reproducing software environments across platforms. - Default images are available on the hub - Additional images can be pulled to the hub if required - -:::::::::::::::::::: \ No newline at end of file +::: diff --git a/episodes/introduction.md b/episodes/introduction.md index 7065d231..05d79d14 100644 --- a/episodes/introduction.md +++ b/episodes/introduction.md @@ -1,114 +1,168 @@ ---- -title: "Using Markdown" +# Recognising the benefits your hub can provide for your user community + teaching: 10 exercises: 2 ---- -:::::::::::::::::::::::::::::::::::::: questions +:::::{card} +OVERVIEW +^^^ -- How do you write a lesson using Markdown and `{sandpaper}`? +::::{grid} +:gutter: 2 -:::::::::::::::::::::::::::::::::::::::::::::::: +:::{grid-item} +Questions -::::::::::::::::::::::::::::::::::::: objectives +- Placeholder text -- Explain how to use markdown with The Carpentries Workbench -- Demonstrate how to include pieces of code, figures, and nested challenge blocks +::: -:::::::::::::::::::::::::::::::::::::::::::::::: +:::{grid-item} +Objectives -## Introduction +- Placeholder text + +::: + +::::: -This is a lesson created via The Carpentries Workbench. It is written in -[Pandoc-flavored Markdown](https://pandoc.org/MANUAL.txt) for static files and -[R Markdown][r-markdown] for dynamic files that can render code into output. -Please refer to the [Introduction to The Carpentries -Workbench](https://carpentries.github.io/sandpaper-docs/) for full documentation. +``` +:::::{card} +OVERVIEW +^^^ -What you need to know is that there are three sections required for a valid -Carpentries lesson: +::::{grid} +:gutter: 2 - 1. `questions` are displayed at the beginning of the episode to prime the - learner for the content. - 2. `objectives` are the learning objectives for an episode displayed with - the questions. - 3. `keypoints` are displayed at the end of the episode to reinforce the - objectives. +:::{grid-item} +Questions -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: instructor +::: -Inline instructor notes can help inform instructors of timing challenges -associated with the lessons. They appear in the "Instructor View" +:::{grid-item} +Objectives -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +::: -::::::::::::::::::::::::::::::::::::: challenge +::::: +``` -## Challenge 1: Can you do it? +## Introduction -What is the output of this command? +Placeholder text. -```r -paste("This", "new", "lesson", "looks", "good") ``` +::::{dropdown} Challenge Title +:open: + +Challenge content -:::::::::::::::::::::::: solution +:::{dropdown} Solution +Solution content -## Output - -```output -[1] "This new lesson looks good" +::: + +:::: ``` -::::::::::::::::::::::::::::::::: +::::{dropdown} Challenge Title +:open: + +Challenge content + +:::{dropdown} Solution +Solution content + +::: +:::: -## Challenge 2: how do you nest solutions within challenge blocks? +## Images and Figures + +### Inline image + +``` +![Catalyst icon](../media/logo/favicon.ico) +``` -:::::::::::::::::::::::: solution +![Catalyst icon](../media/logo/favicon.ico) -You can add a line with at least three colons and a `solution` tag. +### Block-level image -::::::::::::::::::::::::::::::::: -:::::::::::::::::::::::::::::::::::::::::::::::: +``` +:::{image} ../media/logo/catalyst-logo-dark.png +:alt: Block-level image +:width: 200px +:align: center -## Figures +::: +``` -You can use standard markdown for static figures with the following syntax: +:::{image} ../media/logo/catalyst-logo-dark.png +:alt: Block-level image +:width: 200px +:align: center -`![optional caption that appears below the figure](figure url){alt='alt text for -accessibility purposes'}` +::: -![You belong in The Carpentries!](https://raw.githubusercontent.com/carpentries/logo/master/Badge_Carpentries.svg){alt='Blue Carpentries hex person logo with no text.'} +### Figure -::::::::::::::::::::::::::::::::::::: callout -Callout sections can highlight information. +``` +:::{figure} ../media/logo/catalyst-icon-dark.png +:scale: 50 % +:alt: Catalyst Project logo -They are sometimes used to emphasise particularly important points -but are also used in some lessons to present "asides": -content that is not central to the narrative of the lesson, -e.g. by providing the answer to a commonly-asked question. +This is the caption of the figure (a simple paragraph). +::: -:::::::::::::::::::::::::::::::::::::::::::::::: +``` +:::{figure} ../media/logo/catalyst-icon-dark.png +:scale: 50 % +:alt: Catalyst Project logo +This is the caption of the figure (a simple paragraph). +::: ## Math -One of our episodes contains $\LaTeX$ equations when describing how to create -dynamic reports with {knitr}, so we now use mathjax to describe this: +### Inline -`$\alpha = \dfrac{1}{(1 - \beta)^2}$` becomes: $\alpha = \dfrac{1}{(1 - \beta)^2}$ +``` +$\alpha = \dfrac{1}{(1 - \beta)^2}$ +``` -Cool, right? +$\alpha = \dfrac{1}{(1 - \beta)^2}$ -::::::::::::::::::::::::::::::::::::: keypoints +### Block -- Use `.md` files for episodes when you want static content -- Use `.Rmd` files for episodes when you need to generate output -- Run `sandpaper::check_lesson()` to identify any issues with your lesson -- Run `sandpaper::build_lesson()` to preview your lesson locally +``` +$$ +(a + b)^2 &= (a + b)(a + b) \\ + &= a^2 + 2ab + b^2 +$$ (mymath2) -:::::::::::::::::::::::::::::::::::::::::::::::: +The equation {eq}`mymath2` is also a quadratic equation. +``` + +$$ +(a + b)^2 &= (a + b)(a + b) \\ + &= a^2 + 2ab + b^2 +$$ (mymath2) + +The equation {eq}`mymath2` is also a quadratic equation. + +``` +:::{card} +KEY POINTS +^^^ +- placeholder text +::: + +``` -[r-markdown]: https://rmarkdown.rstudio.com/ +:::{card} +KEY POINTS +^^^ +- placeholder text +::: diff --git a/episodes/troubleshooting.md b/episodes/troubleshooting.md index 138fc9d3..5f8bee2e 100644 --- a/episodes/troubleshooting.md +++ b/episodes/troubleshooting.md @@ -1,22 +1,40 @@ ---- -title: "Troubleshooting and User Support" +# Troubleshooting and providing user support + teaching: 0 exercises: 0 ---- -:::::::::::::::::::::::::::::::::::::: questions + +:::::{card} +OVERVIEW +^^^ + +::::{grid} +:gutter: 2 + +:::{grid-item} +Questions - TODO -:::::::::::::::::::::::::::::::::::::::::::::::: +::: + +:::{grid-item} +Objectives -::::::::::::::::::::::::::::::::::::: objectives +- triage common problems and know where to look for help +- share learning experiences from self-guided study +- foster a sustainable support system for your community +::: + +::::: + +:::{card} +KEY POINTS +^^^ After following this episode, learners will be able to... - triage problems encountered by hub users - Use Grafana to measure hub usage - choose the most appropriate place to look or ask for help with hub management - -:::::::::::::::::::::::::::::::::::::::::::::::: - +::: diff --git a/index.md b/index.md index 17b54189..10bdf00a 100644 --- a/index.md +++ b/index.md @@ -2,11 +2,13 @@ This lesson is aimed at Hub Champions and teaches the fundamentals of hub administration and user support for 2i2c managed JupyterHubs in the cloud. Delivered over two synchronous workshops, two hours in length a week apart. The time in between is dedicated to self-guided study with asynchronous support (via email 2i2c support / online Slack? To be discussed). -> [!WARNING] -> This lesson is under active development and not ready for teaching yet. +:::{attention} +This lesson is under active development and not ready for teaching yet. +::: -> [!NOTE] -> TODO: Link to the Spanish repo. +:::{seealso} +TODO: Link to the Spanish repo. +::: ## Lesson objectives diff --git a/media/Chan_Zuckerberg_Initiative.svg b/media/Chan_Zuckerberg_Initiative.svg new file mode 100644 index 00000000..4615d4de --- /dev/null +++ b/media/Chan_Zuckerberg_Initiative.svg @@ -0,0 +1,38 @@ + + + + Group + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/media/logo/catalyst-icon-dark.png b/media/logo/catalyst-icon-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..e8e6e76a14d7a53f9109de33285cabd7984736f0 GIT binary patch literal 40357 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 Kny=KY!u|(tM}WTo literal 0 HcmV?d00001 diff --git a/media/logo/catalyst-icon-light-bg-darkgreen.png b/media/logo/catalyst-icon-light-bg-darkgreen.png new file mode 100644 index 0000000000000000000000000000000000000000..5dd5d127c3d41fe3a0489ca25d171f98fb7b0de1 GIT binary patch literal 42507 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

_~OcUuqU;PMo4DZJT!c2^d)CqIdD)TGT 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%0D7U&z?)V8 z;OHssJ1yH42h__;+bs6Z898pgeyCM{#WPovYd0>5&-4E3Wm z*qOIP0iH3y^HvVRJ0H$0Hd-|OG^rPD4U^7Br0Ta(M-3|ljFDzixY=Pk z5Zoo>dUDMeiUlGD#i%IFx%b3(-_nSTk3VFe%5w0%Jg|Wbp}u}O(%INGT{A)z{6w3;Gk6QNB2%lKUmS z$Yf{YC*Y4&#ZP72dB65&VqKET2?*|#B_BuG4$?cQ8Os-4T@SWPJ@p{@{KMTFq48nyoh1BVyVHi6@^Rt&MtmmbeU!2yg2H)u*b`&q#7s@j1sSLmxG`zRhR z>oO0P5YoIuwMZ+!t;ym+h85AoORP)Kk?QQYxOOhnZ=SN)m}4GQ(P3PfFyNU2K2u6! znrlZm#Cjc{b?9l2x$EUM6R~9-kHhMbq3^pf+Ui$P=e$yNgVP~w^7R$)nG`v# z3w~Z{1&zYqjAi|)XLIA_)^C-2zs&XHdC)Gweq+{+7?y%_U1I8x^q@kK8tt(IbB~oG zP;sD5qEMeCN?>M_$+1&qwYp}Ifz&rLoxc4U2ntvu=Sx;mq2!A@JuF8tA9-plx#9oP z%RkihNCbk}#6)v5L?*D9_o2@~H1KgE`*wmwj^3Go0OesUyHNu*LD zvi2xCKqsWW!ONRnpqj}}0>%IYO_Nhwm|XyN7l3*=V>g^Km#{b$G+F7?{m7ESG`RermOB@8- zo2q)Ks-zvS#bYtqH!v19;ccUh^c4pZ-wiBcF|qH6KAy~mt{h`CJ&h~Im)B5}$Qgf$ zjx&`Tehj=!@mpG}vaaanx{4883lbkFsQnp`xSGY6W0g!ylM&HHC`Uq}3)q>&CUGWE zkoABZ{B!=14Wwj*#jVoW6HI~y1{#Ih>?UQO<OTX?69Fp$3mCuuz2pCGz_K6#F8K65 aJZ?tvkiXS`%k}TaiK<{N#Txn7(EkIy8DCuh literal 0 HcmV?d00001 diff --git a/media/logo/catalyst-logo-dark-bg-white.png b/media/logo/catalyst-logo-dark-bg-white.png new file mode 100644 index 0000000000000000000000000000000000000000..eb71039ff1c62fc5c5a8a92fceff14a15bbecab6 GIT binary patch literal 25970 zcmeFYby!y2_BINlfKp>yBx=vy%^ zBV%bE4qFKb3p>3zgqw|-i;bC+i-Vb)os)%=je~=m9tL4$XJ%nzVc{ZcPQph*y1#6u zqy|%ymVy}CSTX8DZ48VUovduZ3&1O!AmB$UBbfe6Co4;9dx#T1)n6kZ;OD!`OjH7o zUjFkBpB>Z~q97{v&!OOd{8Xkem@R~f$hJU}t*1^v5ua`g# znT#xr?hIqk#KOq(Z>xkFLSSYvOQZi-_*+ZZe_XLNyW0uGQs3HypUQ~=YGkbMUdS?UXf3v|qo`SrE+W*VK?{=bS^zlEg04vEY{0<7W5~k5ZOp>O%*DwLWn(q^d#-;x^513>GXN8DuyU|+a`3RQ zvvBcna5Mk?%wISE+apRg4u+<8+Y(^?d*uJT_CJUJFOK=&&Glbf{dcqeA3A8;e+j3% zQ~oPX@6H$80O!m0Z|4iHLEbvROl|B0B#o@ConNZjSex+O4gIgn|FO0IeMba1@o!%E z_xhalZU3A9fx(c!e8t92$;QS~Kt$jAlRh8Qe_sB-TjYPC&VP&n`13Cg%=9;Y36yBL z;UXdF?n{WiRdPz+nU}UCMkI6{=Dll0k`mVx8oOuwMy~n&W94&lMg>|VLz0O|>{I;{ zg_rN{SCu23M5>H*dy%v}c+V6$pA7wZcn?n@J!neA?(z7G9dznx{H-T3W3+K!^}Zv0 zz@2)ddGFP?15#+c$J2GecEU)u3y&~7o#Xo+N|}AJ@$6;neqngL2&>rCZgC4%pNE zT>f3psINQvk~fD=f^9{q*n|iEZ-#iLR(Mf%-ln5K9<3(NIoBQt*QtV4`P#{>4KA2p z@N3t7bKaQ*6E`9@mB1wK&w6+Q_e$UYDVi!L#%M~#ewacU*S-91bHpXl&ELx%9kxUu z?l4Q|(A)S4oAdP;FJ;EUA>{(04rP4<`S9cv=u00%yHc~gS| z^}1y(+nBwe$9QD@g(b@yx>>=Rr7*9FS3@5&fxW@relmGp{_-1?X*sgZ$Uv9`)7)Ki zxiS}-xAi8m;mGD zxz8qzOPRREZ@k$7Yhz7T)V%&E-Hzzo8F!7E`(%?lc`XtfsfN1L>zMq}$h$s5U4imN z@|?USTch=>%Ch3~BAVbFMWcFI2{oSJIvd}&9w*%TJV2&ym!dMuGsRqWK9v7{v8pe8 z!DDSPv)c%4ZOmQw58XYI0nzkdq5)v1z&mr>+P8r!Fs)HrQnRDur*<-Su?ig9Ct1kle!A>>;0J zxFFn5KVz%*;3-y+wwOcIP*UDHTm1IBf6bJdAV8=Q38kcrF|Qk*Wv3tE+C7ujG&Ye8 z**GEb)ZsO$YcD~E)k@}QL|z^i z;(|F!Cvn))(!cdo6VB_>=E$_{+|c^H;kaBYbgQ+l&oo3>^(z)>7EIF!PTP@`Fs=G>#m%Iy#J7B_lcN|aG}`p zRtjOy6m74-EtghzXf{8V-d+w?I#S<_B0=sx%6fT$)tg(@P(_+RQuhk+Yrpw1XPsZV>%7HU4jjVM^|B>Ur~@@i=Ly;$!ss*JDE z>B)9=NC?F>+Y<;sV|SSW2xjPaLGq^Nx2mPyNg1pVgxP$LzRuGvlDOpsmg#;=E|*|( zyJOy!<4B=o%li=dPd?%cJvd8a4Ex zixwM1LPf&@&%@Z~cyo^vb!FW<6HPG+LIy0}xEMR}lh~~aS7j(vg2O9KUWAH02oq0l zkJuvFRj;)9byy^q#R{>3*&8s7b@?+AdDvvzXq0LNqz2HU)RKM17Jqcn&T3nDlV7U9 z&<(;(x}Jhh)?s%p2+LbX*1s=ID{iszoGS2Gdb>J4^jNxg^(cu|(A>I^%v8KMqrH4h z+@|{uqUy`;fH>RJ4_6H%KV*PPDx`25z;G%|{R2QAh8t?+ zw^FYh)|bC%3A9XSH+%`0*_hiN{vCRgHuVWdoa5GqO9nf4ZrN1aq--)xM|ypCTRJRG zkub&Ir7K|%m0mQxeYi0dJ4agCkse}CVy-0PTe*@gfOHFP9D=a=k>@b!E)6`igrD;# zM>|0Hy$!w*uKs4!?*_p5`ZqgP^OHYL1uWZAgmPs0vh2URfXmBr84l(piugN~@S5D& z&e&ldJsjYRHTK^!=HmEV^A`o4u0a6^Qxc}2ln74~z36`raH2@u58k}Pt82~f#t>t6 zl&9Rx(7leMpnPEm4-Ydc^~qk*EIgJ%37RDu0ZKSBtvd$^wRG7FLHy%qvRk{ zyXij`F8qm7ED$tH5pZ}Resz;s-6Qdp^=3xFG~IZk0KDJ0#z$HXPxn4}Dq=sDg2G8Y zw9IYXc9l;NchWRe63vi%2iwsxKB;yb58CY!A^jE zhc_G$%CW5^uLh9KoY%7^bs)ZXll(~FNg$|KbG*NP%v`4Qp~C*#D@|8N%_l3eNrJ8) z9PO8q96hGS_SeNglB`J3;;e#!6f$z{iOh}t8GE)w;4Egx?fm2XB+QH-+=zU?c#NTI zZx@f>!!v#U$1unEO+PbFW4;oawQ_pe7_+W>?Mq&?wH`E-6mPrLHp&d_c68VjZHnwq z*EAWL76B0Io|sJhX0DrK%m6!{%xkk;i#OrQ?#rT|p@Kx_f8Wjf$#FQfzt409T#DsQ zQ;PSB`>LtL>T5p*3Vj`s{C3QHB-Jkaqcn;RBM~=*o4YTf0o3>GoB1=#u0Q>AId7yn z3rB@`uZ+56*VxO|SCJm_FX(k#SZu$G>h;4}<&ha8i|t+KVyMHDK?PH>KL3Br)A=so#pnG=o)yQ5woE+}dcnq4_biO!^Nt?Y0d}#h zy)96pDctnykJznL@8pea=C#ceEVPeJ6;*l8{E7D=p05{FA+I&1y7kYu>&t+lz_GPb zlSrb&)Jm&g^;wrZIs#l{`_KXlZt&)ZCR0LS_m;PBt}+=WBCMN9%tnxHJF{Xfb)f4Z zjQZ7(ejP|1^OIveqsKkdVWWl2HthEStgeRM5Z(yYsIeg&177U9O zT9`LnOzN|ob+)j@y+;x&x&E}CLbXghYI@QpU~=?T#7)|J_PVRz@711zm4L~oXEfPP z768GJ@{64cTtEd}BxCC#-B{6e8t^@?q1olDd)z3Wu|Jg1U1cO=GVmvS!n|mI()f*r z7mc{0uA#UgcPi-4Au1}as|&16`mz659(Lq1PPb=WVxOg6_qiAtge$ZUEAEwvxbzn z&9~CRw2QH?6{ScxuBg|EX2w=eVDHOp4nFd`hTp%|pX9`v=9&6-65{piSx=pz;GhcG z15CurA^kwWGKaHo#A-pt2)|C89Q_EpvbYTaTx+nn3=QJVD(KQs@XF9Q$bCsk%~-d^ zdehxFm}YvADms>}FJI|HxX2#$MrQc!{PyP8bWhPQH{USN+QV?pX4H{OzS$p?gNzt{ zu5n$7(MZ}KruhX!-XHtJT)1vY12(l?RWHJb*n0~w%0F9l{Ui)`d};coE+ZltK-SJr ztPh-b(JoYa?>pTSo{D?^d>P7{`<-? z3nYL$${&~!97a%Av}ay69!Q*1Ur_mBJ3?;1)=78s>u*(-oJBU7U~k%cBv^_(uRg$g zRp|(^?1A5$56^bV?#v(icbBh*h9AdRo6DSKLD~Dz044A^j@=~mSNUXEsR(!wr9b|x zIprGA3G-=1&s(y@crglX+q{`)(2`b$zVbdAjjyB#l@*`eG=*{G@ClQW)l&mjD(zkd z7#heWwTwS4fNDv7p**vtS7!A^F>%6U?>-kBIIEEDv1nr44a_HN%sxW?WQ#qe&M1uSQ1e(ZX0mC|y81pK&qEbVFHb~Ib41%Fm4eXjIx&^UNi~UmI zX~s53IjMVr0!w5p^Egd%0}>fm@E5W63Qk&ssSG#$BXB*SH*3|F|PEDW^{rRJy(_!odFKa14a0t!uV(t|jh zKrM6dDGRc&Q$=NT_zCw03E7CbI|43YYNsBVpf>NH2^d`hL88U%H2ocdv?uH2R$th@ zHB(GXxI=sZ7)O4RLx8+VVKKpX7rcQw01PpgcQx=u=)}6XO@fD<8T$}WQCBWomAPR) zqvt+5>%RuCG{19Ezr97Luv7aYaQ z=8=7bXKIrt!sPbNk%>*9>^A4|&0kdld?>toeh?5d$d)~-67Ggv^+`vfLV^Yxrxjrg zLvD2Vjn)gr#c04Zey4=%RA#@}MKnz8`Pk&XzYTFaSW8sS`|$Av;LbiA(}w)xO`2r}$?f zPZ4!y&5-YGr>>)W&?-U8YI0yjwT(gA5Lj5ORp)0 zGU$eQOii(l&AO$e7_Cw(i^Z#gPR^9)C-YAeOW~@@@^r3>2{Cf#3$#sZN$-r9zG$0U zZ0%MFqL_-`heU&{v3gxF2(5MOJ8-2Nj|3TmLu<{b6OiwbpDHG4MT%cwf*Q6;0N zX26f%)h%I_45w7p5I9NoD9w0Z1Q>Z;8S~}6WTpEMOpJ^6KR070te&T_%VuXg8SWJP zF$mnd>h91D1ZT z`R%+A&V@KVIAHP7pa4)u8FBA7wo^Ad=Hh8IEeuC|CCa@%UAOp&FInS6JV%YYRL zUS}*GlIE?8@rgHY?(E7uU8VDT{Vf!O#_Ieu+gt* z63?reX0=f)=9uC0iG{>Hlt6&mD^vWlxivs-+nrzKo>f^Z?$^ z7y1ON)Mx(iX@6w_Pc`#xBI;0K!gxmpBA4rZlviwom=%gHWs!tPq-4VNd zD&yB_ROfB?UH75ja?j?7Nq%~_Z-G=<3J%XiSHqA~{!m6Gav0odg^$;{`8L)n7vs9j zwOg26!%#dn56d5u4n zX*d|!1_shePk zhKV(*ED!=LeqYgU3VqbW*>r>7gCo^?VA<;bLycj) zZBc@caFw02Pz`e<8o$nu^&;0KZr>yO>_o*RkNG)6C1iiWYQc-q{c;Yle)6or~<2X7IQ->0UT?k6694eyN$!At&3FF@ySen!+*SabT`GM8zx?QSbBc_OMam${ehX z)|eKrtulZr>j6KVtdgZv-BT|qSGgvH$caEvv3Rh0f>Lq5aI;znqtC3At6`b#AQ6&V zFg}Kc_DyEG+2fb0-z1b|2!4r) zlA~v2$yz)_-l)|vai2OO`^r%-aKE>^|z8ht!8{Ex6 zH0b#@k13-VK8`y-V?&iJ za%7u{_qCf!l8)mbKQa)adgXsz_R(@tNq+y8oh%Ra#LQMqi!OQombhto-uKrPtOsMaoU5Sw zTbr^zAhH}>$~6js4?J5_rNs46DBrE(@}vtWqcR^)nipsKA45Eh@UNi0(3Q-}=iBLU}!Hs$oWxa2`Il0=@ z<7+CM+9yz-pPK%xuoYx6g1!3V(6kQo0d=x$)=L6M!8=Hv+6p-E`8%X93b5hkEVky=FT9 zU~d#0qxhBusxD!!-Dh5vd7eH+GLDox8xv5?2PN){t~igGd-}_x;m`KHg@-Y$sIbg? zdiC182@FvR_?VZRCB`@%_u{d`Xg$jE{MaW`W)1m z71UXT7gSV=r48Z4D=Z(+a^)h!+q96XQPn5iJ&;CwO5Wi|7bUy1K-36GWQ z7oSQ)pStA}^PfgHQ%0EsZgOVkKbKl*I?<$nUu}>N=UAEo44m-KHqQ{1XfuI7rE3eb6sytcp9n>C>>3;CkWEdydAz&+x)w`;1F8CzW z=&4gYie)}NLj;nR9tqm2uj@v3krQjs@N~O^N&EQY2QyBrw3v9A)3a~i&QxlF01X)= zX+866+5wd0ZqR)9*dsr8biWRVM->I9Wo1QIyuWBr3SVPxKm!tp@nJ2w)Nkm`k!g7g zE0a5--R^cP`wK*hTa9IpSS@-;Q+5#3{e@na?>F&wlzJG$b#aiM> zQS^Zz?J0i0QDA4G-6KL}BD@aV!seqm+bL~l$Fdn}g44}<;U~|zyNgS;XJ?ty`cn8G zlaNKmNK!q<93*$*MJ#;$q+8cugv7u1N~EwH@BzxJE)KLcORs)Jt&(FeQZD|FerN@P zr`AO3&|%tB_l;JHV$SlT6eMVH#4(9prsIXiF^DWGA3B|30SHpTN{QCKpyv^P$N;I> zZG$vH%Z=X{9C#IAFJ*haKCG9ktjB5vh+6-g&iH!?=>jBtS!an$R%y($OAD<*9}DTV zG617{eqN_4*lMHd5h_RTH74@Wob%?L(jkEw)Inm(P`d>1t348Jua_mn zjk{5d1Ci>1y+28@c8-#Va-81-8nLnSYF?~&t6V{_+J-2v^z^;amt1@?c?*l5=N_3Q z5k#8q??~RhzDF=*Mgn--T`v12U;@@!;VF8^aVM7=H0!ozo}suf^97S40F4HYXu1g3 zEjN`NQl7aEPM=ZzMvk4R?s+2 zFBKTI%;`HW&lRP8SDuV@{HjcmmYxa@Xn*%xgA|v3X#Qi+ehvwFc1f8J>)2aVkV?xP zd3dJ<6KEYwLSlYIIofU?Ev{c(cq_dSv?J-;CaSqv+-GTG4$_(3kNE0jj)tSQ6F?ln&ej{<@jvK>T3KW%?O6axT1`L2SPM6=sxp$lV3@>wS_r7-#%(3Ne#V>U}bF1F3 z-*B3A0rt;pBBREG7hqKY3YN2|8;*Etwg_Jw8yyb_IUY;9y;>K<2iB`1NpX>2*|ml% z{aTTYb#Na%+_s@sDeP@D;Z!c+@}KuT?bNAF(GGI0OL)uauf%l>mZOA7ah%fTuC~#D zOy!I`Y&0-)O5a(rV$b{25Cu2c>%qA?Iv?gyE%)UQGi)hnq$(b@%+TN^=UOFq?6gxmF(CL2|tyCg%0409Hm zEd;%Jl-W^XJxNl*(g|;g%(-{^+i-5rlU5`xbJ(_5T;<4qaE-3>eAaE`%W=&Uc!}_+ z!}M=br_J9UXXRc@PaWKk%zpur*a9@siGamNG)VLA{-O&i8)m!Aw@LYZd#-*(F+*b}NZB-+Vbg3i$yZ1^SrE&Pp%zeM7M7=557GfteG< zKr{OS*u7tqtLqNy6iHv=oQHn)n6zj~u=phd!!IWzy=3!wr}R=niRP|oqF|+mg}%Y+ zy2R?bSwYvPHx-AVmRJ7=<6cfT5j}vopZ4}cX`RFhBL&l5af+_`0l7rM#@!JR4VQWu ztDfUngZX}URt8{#2d1n908<%P!KtctEkGQ#5xxB{2~Jz7SiEw^r@ITxMYn-4v@U*f zJ#&)UjQX=|#OU@-28J$t`1y)#q zW(W)h-kZaf-_!$@43MxIPnuQDm7mv{^!2D1$9PN&l4G`EyH+xHU_mRefLB9pWbvn+ zPr6Q}?33N@Zk zI5HwqJBN-WJeVpgzV72&f~y8i)W@J~@|pe_hMwCVIw~T>tlp$jqdBR72Yuo6In3hK zD5~m}2cXna@TXQ^kW<(X8FYRq9fWLERYsU3y3Vz?E$ob9WZCX-JlW&9tpeB#c4 z77f~oC6aE~ITlagOGCH4fH7Cz9md?5K)WSdJcTy^Z?5KWm79K4vW`zpVoJvVLt`l3 z0s#%o{8;Bh|3U0&=R)Met%&hA^nwL6Lv&uc=Uul&=dJ*=->1Bw{;`N7PXqWm&9pFc zNx%M!Pxz?314KHZ47_iO^BmrrFS>geJ^5vCXENANI_9lU#&{{t&L2Ya5ybCqQ|_j# zkvC8Jpb}T6U1uiulb(?3WAjIM;LTqm0`9AP%~A%w@|TuR(jkbMDYLTKdHyM@SK;Xu zh836?9D)PRnwJ*SZ79%GAj$XY$z)TY!k#1on<{=(s>U+QxU{U{I+euYkyn&2q0A>s znb91guwn%%46ClReNSP&fFU(x1teBjeM?bJT5IzAdy0FnVOxc&*dq;u9RHPgU zlpG`k532TOn8t~P`WN$bp6&+p0r&QSqNwLicS(#E=jM8wWUJ&>Y|iyfh=dGa(mEwmbsx|^hLhH)FnqX3Y3U)N*i>TciM*wn*5Yg@HIb$or50> zz0W}+_>vazQ=zg(7ODa$veh?{Id&r#{jsl=1Ls>u$zO>=3pw)<&N6zogYmX_S1t*p zXC?<1G3&}@2mQ3*oi6&%%C5I~l$)+UOR=mn=`i+vOVIkVtUgM@@mc}M%xplLhejc< z-R6yM0}i>eTIJT?6nrOE*KYH6ugW=@+HyvZ84PuMWP0vtzE`$V1GHN_O zrMj|&bKgryqj1vH#1|#6Tq1=Okk4u;SDQBuvCCZMjijtbgWL=dM|kvf zouh0HjtXls$#R4rw{Md&_DG;7>?nYuM0-lyBPUhS3&8HBCC>>oCxG7Dy!PN&ADhJJ zxJQuYDiXgJqYMgXqfwPB@M@P$&fH8dkC{tk5Yps`*vGO9Z=okR^#fvDBD{J+){Tte z-{cE`rs{`kw0(jfXARnC3OQz{CRYAFXZMe=5-EBIq7uxb#-O>JKYjH%ORcM-7>^j# z+H@m$P^oKf`l+CFsI-QDr)^uwDjat552@!Z<6F^U*>l4(<|?`$b+zl z9Y{^TP*ya6PYunpdV#WaE`~v-zR3B6C$QV$Y>Wh;jW){HfYbszv{iz-7lfCi1#Q^) zZ-U6quLytc4zl>Fw+PH#C<>^>@}*!bqvC`q&ovMFmWga3e+ zIJtayPG02sJ*&&Cq{d1TAmZiCsfp8W&c`ch5&uHZG-2mQ3HIxCAmwtKC(74Y^ z8Zhj6er~+y`Mj%S&@=65+i~C159A~`eRO0(2S)9&jX1|*FSr#Bh_ux0_YZ4#4HNq@ zc2F)|TEMSU-JEU`RZYp0tH}wRNyml?d__sq?xzDSNh>NoUe6FZ|kacZi_<*}r|7%W;-cF@cm(5H-eL3?bz zozdNmBn`1p6$VaurU&vLwbryQ?dz*|j0}mv=W>uuv0M!;c2@{UPZgf`TMue3%^Om* z?+{o`2pk^wFW%Sm7qir}ZSaO1-AUI_sw}mz2ak2Mdy?_vOic=7+xNbVS3EDR=L8ch)u3U#_wD_io$5h%>JIL61@^(JKt0cQJqHf6>W!Pgu?AueRPaSF zORrJq#wS5pLtzswVD7R$O4G^VVS#^A*$WG+lf|Dep*4hkZdF6*tSP@hKpi(7IFR}7 zENV0J(YaSInwPg~z?CnSgNtAzL4eu485QbKp7a9*8GgEW#I@M|!{0_Sk1-hcjvI8A zwPX|!HBC%-0Y|kvbpDWa^dtPQ}JAPfy0S<1&)oOIHayZl~-wq_Gy)h}a zUU3$Xka%*V6Ru0Hcbx8Ol#VB?aPxbt-hN|5b8NAd36WCB1v4M3MUf8hJDQPc1+7iu zj)%UwL1~AZ>QxAPH>?T2o9)9JJvz^0Bmh~&FVl4<1r*FVlp^PfVAw=JRn{HJEr6o^ zu3a&K|AeqW?d{#}fM{YKJI5}@OIq88UN*FNtUA9)nF;Q_!PV}Jj^smxl{R|#C!Mp3 zza{tja$BOXs%J>Z`h#;Dp>!fX*yUZea>fop8yq0RZ&XyDuTD9WwQT0>(oN#J;(nE-zCq(3aJ z8yXD=pNwnS<|i^G9)h86IgK^1JNUnZ`evSrR8PGnp}vYAvmDAV=O|8L^6XS-st&h+ zD-~hixRk0OKg-S~*9CspqJ7TsrKZEm)9BWHhS>G6xDsQc(EPs5pn>t>mjl=1Ez11jA`nmEuKDzS zUrnvB=zoE{7z6cmqZI&^@8pem8PK5db{$wNzF}AefN<~fswbPKGh2gUoEx##)#iy$ zanD7i?mj(5m`Oze=BhVn4%N<36)c7N3IQCxU9IzMvk<%>3nDuJ2K{2PF1R$h;jsA- z+Cd*ZyOB^>VqvIYVTE<}M_>3OYf8i&@?91TE-z#>N~$zSXNqktqby&>eYwLFMbz1-3HRM`Zda3wpQ03SuKW@qqx*z zzf90g_%YT-xa=K2ZXg1rTfHMr{LQN69XYxXV4$96>0q<$Ah0a`Q;>;2K_uB8ZeN^A3ZwL0QCEaZvWM@BhR8Q3!o#N zl}k9!aBakr?QhBtmMEbTEdBAI%jK^c!Q%I;p0dL*?iHlp8^z z(CjI$x7iZ_46{e}wmYI6nLX{F95U^F*SF~e^vR(vj_Y>4w-z@=^KxH2oQ(X_EuKK= zKr86lf@~uK7B9O@V_E5e144IX)!n}PCRy^4HvO5@xXRV(TDF0)(X8%78;~`yYk=u@ z_1B#nlaa-zvJ0&MSAT)%o;ts789i*aZyJU-hgT(P*Lu|*%y-A;+Mt_5#NS`X++-JW+T$`Z0&_lF>p{G6No2eAPr z1EoSG_xXR)n!}Al5oyGU84Mfj&sK~lhHpS5FA@*LB>1YJR0Q@h0Hvl1(%UY-j!|t^hyNZantr+`KxzRUahEqI%lOLFTD2dgK8JtC8eFqnPm-ki=Emi<+JFoWkoET~ zs%IGJvk#vpJXhRPs$S`)?kpo~{iAL5_8Tyu=N#K*1KF`AS2&JR(IPH71!|PGh z|EhCRO?r4%%(8-_3!tLZKNy~D27!i~P{z2M_>9tMOPM zm`R?=I&j&Rlj9WZ%M314XH!Ti8G5(rL zjCE|ckkpA+{g>N!L?Z5*0yJ*$_hvb*Y}!FrxaXPE?o8RHzOV$Jv-srp^F&iJZJau> zHITR3#%m@*u;t6k6<;WakRq4?&g!kSbFqLH!uX|8Ns0Oa7S0?bdz9d#&Vh9KcJ?qxl5ns0Z$b)`#CZ>-&%5C!4=^h@QM z^y~@Af`}3|==pU3gdhGzDhAjcsI{=~mT_6xMD5v9Hj}ygb;c)v53NQQEE2xE+B_^c z_O`L)|NW?tSU2tia7Iu_0Q}C&RoocQ6?8$sX|^#0?`#K3f)A^Pp8^j6D|rW$bm8nz zJi{r80?>0Z71(E(#n1z!1;%2C=U*jPV9=9d>TO9p4Kk&I*)l+3hqQ8;o_bAG+ab2h zONUv<-SsOMT6N3~QJ%j(Br8fw&vT$&w=lOn*>GKkBJT%PfWa^;1w;7MSwnVYXEblb zy`1Zlf23nG@FfO$<%}xC8qxJcFs~FGmU?piOja*$ZEIL%{VikQqrj%QKqb)4wMdx> zk*XvE?5MpI>seV`1MZi<_;!Se2OEe5 z+2-cwVTs1vyZusSit0eH7c#>a8TJkD%D;f-5mptffW|Xac(>t{_>)y?0u`++Fa+h8 zp5Zt$ZTh*I3gB<>MJsSL>oaF6VvazUBfC%<%0nW>aZ>|3 z`%!BtsTFBu#nh%BPb>_O8v@jjk#UicBLu!PAKln)Dz@^N^dz+YLR7|DJUCBjLRg|K zCb$nw`+o-ec#VPy)<;gLcemJXBowgn_oxJS+hzTJx2H&CRItGaOy;}YLcRW%k60G- zBbg_QY5I@RT}G(Gh|Y83AJ|Jc!)p zgQtX>ssD zc*hrc;*hN@oubzA;@v6N8`W%`X&c-4dWh32Mz?1d)#t<-E{@FRn2tS6{XghhI+EtX z>ZJEikWs5#+h*Fop?e71+@rOSEZ^E_`G%Nd`qJX#^DNrP(4xn)eD~OK-c z`mGvU=omBF$V5;fT@j=3R?Kz4qb<5!FKEz_TMb@n2}^A|%u?c9%q9gJQq0XwhS7Cn zJt1rRz-W3Z;=)@mMbgaM>@YZVi-N}RsmkktuFygYF%lf4)vaxCALUc_jhAf;qtl-V zUv$K-CCnA-&gXCa4w8b`Fu>RaR&BVRkS2wF`+g5&#n7mwtlHu`5<(#11BjH3iTmEjv z7P;Fu2iDjfmx*lV7FCzlhkc98Pjqk3S%ES7Cm7Z7Q066rddikU;UWjuHehlhC9q`{5Egy5Zx;Gg&! zkNd2_G9MQ36Yx>y+ZgfF+Ifk)2#yPSw0g!T%g+#jKkGbnMm)CQL@#>hj1NAdjgp0} z>e(;zVI&dVk}63qfAFo&cJp2dDxy4rAMM!53u-QVXb$A-n z_dPScRHRnK*DRK0B|(}0^5+BF;ojOIbrEC548h&Ipp#OSsbwvye^%%7^Xv2vKISp* zzf-nKxK9yDHBk9YXpoa&PCrpkyF@Hh7l+t$)m_<&aDwzw?VC)29HHAQE%QAOZ&iaG zs~5OS3y&g@KcfFJ$3WA>_YOm|F4b}?-{#r)PMksdtg&Za_6$xCosbPkmP5 z#n*NI@>sq0jU1+>{T+MSGal*JiLLX6%db#E^gpHp1N)wt(S!uR2~xKR#RYUqR0vuZ zE2|y8z{Y-|>$cU1ahROM6+Wk@H12a>OPid@BE$Ql#{^6uA%88lrzX*2zv$1kCTh7Z znVIAY-Q)sL^UnW1sJL(*F|LoBG2^%-;xkR5aTdx85q=*Nj*YB;@Qe=pEkc}Ea{SRH z3_oK+>I6wzj#vf?7i|_}+c!B?xcI3WpUmB>V;9cp!8}~@UZ<>jefr@7s&yfJ;QEsZ znagOO6{p08)Pa{VhW(}6J1;7iHay8!E8M#}VE|Qo4wW}4++^S1`lnbpsz&GH)wJs1 zZrw#&9nr5W&c;FB{O2zskahhxv@}R|LiuCbT0VpcYD%16-kZ>rK~+j{0PD%-)+MwO zF2_7rEqj08i)?)Z9i(*SiZyh!lRd+!Y1lhRk)~2UxemA9o}wrhKYLDZlO|K^`Q-Rv z{3W06M7KSd-IL+mPT3Yeip_18Nah?aZTp{NY>NB{SamWjCqlP9E}B5gX^TarHo~h0Ecz>zS@fZLnZ6LczXox_Il5(U)_Vt4wn> z#Z#-Q(}Q1rc#qqHZbYhrb6KYfIWY75!CJUb5MSktUO)#uR)ijkoqE+T-ImL3`u(Ue zG1j&&rfY`fSNjZ~az$Nk71lZDMfrMNKa_f%a&KnwSVhzDxz^3-BcwDl-MUO=kNMzJ z=j#;Q25PpdXE@avA1HKiA_$oB+;G87+TqeH3DHbXQq4OR$UOXJ?L!u*TK+k(o4<^H zxl0Pl7$)1+*Po4Q{%F@PgG}D%u3r4KW(Jv=FY|Nv?4ngU-n@Qfl0#o5hSS&ua4Pi7 zuU-YUG?_J^Fh8kq>#iB*l052GNB!o6MRDbI_G!HSz~q#}ljASoD--Zwmi)Xc+xIbJ z0?D@Wj$I!7ir+QCj=l8qn?3v?VxveYW)Gj7H2pj#?C*jf^x)(20J6BJe);l zHrY*Ftn5wV#3cu^F?Dkd4&{Cs)+v!N9lOCD0f%GTcEHyIo914V>t`DxTk#(a3FdVgSq^al z_u4@+a+$Tv8fiPI;N9_Ea=UHEF&q;MbwXRU@d# zgR`Jpv$I&tt%ua_&Y0%^Y7_2aN*~)UY)YVnTIiGor-fLA1Q(B{M0JR!=w1Pc?rVs* z!KmixIi&wI)wwWfu5_)K|41dYULoSZNEy+3z9@iTwVd|0%QIr)Xc11lm>x3YGD1P2#Ifb%?pGs0#9B*Ke07zPa3Kj4M`vJ1<#9NxX>ag zayPAJa~x}=4@HLIxRIB>O?~P9Jn1&Re7GTDP)ChnrAfxe*4G}-R_&?7oIFH^FS$%J zKja#ekk-}{W?q=wbp@DxA*sP&E>4vyVb$L0f`x4YaSFE5GH6s`ZAtoR?;7({jt zk-FTB71e@|AC)x?S+uBr^_?PcVIyoJx^be7frJ)&$8)=Q8J=^6jltuHa|POzR7m>I zfzcuL2_6@RZgm^6TJl33SmDe>>eejRvmIL}LQ?iTB4~Y*(Fk|YpV!mwj(Dr38{uo3 zuHDgdyp_v?kxL|LXzct(-^$@K5P!BA(y$0oja;j%NGX++949z3_nYhd;#}enOqCZ;?d9|s;vpz@< zQdG=y`pMezkH+ft3HxV%)obCKlcc*2EL1BTK}0FVx(US}h7`sTBbG%zn1hZ%GOSp= zQujYUzas&ueoMH+HK!+a2Xa7m{UM+=s0EhOZyQ%qzHG6o@j_gX#7XnGSKMbKRLM;Q z)`cOeS9(4Y5bnnr^_6x}!mY-0?`5#?_x$VMDE{}l&Xd)q+Q%B5hm3~$x)Ef*g<=0y z?>w^E7Z2{BL@gbK@t<Bj-E5o7d>wyuZM?gYW^ZP%duNTy)Pv2d<(PFP z!7RC!q>3JFEW3=zlgZyh6}Wt__zrc5BFyY2b;ny}n&;)%W$zx5daW!WYeKAt_dOlb z^8_9psmFBwi~3~>%G8tu=tgk{JZgU$M~#1?ZmFm041UK8ATUZ=4~%Eqn!zN14TSv*`W)yKCA|z+u_0 z-^bl9Rv1?i_Z68)*bD)m@fk4G-8L2*+hR~IpEO$No^JXQelv6Z6lphitjvsw)BEo!O@=eIqW-5W>taN8R z6Z-{i(_I2t+x9Q6O6`-#fh}*f!Vi0kb!;;F!V(I1?&vdf5;OYqt@=0@u})ePJBV0^ z%qQ2~nv=2hq+v*Xc=EzL>vG@^0B!AYXv@nD(h@g(j7>lmLq@!X^qI^_uL-oAWN$L2 zUrP|m`^43gNac<9&pPcm4b4bH;+FFf1H=7H+eRi?(46!JptMRtlb=@BA3I{Y4pqdqJA-(jJf<5ru1z9-s5?yO7 zzC2@TUTHB%c>zD)T&L%0&%Io65#ne?2@?eUN%$#f5`Ft-Nk<*x5;A`fBwNJ#k^}Ad zL8=oxdmP72e>Ny@bPx^6LV?^+^&f@MGy>q&RB9cJSw@Ef*P=ei6e&L%6rg3v$>>de zByRlsW6=qugHe9>P)z9VA+I|{_6=Jod2xlawOnPtPzKI~qAXUgrrlz&BzqM{ zwS0X+`vq`rnNDBzb%@EmmS#Ka=m$OOh}ncSzwP|XE=2V^9I!INPO+hNNU$p=I~8#! zjz1jaBT~#qdU!&3_}}PjK3lxkuQvM(+%ufw@}&jFV)begy2(kA4n@0Kzkk1Q4_2pW z4}%dqzcHmsrkELHt{kZgj9UGv_DEh2{b@&lZOa1>)_1xY@?YxA?@$ z#jJa@LkFGPvXgws0zOpn)@YVYv-a60{VY=pbIzb+3!@6Q?Yw7PK&tr?tG+~K(6zuw@c6-n{xys@MNSpe&dT22vK zM11yrG5+4J?U^sz)6DkhXT5`UTMPBu%l>{o`dv~5eNcCm)WB^2v#%&cN2h<9X1-jK z`rbri_z?uZg52G>*1t~WeuL!`4!j^Xm}o0U&_mLh?2rag73#nL!bjh*HLzAZO7^@b zeyU>8D_O+}3ZeF%4r6=XV5Dz+`ngo}s#5#>YO{k~MKd?}Jk*!*91vWCp4U*UaZ-2I zhZLsinaeJ;NDP>AqjFb&7vPHpX4;};(b3CR@-a`1lfYt)i!*FmcBT?7l z=Vgrm&r6^xn^W(Muzvb(lm=oMUwcn{Dgybo`x{N(8o_Qx&k8@Oax5185B+zKj0h2QPPUU+=c6tYw~ttnGmp!8Yc zS?j`e@_aJr9}tTmWi728eHHN5lI$#jmjIzqL!z&meHyUF*Yii%tAzS~-_1G(FtFDd zZq&G(_}BBH#P7L^y{kYY-UV-KB3X~nifWLksB5gFH{4DO@}|->Rz0r2zd^=Y9LbBo ztpp0lu`Gj1eb;6;BJk}#opk7_aU=m}47`JwI~qPP;;BpmOpOKq1}3Sl!W$^A14$ zNLGFP*`|Z3Xn{p@657&>N!vVWDP!K6T5@eAn4vP-cJH7FZuPC8n#qjlqGx@Rntg&5gdL1)2gEG9vcW1OS~T;PI9_@Iu#JotA%1qoKSevZ zeOI6-4LI7(_Tu&T0Y$^!D6JI(tP$}nFwzGyMS(^qr%QzLl}eY-8p-V;-oN8LZFC0I zdvWUV%|I9<8xnt0?j{iSO4Q#5&^X9c%Lw-p(k>lV-i>f~>aq%`4--j0#GP=VfLb@} z-(mIOa9GU2wjMH2c+f)rJJuon-CLV=ef{)A6P$uBTKvOvelqIrlnq=xm-Nt_`t=PjB$<+0o z*q3Uy>Gyp=4UP4*5pKP9onU#gEuCeh&u&sJe;3imS~#tFy3ZH?pmUu!cRlU!hj?i^ z`iF>=j<2Z1l253h!I9kO1#5j@1c4%uc(mvr#rq8}eTa*J}0( zvc^0hXIk84WdALg+vV}Z^rSHejkq#2a-0>RN7UQ}`3_q0N+oCKA;bwI8(BdLqTAv^ za4s^QI|5=}Pg#~Z%@&P-iP_6Ob|F~vm^^vhnuNaQ4ZYW(pn}5g?cGCnKuhj9;z3oc_~Jc)+Y@_=u(Mj zwVki6{U)|yy%C|sF?nM>wC2qvh`LOUf5!>5DL+MnIO9fG^PG7ABfe0d0c`Aa>;>!4 z8j~ylW06#^k=O26vMxT1z<+1=oQ)n8L28`3o$x;FoOuF>H@HCP2Aol*lO~E=dFR;b zKOg7`j>%Y-KH`j3r$T~e$P#1Nx0oQ5#$|g|xRCtM&_)Q68x@ZQl724{hm68032B&V zCRtKpSu4)x4U@t3W13lp7L}5s9z;pV-f0<4BI-b&(B^tV|8TOF0_%%8+0`8^5Fq+p zQca=LU^(2r6Tz}l-f|lxT2VDvK#Fp6_;7>Ue$a&rN;6Ba$ z5HZ^)O9%SA6`zjfy-ubXK?@~gXp=nybELuzpw=M0-ajofAAOQZXF!8tQ2TLx%{Rtk zgY6@9!ViW5WI_%W3)ySiyQd8}Hw(goi0yL4zNbUBhQ1X^mtuNzl|lFg&F661lUlSS&CIR#$)-6NR^M8LHgziDI#XvN9oshDK;Kl>R z1KZmPEY`{t7pvW^C6=D~D^&jw{0*!mfa=HOS+A6Id@rjTGcV1^4&Jwoi`&7@C&EIw z$5Wnv>Z)7l(zg)zt8sh+up+rqL0bP_W?4Lf^oslK&~K-Ox(Sy!!34K^K=P(s(1HLJ zy*jdWl+j}#_341|?Q=oDVpNsv%*e(@l)e`waHa~3B&1=W39Fbv45lPfg$0bkv`0ob zigEkZorJQqjv-!gzLRufp$m7k0+t1Y&)ac`QU08h{xmPC{#sFAb9BAHP6`v5dfSsu z&a3{qR@UB6*X`nCbF0}yAoUU_NJwddKkP_rP%^}R8A4uGuCBL{Qt?+I$2^>sZ{G}w zIHNlmIFAXn7bRv?6zc=0QAgtokKkx(vnO5-=kXP~9bVa4YA7R+I#SPlrW_-PSa#fh zO}Ke7=-sQTniRRUR9)XzSMOj0X`TH!O2eIP4w{p){6VP@?nl)f=>_!R&^EEr;E2hbob1&2 z98#Fss>KB*lWY;@7wnlt61>D1e%(E83-;Iy0S`yYb#wxg@VRF)OB!Ba7ChuevrOPCZ{Qnn>K;I$& literal 0 HcmV?d00001 diff --git a/media/logo/catalyst-logo-dark.png b/media/logo/catalyst-logo-dark.png new file mode 100644 index 0000000000000000000000000000000000000000..971941c401021e0f93445e21c3deda822ecf584e GIT binary patch literal 27407 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

fHAvVu|lJ_siew8#B&lrxX5`=R#)&@6YRK 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 Vz`LTy511z8ft-qLskCv>e*?M?Te1KE literal 0 HcmV?d00001 diff --git a/media/logo/favicon.ico b/media/logo/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..a19d461df92fc3aed544a54c9d78873f9e2e604a GIT binary patch literal 15406 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 Date: Fri, 2 Feb 2024 11:32:42 +0000 Subject: [PATCH 03/16] Update GH action --- .github/workflows/README.md | 198 ------------------- .github/workflows/deploy_website.yml | 61 ++++++ .github/workflows/pr-close-signal.yaml | 23 --- .github/workflows/pr-comment.yaml | 185 ----------------- .github/workflows/pr-post-remove-branch.yaml | 32 --- .github/workflows/pr-preflight.yaml | 39 ---- .github/workflows/pr-receive.yaml | 131 ------------ .github/workflows/sandpaper-main.yaml | 61 ------ .github/workflows/sandpaper-version.txt | 1 - .github/workflows/update-cache.yaml | 125 ------------ .github/workflows/update-workflows.yaml | 66 ------- requirements.txt | 3 + 12 files changed, 64 insertions(+), 861 deletions(-) delete mode 100644 .github/workflows/README.md create mode 100644 .github/workflows/deploy_website.yml delete mode 100644 .github/workflows/pr-close-signal.yaml delete mode 100644 .github/workflows/pr-comment.yaml delete mode 100644 .github/workflows/pr-post-remove-branch.yaml delete mode 100644 .github/workflows/pr-preflight.yaml delete mode 100644 .github/workflows/pr-receive.yaml delete mode 100644 .github/workflows/sandpaper-main.yaml delete mode 100644 .github/workflows/sandpaper-version.txt delete mode 100644 .github/workflows/update-cache.yaml delete mode 100644 .github/workflows/update-workflows.yaml create mode 100644 requirements.txt diff --git a/.github/workflows/README.md b/.github/workflows/README.md deleted file mode 100644 index d6edf88d..00000000 --- a/.github/workflows/README.md +++ /dev/null @@ -1,198 +0,0 @@ -# Carpentries Workflows - -This directory contains workflows to be used for Lessons using the {sandpaper} -lesson infrastructure. Two of these workflows require R (`sandpaper-main.yaml` -and `pr-recieve.yaml`) and the rest are bots to handle pull request management. - -These workflows will likely change as {sandpaper} evolves, so it is important to -keep them up-to-date. To do this in your lesson you can do the following in your -R console: - -```r -# Install/Update sandpaper -options(repos = c(carpentries = "https://carpentries.r-universe.dev/", - CRAN = "https://cloud.r-project.org")) -install.packages("sandpaper") - -# update the workflows in your lesson -library("sandpaper") -update_github_workflows() -``` - -Inside this folder, you will find a file called `sandpaper-version.txt`, which -will contain a version number for sandpaper. This will be used in the future to -alert you if a workflow update is needed. - -What follows are the descriptions of the workflow files: - -## Deployment - -### 01 Build and Deploy (sandpaper-main.yaml) - -This is the main driver that will only act on the main branch of the repository. -This workflow does the following: - - 1. checks out the lesson - 2. provisions the following resources - - R - - pandoc - - lesson infrastructure (stored in a cache) - - lesson dependencies if needed (stored in a cache) - 3. builds the lesson via `sandpaper:::ci_deploy()` - -#### Caching - -This workflow has two caches; one cache is for the lesson infrastructure and -the other is for the the lesson dependencies if the lesson contains rendered -content. These caches are invalidated by new versions of the infrastructure and -the `renv.lock` file, respectively. If there is a problem with the cache, -manual invaliation is necessary. You will need maintain access to the repository -and you can either go to the actions tab and [click on the caches button to find -and invalidate the failing cache](https://github.blog/changelog/2022-10-20-manage-caches-in-your-actions-workflows-from-web-interface/) -or by setting the `CACHE_VERSION` secret to the current date (which will -invalidate all of the caches). - -## Updates - -### Setup Information - -These workflows run on a schedule and at the maintainer's request. Because they -create pull requests that update workflows/require the downstream actions to run, -they need a special repository/organization secret token called -`SANDPAPER_WORKFLOW` and it must have the `public_repo` and `workflow` scope. - -This can be an individual user token, OR it can be a trusted bot account. If you -have a repository in one of the official Carpentries accounts, then you do not -need to worry about this token being present because the Carpentries Core Team -will take care of supplying this token. - -If you want to use your personal account: you can go to - -to create a token. Once you have created your token, you should copy it to your -clipboard and then go to your repository's settings > secrets > actions and -create or edit the `SANDPAPER_WORKFLOW` secret, pasting in the generated token. - -If you do not specify your token correctly, the runs will not fail and they will -give you instructions to provide the token for your repository. - -### 02 Maintain: Update Workflow Files (update-workflow.yaml) - -The {sandpaper} repository was designed to do as much as possible to separate -the tools from the content. For local builds, this is absolutely true, but -there is a minor issue when it comes to workflow files: they must live inside -the repository. - -This workflow ensures that the workflow files are up-to-date. The way it work is -to download the update-workflows.sh script from GitHub and run it. The script -will do the following: - -1. check the recorded version of sandpaper against the current version on github -2. update the files if there is a difference in versions - -After the files are updated, if there are any changes, they are pushed to a -branch called `update/workflows` and a pull request is created. Maintainers are -encouraged to review the changes and accept the pull request if the outputs -are okay. - -This update is run ~~weekly or~~ on demand. - -### 03 Maintain: Update Package Cache (update-cache.yaml) - -For lessons that have generated content, we use {renv} to ensure that the output -is stable. This is controlled by a single lockfile which documents the packages -needed for the lesson and the version numbers. This workflow is skipped in -lessons that do not have generated content. - -Because the lessons need to remain current with the package ecosystem, it's a -good idea to make sure these packages can be updated periodically. The -update cache workflow will do this by checking for updates, applying them in a -branch called `updates/packages` and creating a pull request with _only the -lockfile changed_. - -From here, the markdown documents will be rebuilt and you can inspect what has -changed based on how the packages have updated. - -## Pull Request and Review Management - -Because our lessons execute code, pull requests are a secruity risk for any -lesson and thus have security measures associted with them. **Do not merge any -pull requests that do not pass checks and do not have bots commented on them.** - -This series of workflows all go together and are described in the following -diagram and the below sections: - -![Graph representation of a pull request](https://carpentries.github.io/sandpaper/articles/img/pr-flow.dot.svg) - -### Pre Flight Pull Request Validation (pr-preflight.yaml) - -This workflow runs every time a pull request is created and its purpose is to -validate that the pull request is okay to run. This means the following things: - -1. The pull request does not contain modified workflow files -2. If the pull request contains modified workflow files, it does not contain - modified content files (such as a situation where @carpentries-bot will - make an automated pull request) -3. The pull request does not contain an invalid commit hash (e.g. from a fork - that was made before a lesson was transitioned from styles to use the - workbench). - -Once the checks are finished, a comment is issued to the pull request, which -will allow maintainers to determine if it is safe to run the -"Receive Pull Request" workflow from new contributors. - -### Recieve Pull Request (pr-recieve.yaml) - -**Note of caution:** This workflow runs arbitrary code by anyone who creates a -pull request. GitHub has safeguarded the token used in this workflow to have no -priviledges in the repository, but we have taken precautions to protect against -spoofing. - -This workflow is triggered with every push to a pull request. If this workflow -is already running and a new push is sent to the pull request, the workflow -running from the previous push will be cancelled and a new workflow run will be -started. - -The first step of this workflow is to check if it is valid (e.g. that no -workflow files have been modified). If there are workflow files that have been -modified, a comment is made that indicates that the workflow is not run. If -both a workflow file and lesson content is modified, an error will occurr. - -The second step (if valid) is to build the generated content from the pull -request. This builds the content and uploads three artifacts: - -1. The pull request number (pr) -2. A summary of changes after the rendering process (diff) -3. The rendered files (build) - -Because this workflow builds generated content, it follows the same general -process as the `sandpaper-main` workflow with the same caching mechanisms. - -The artifacts produced are used by the next workflow. - -### Comment on Pull Request (pr-comment.yaml) - -This workflow is triggered if the `pr-recieve.yaml` workflow is successful. -The steps in this workflow are: - -1. Test if the workflow is valid and comment the validity of the workflow to the - pull request. -2. If it is valid: create an orphan branch with two commits: the current state - of the repository and the proposed changes. -3. If it is valid: update the pull request comment with the summary of changes - -Importantly: if the pull request is invalid, the branch is not created so any -malicious code is not published. - -From here, the maintainer can request changes from the author and eventually -either merge or reject the PR. When this happens, if the PR was valid, the -preview branch needs to be deleted. - -### Send Close PR Signal (pr-close-signal.yaml) - -Triggered any time a pull request is closed. This emits an artifact that is the -pull request number for the next action - -### Remove Pull Request Branch (pr-post-remove-branch.yaml) - -Tiggered by `pr-close-signal.yaml`. This removes the temporary branch associated with -the pull request (if it was created). diff --git a/.github/workflows/deploy_website.yml b/.github/workflows/deploy_website.yml new file mode 100644 index 00000000..4f6a4d7c --- /dev/null +++ b/.github/workflows/deploy_website.yml @@ -0,0 +1,61 @@ +name: deploy-website + +# Run this when the main branch changes +on: + push: + branches: + - main + # If your git repository has the Jupyter Book within some-subfolder next to + # unrelated files, you can make this run only if a file within that specific + # folder has been modified. + # + # paths: + # - path/to/subfolder + # Trigger the workflow manually + workflow_dispatch: + +# This job installs dependencies, builds the book, and pushes it to `gh-pages` +jobs: + deploy-book: + runs-on: ubuntu-latest + permissions: + pages: write + id-token: write + steps: + - uses: actions/checkout@v3 + + # Install dependencies + - name: Set up Python 3.11 + uses: actions/setup-python@v4 + with: + python-version: 3.11 + + - name: Install dependencies + run: | + pip install -r requirements.txt + + # (optional) Cache your executed notebooks between runs + # if you have config: + # execute: + # execute_notebooks: cache + # - name: cache executed notebooks + # uses: actions/cache@v3 + # with: + # path: _build/.jupyter_cache + # key: jupyter-book-cache-${{ hashFiles('requirements.txt') }} + + # Build the book + - name: Build the book + run: | + jupyter-book build . + + # Upload the book's HTML as an artifact + - name: Upload artifact + uses: actions/upload-pages-artifact@v2 + with: + path: "_build/html" + + # Deploy the book's HTML to GitHub Pages + - name: Deploy to GitHub Pages + id: deployment + uses: actions/deploy-pages@v2 diff --git a/.github/workflows/pr-close-signal.yaml b/.github/workflows/pr-close-signal.yaml deleted file mode 100644 index 9b129d5d..00000000 --- a/.github/workflows/pr-close-signal.yaml +++ /dev/null @@ -1,23 +0,0 @@ -name: "Bot: Send Close Pull Request Signal" - -on: - pull_request: - types: - [closed] - -jobs: - send-close-signal: - name: "Send closing signal" - runs-on: ubuntu-latest - if: ${{ github.event.action == 'closed' }} - steps: - - name: "Create PRtifact" - run: | - mkdir -p ./pr - printf ${{ github.event.number }} > ./pr/NUM - - name: Upload Diff - uses: actions/upload-artifact@v3 - with: - name: pr - path: ./pr - diff --git a/.github/workflows/pr-comment.yaml b/.github/workflows/pr-comment.yaml deleted file mode 100644 index bb2eb03c..00000000 --- a/.github/workflows/pr-comment.yaml +++ /dev/null @@ -1,185 +0,0 @@ -name: "Bot: Comment on the Pull Request" - -# read-write repo token -# access to secrets -on: - workflow_run: - workflows: ["Receive Pull Request"] - types: - - completed - -concurrency: - group: pr-${{ github.event.workflow_run.pull_requests[0].number }} - cancel-in-progress: true - - -jobs: - # Pull requests are valid if: - # - they match the sha of the workflow run head commit - # - they are open - # - no .github files were committed - test-pr: - name: "Test if pull request is valid" - runs-on: ubuntu-latest - if: > - github.event.workflow_run.event == 'pull_request' && - github.event.workflow_run.conclusion == 'success' - outputs: - is_valid: ${{ steps.check-pr.outputs.VALID }} - payload: ${{ steps.check-pr.outputs.payload }} - number: ${{ steps.get-pr.outputs.NUM }} - msg: ${{ steps.check-pr.outputs.MSG }} - steps: - - name: 'Download PR artifact' - id: dl - uses: carpentries/actions/download-workflow-artifact@main - with: - run: ${{ github.event.workflow_run.id }} - name: 'pr' - - - name: "Get PR Number" - if: ${{ steps.dl.outputs.success == 'true' }} - id: get-pr - run: | - unzip pr.zip - echo "NUM=$(<./NR)" >> $GITHUB_OUTPUT - - - name: "Fail if PR number was not present" - id: bad-pr - if: ${{ steps.dl.outputs.success != 'true' }} - run: | - echo '::error::A pull request number was not recorded. The pull request that triggered this workflow is likely malicious.' - exit 1 - - name: "Get Invalid Hashes File" - id: hash - run: | - echo "json<> $GITHUB_OUTPUT - - name: "Check PR" - id: check-pr - if: ${{ steps.dl.outputs.success == 'true' }} - uses: carpentries/actions/check-valid-pr@main - with: - pr: ${{ steps.get-pr.outputs.NUM }} - sha: ${{ github.event.workflow_run.head_sha }} - headroom: 3 # if it's within the last three commits, we can keep going, because it's likely rapid-fire - invalid: ${{ fromJSON(steps.hash.outputs.json)[github.repository] }} - fail_on_error: true - - # Create an orphan branch on this repository with two commits - # - the current HEAD of the md-outputs branch - # - the output from running the current HEAD of the pull request through - # the md generator - create-branch: - name: "Create Git Branch" - needs: test-pr - runs-on: ubuntu-latest - if: ${{ needs.test-pr.outputs.is_valid == 'true' }} - env: - NR: ${{ needs.test-pr.outputs.number }} - permissions: - contents: write - steps: - - name: 'Checkout md outputs' - uses: actions/checkout@v3 - with: - ref: md-outputs - path: built - fetch-depth: 1 - - - name: 'Download built markdown' - id: dl - uses: carpentries/actions/download-workflow-artifact@main - with: - run: ${{ github.event.workflow_run.id }} - name: 'built' - - - if: ${{ steps.dl.outputs.success == 'true' }} - run: unzip built.zip - - - name: "Create orphan and push" - if: ${{ steps.dl.outputs.success == 'true' }} - run: | - cd built/ - git config --local user.email "actions@github.com" - git config --local user.name "GitHub Actions" - CURR_HEAD=$(git rev-parse HEAD) - git checkout --orphan md-outputs-PR-${NR} - git add -A - git commit -m "source commit: ${CURR_HEAD}" - ls -A | grep -v '^.git$' | xargs -I _ rm -r '_' - cd .. - unzip -o -d built built.zip - cd built - git add -A - git commit --allow-empty -m "differences for PR #${NR}" - git push -u --force --set-upstream origin md-outputs-PR-${NR} - - # Comment on the Pull Request with a link to the branch and the diff - comment-pr: - name: "Comment on Pull Request" - needs: [test-pr, create-branch] - runs-on: ubuntu-latest - if: ${{ needs.test-pr.outputs.is_valid == 'true' }} - env: - NR: ${{ needs.test-pr.outputs.number }} - permissions: - pull-requests: write - steps: - - name: 'Download comment artifact' - id: dl - uses: carpentries/actions/download-workflow-artifact@main - with: - run: ${{ github.event.workflow_run.id }} - name: 'diff' - - - if: ${{ steps.dl.outputs.success == 'true' }} - run: unzip ${{ github.workspace }}/diff.zip - - - name: "Comment on PR" - id: comment-diff - if: ${{ steps.dl.outputs.success == 'true' }} - uses: carpentries/actions/comment-diff@main - with: - pr: ${{ env.NR }} - path: ${{ github.workspace }}/diff.md - - # Comment if the PR is open and matches the SHA, but the workflow files have - # changed - comment-changed-workflow: - name: "Comment if workflow files have changed" - needs: test-pr - runs-on: ubuntu-latest - if: ${{ always() && needs.test-pr.outputs.is_valid == 'false' }} - env: - NR: ${{ github.event.workflow_run.pull_requests[0].number }} - body: ${{ needs.test-pr.outputs.msg }} - permissions: - pull-requests: write - steps: - - name: 'Check for spoofing' - id: dl - uses: carpentries/actions/download-workflow-artifact@main - with: - run: ${{ github.event.workflow_run.id }} - name: 'built' - - - name: 'Alert if spoofed' - id: spoof - if: ${{ steps.dl.outputs.success == 'true' }} - run: | - echo 'body<> $GITHUB_ENV - echo '' >> $GITHUB_ENV - echo '## :x: DANGER :x:' >> $GITHUB_ENV - echo 'This pull request has modified workflows that created output. Close this now.' >> $GITHUB_ENV - echo '' >> $GITHUB_ENV - echo 'EOF' >> $GITHUB_ENV - - - name: "Comment on PR" - id: comment-diff - uses: carpentries/actions/comment-diff@main - with: - pr: ${{ env.NR }} - body: ${{ env.body }} - diff --git a/.github/workflows/pr-post-remove-branch.yaml b/.github/workflows/pr-post-remove-branch.yaml deleted file mode 100644 index 62c2e98d..00000000 --- a/.github/workflows/pr-post-remove-branch.yaml +++ /dev/null @@ -1,32 +0,0 @@ -name: "Bot: Remove Temporary PR Branch" - -on: - workflow_run: - workflows: ["Bot: Send Close Pull Request Signal"] - types: - - completed - -jobs: - delete: - name: "Delete branch from Pull Request" - runs-on: ubuntu-latest - if: > - github.event.workflow_run.event == 'pull_request' && - github.event.workflow_run.conclusion == 'success' - permissions: - contents: write - steps: - - name: 'Download artifact' - uses: carpentries/actions/download-workflow-artifact@main - with: - run: ${{ github.event.workflow_run.id }} - name: pr - - name: "Get PR Number" - id: get-pr - run: | - unzip pr.zip - echo "NUM=$(<./NUM)" >> $GITHUB_OUTPUT - - name: 'Remove branch' - uses: carpentries/actions/remove-branch@main - with: - pr: ${{ steps.get-pr.outputs.NUM }} diff --git a/.github/workflows/pr-preflight.yaml b/.github/workflows/pr-preflight.yaml deleted file mode 100644 index d0d7420d..00000000 --- a/.github/workflows/pr-preflight.yaml +++ /dev/null @@ -1,39 +0,0 @@ -name: "Pull Request Preflight Check" - -on: - pull_request_target: - branches: - ["main"] - types: - ["opened", "synchronize", "reopened"] - -jobs: - test-pr: - name: "Test if pull request is valid" - if: ${{ github.event.action != 'closed' }} - runs-on: ubuntu-latest - outputs: - is_valid: ${{ steps.check-pr.outputs.VALID }} - permissions: - pull-requests: write - steps: - - name: "Get Invalid Hashes File" - id: hash - run: | - echo "json<> $GITHUB_OUTPUT - - name: "Check PR" - id: check-pr - uses: carpentries/actions/check-valid-pr@main - with: - pr: ${{ github.event.number }} - invalid: ${{ fromJSON(steps.hash.outputs.json)[github.repository] }} - fail_on_error: true - - name: "Comment result of validation" - id: comment-diff - if: ${{ always() }} - uses: carpentries/actions/comment-diff@main - with: - pr: ${{ github.event.number }} - body: ${{ steps.check-pr.outputs.MSG }} diff --git a/.github/workflows/pr-receive.yaml b/.github/workflows/pr-receive.yaml deleted file mode 100644 index 371ef542..00000000 --- a/.github/workflows/pr-receive.yaml +++ /dev/null @@ -1,131 +0,0 @@ -name: "Receive Pull Request" - -on: - pull_request: - types: - [opened, synchronize, reopened] - -concurrency: - group: ${{ github.ref }} - cancel-in-progress: true - -jobs: - test-pr: - name: "Record PR number" - if: ${{ github.event.action != 'closed' }} - runs-on: ubuntu-latest - outputs: - is_valid: ${{ steps.check-pr.outputs.VALID }} - steps: - - name: "Record PR number" - id: record - if: ${{ always() }} - run: | - echo ${{ github.event.number }} > ${{ github.workspace }}/NR # 2022-03-02: artifact name fixed to be NR - - name: "Upload PR number" - id: upload - if: ${{ always() }} - uses: actions/upload-artifact@v3 - with: - name: pr - path: ${{ github.workspace }}/NR - - name: "Get Invalid Hashes File" - id: hash - run: | - echo "json<> $GITHUB_OUTPUT - - name: "echo output" - run: | - echo "${{ steps.hash.outputs.json }}" - - name: "Check PR" - id: check-pr - uses: carpentries/actions/check-valid-pr@main - with: - pr: ${{ github.event.number }} - invalid: ${{ fromJSON(steps.hash.outputs.json)[github.repository] }} - - build-md-source: - name: "Build markdown source files if valid" - needs: test-pr - runs-on: ubuntu-latest - if: ${{ needs.test-pr.outputs.is_valid == 'true' }} - env: - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - RENV_PATHS_ROOT: ~/.local/share/renv/ - CHIVE: ${{ github.workspace }}/site/chive - PR: ${{ github.workspace }}/site/pr - MD: ${{ github.workspace }}/site/built - steps: - - name: "Check Out Main Branch" - uses: actions/checkout@v3 - - - name: "Check Out Staging Branch" - uses: actions/checkout@v3 - with: - ref: md-outputs - path: ${{ env.MD }} - - - name: "Set up R" - uses: r-lib/actions/setup-r@v2 - with: - use-public-rspm: true - install-r: false - - - name: "Set up Pandoc" - uses: r-lib/actions/setup-pandoc@v2 - - - name: "Setup Lesson Engine" - uses: carpentries/actions/setup-sandpaper@main - with: - cache-version: ${{ secrets.CACHE_VERSION }} - - - name: "Setup Package Cache" - uses: carpentries/actions/setup-lesson-deps@main - with: - cache-version: ${{ secrets.CACHE_VERSION }} - - - name: "Validate and Build Markdown" - id: build-site - run: | - sandpaper::package_cache_trigger(TRUE) - sandpaper::validate_lesson(path = '${{ github.workspace }}') - sandpaper:::build_markdown(path = '${{ github.workspace }}', quiet = FALSE) - shell: Rscript {0} - - - name: "Generate Artifacts" - id: generate-artifacts - run: | - sandpaper:::ci_bundle_pr_artifacts( - repo = '${{ github.repository }}', - pr_number = '${{ github.event.number }}', - path_md = '${{ env.MD }}', - path_pr = '${{ env.PR }}', - path_archive = '${{ env.CHIVE }}', - branch = 'md-outputs' - ) - shell: Rscript {0} - - - name: "Upload PR" - uses: actions/upload-artifact@v3 - with: - name: pr - path: ${{ env.PR }} - - - name: "Upload Diff" - uses: actions/upload-artifact@v3 - with: - name: diff - path: ${{ env.CHIVE }} - retention-days: 1 - - - name: "Upload Build" - uses: actions/upload-artifact@v3 - with: - name: built - path: ${{ env.MD }} - retention-days: 1 - - - name: "Teardown" - run: sandpaper::reset_site() - shell: Rscript {0} diff --git a/.github/workflows/sandpaper-main.yaml b/.github/workflows/sandpaper-main.yaml deleted file mode 100644 index e17707ac..00000000 --- a/.github/workflows/sandpaper-main.yaml +++ /dev/null @@ -1,61 +0,0 @@ -name: "01 Build and Deploy Site" - -on: - push: - branches: - - main - - master - schedule: - - cron: '0 0 * * 2' - workflow_dispatch: - inputs: - name: - description: 'Who triggered this build?' - required: true - default: 'Maintainer (via GitHub)' - reset: - description: 'Reset cached markdown files' - required: false - default: false - type: boolean -jobs: - full-build: - name: "Build Full Site" - runs-on: ubuntu-latest - permissions: - checks: write - contents: write - pages: write - env: - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - RENV_PATHS_ROOT: ~/.local/share/renv/ - steps: - - - name: "Checkout Lesson" - uses: actions/checkout@v3 - - - name: "Set up R" - uses: r-lib/actions/setup-r@v2 - with: - use-public-rspm: true - install-r: false - - - name: "Set up Pandoc" - uses: r-lib/actions/setup-pandoc@v2 - - - name: "Setup Lesson Engine" - uses: carpentries/actions/setup-sandpaper@main - with: - cache-version: ${{ secrets.CACHE_VERSION }} - - - name: "Setup Package Cache" - uses: carpentries/actions/setup-lesson-deps@main - with: - cache-version: ${{ secrets.CACHE_VERSION }} - - - name: "Deploy Site" - run: | - reset <- "${{ github.event.inputs.reset }}" == "true" - sandpaper::package_cache_trigger(TRUE) - sandpaper:::ci_deploy(reset = reset) - shell: Rscript {0} diff --git a/.github/workflows/sandpaper-version.txt b/.github/workflows/sandpaper-version.txt deleted file mode 100644 index 288adf53..00000000 --- a/.github/workflows/sandpaper-version.txt +++ /dev/null @@ -1 +0,0 @@ -0.13.3 diff --git a/.github/workflows/update-cache.yaml b/.github/workflows/update-cache.yaml deleted file mode 100644 index 676d7424..00000000 --- a/.github/workflows/update-cache.yaml +++ /dev/null @@ -1,125 +0,0 @@ -name: "03 Maintain: Update Package Cache" - -on: - workflow_dispatch: - inputs: - name: - description: 'Who triggered this build (enter github username to tag yourself)?' - required: true - default: 'monthly run' - schedule: - # Run every tuesday - - cron: '0 0 * * 2' - -jobs: - preflight: - name: "Preflight Check" - runs-on: ubuntu-latest - outputs: - ok: ${{ steps.check.outputs.ok }} - steps: - - id: check - run: | - if [[ ${{ github.event_name }} == 'workflow_dispatch' ]]; then - echo "ok=true" >> $GITHUB_OUTPUT - echo "Running on request" - # using single brackets here to avoid 08 being interpreted as octal - # https://github.com/carpentries/sandpaper/issues/250 - elif [ `date +%d` -le 7 ]; then - # If the Tuesday lands in the first week of the month, run it - echo "ok=true" >> $GITHUB_OUTPUT - echo "Running on schedule" - else - echo "ok=false" >> $GITHUB_OUTPUT - echo "Not Running Today" - fi - - check_renv: - name: "Check if We Need {renv}" - runs-on: ubuntu-latest - needs: preflight - if: ${{ needs.preflight.outputs.ok == 'true'}} - outputs: - needed: ${{ steps.renv.outputs.exists }} - steps: - - name: "Checkout Lesson" - uses: actions/checkout@v3 - - id: renv - run: | - if [[ -d renv ]]; then - echo "exists=true" >> $GITHUB_OUTPUT - fi - - check_token: - name: "Check SANDPAPER_WORKFLOW token" - runs-on: ubuntu-latest - needs: check_renv - if: ${{ needs.check_renv.outputs.needed == 'true' }} - outputs: - workflow: ${{ steps.validate.outputs.wf }} - repo: ${{ steps.validate.outputs.repo }} - steps: - - name: "validate token" - id: validate - uses: carpentries/actions/check-valid-credentials@main - with: - token: ${{ secrets.SANDPAPER_WORKFLOW }} - - update_cache: - name: "Update Package Cache" - needs: check_token - if: ${{ needs.check_token.outputs.repo== 'true' }} - runs-on: ubuntu-latest - env: - GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} - RENV_PATHS_ROOT: ~/.local/share/renv/ - steps: - - - name: "Checkout Lesson" - uses: actions/checkout@v3 - - - name: "Set up R" - uses: r-lib/actions/setup-r@v2 - with: - use-public-rspm: true - install-r: false - - - name: "Update {renv} deps and determine if a PR is needed" - id: update - uses: carpentries/actions/update-lockfile@main - with: - cache-version: ${{ secrets.CACHE_VERSION }} - - - name: Create Pull Request - id: cpr - if: ${{ steps.update.outputs.n > 0 }} - uses: carpentries/create-pull-request@main - with: - token: ${{ secrets.SANDPAPER_WORKFLOW }} - delete-branch: true - branch: "update/packages" - commit-message: "[actions] update ${{ steps.update.outputs.n }} packages" - title: "Update ${{ steps.update.outputs.n }} packages" - body: | - :robot: This is an automated build - - This will update ${{ steps.update.outputs.n }} packages in your lesson with the following versions: - - ``` - ${{ steps.update.outputs.report }} - ``` - - :stopwatch: In a few minutes, a comment will appear that will show you how the output has changed based on these updates. - - If you want to inspect these changes locally, you can use the following code to check out a new branch: - - ```bash - git fetch origin update/packages - git checkout update/packages - ``` - - - Auto-generated by [create-pull-request][1] on ${{ steps.update.outputs.date }} - - [1]: https://github.com/carpentries/create-pull-request/tree/main - labels: "type: package cache" - draft: false diff --git a/.github/workflows/update-workflows.yaml b/.github/workflows/update-workflows.yaml deleted file mode 100644 index 288bcd13..00000000 --- a/.github/workflows/update-workflows.yaml +++ /dev/null @@ -1,66 +0,0 @@ -name: "02 Maintain: Update Workflow Files" - -on: - workflow_dispatch: - inputs: - name: - description: 'Who triggered this build (enter github username to tag yourself)?' - required: true - default: 'weekly run' - clean: - description: 'Workflow files/file extensions to clean (no wildcards, enter "" for none)' - required: false - default: '.yaml' - schedule: - # Run every Tuesday - - cron: '0 0 * * 2' - -jobs: - check_token: - name: "Check SANDPAPER_WORKFLOW token" - runs-on: ubuntu-latest - outputs: - workflow: ${{ steps.validate.outputs.wf }} - repo: ${{ steps.validate.outputs.repo }} - steps: - - name: "validate token" - id: validate - uses: carpentries/actions/check-valid-credentials@main - with: - token: ${{ secrets.SANDPAPER_WORKFLOW }} - - update_workflow: - name: "Update Workflow" - runs-on: ubuntu-latest - needs: check_token - if: ${{ needs.check_token.outputs.workflow == 'true' }} - steps: - - name: "Checkout Repository" - uses: actions/checkout@v3 - - - name: Update Workflows - id: update - uses: carpentries/actions/update-workflows@main - with: - clean: ${{ github.event.inputs.clean }} - - - name: Create Pull Request - id: cpr - if: "${{ steps.update.outputs.new }}" - uses: carpentries/create-pull-request@main - with: - token: ${{ secrets.SANDPAPER_WORKFLOW }} - delete-branch: true - branch: "update/workflows" - commit-message: "[actions] update sandpaper workflow to version ${{ steps.update.outputs.new }}" - title: "Update Workflows to Version ${{ steps.update.outputs.new }}" - body: | - :robot: This is an automated build - - Update Workflows from sandpaper version ${{ steps.update.outputs.old }} -> ${{ steps.update.outputs.new }} - - - Auto-generated by [create-pull-request][1] on ${{ steps.update.outputs.date }} - - [1]: https://github.com/carpentries/create-pull-request/tree/main - labels: "type: template and tools" - draft: false diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 00000000..7e821e45 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +jupyter-book +matplotlib +numpy From 42d1e5ba27d02b622899e2eaaf3f5d1e85603c06 Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 12:04:36 +0000 Subject: [PATCH 04/16] Add data transfer episode --- episodes/transfer_data.md | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 episodes/transfer_data.md diff --git a/episodes/transfer_data.md b/episodes/transfer_data.md new file mode 100644 index 00000000..e5d91271 --- /dev/null +++ b/episodes/transfer_data.md @@ -0,0 +1,2 @@ +(episode-data)= +# Navigating the filesystem and transferring data to and from the hub \ No newline at end of file From 9cd7ac112ca97ac2c2b05f21fa4859568afcd120 Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 12:05:30 +0000 Subject: [PATCH 05/16] Edit index page content and add reference labels --- README.md | 2 +- _toc.yml | 5 +- ...hub_administration.md => adminster_hub.md} | 1 + episodes/introduction.md | 1 + .../{image_management.md => manage_images.md} | 1 + episodes/troubleshooting.md | 1 + index.md | 73 ++++++++----------- instructors/instructor-notes.md | 4 +- learners/reference.md | 4 +- learners/setup.md | 13 ++-- profiles/learner-profiles.md | 4 +- 11 files changed, 47 insertions(+), 62 deletions(-) rename episodes/{hub_administration.md => adminster_hub.md} (98%) rename episodes/{image_management.md => manage_images.md} (98%) diff --git a/README.md b/README.md index 17b54189..89846771 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # JupyterHub Administration to Empower Research Communities -This lesson is aimed at Hub Champions and teaches the fundamentals of hub administration and user support for 2i2c managed JupyterHubs in the cloud. Delivered over two synchronous workshops, two hours in length a week apart. The time in between is dedicated to self-guided study with asynchronous support (via email 2i2c support / online Slack? To be discussed). +Delivered over two synchronous workshops, each two hours in length a week apart. The time in between is dedicated to self-guided study with asynchronous support provided by the instructors (via email 2i2c support / online Slack? To be discussed). > [!WARNING] > This lesson is under active development and not ready for teaching yet. diff --git a/_toc.yml b/_toc.yml index 584f2f49..11073f6f 100644 --- a/_toc.yml +++ b/_toc.yml @@ -13,8 +13,9 @@ parts: - caption: Episodes chapters: - file: episodes/introduction - - file: episodes/hub_administration - - file: episodes/image_management + - file: episodes/administer_hub + - file: episodes/manage_images + - file: episodes/transfer_data - file: episodes/troubleshooting diff --git a/episodes/hub_administration.md b/episodes/adminster_hub.md similarity index 98% rename from episodes/hub_administration.md rename to episodes/adminster_hub.md index d532dc02..acdb5bf7 100644 --- a/episodes/hub_administration.md +++ b/episodes/adminster_hub.md @@ -1,3 +1,4 @@ +(episode-admin)= # Administering your hub teaching: 0 diff --git a/episodes/introduction.md b/episodes/introduction.md index 05d79d14..d64ff698 100644 --- a/episodes/introduction.md +++ b/episodes/introduction.md @@ -1,3 +1,4 @@ +(episode-intro)= # Recognising the benefits your hub can provide for your user community teaching: 10 diff --git a/episodes/image_management.md b/episodes/manage_images.md similarity index 98% rename from episodes/image_management.md rename to episodes/manage_images.md index 611f2a4c..feb56afb 100644 --- a/episodes/image_management.md +++ b/episodes/manage_images.md @@ -1,3 +1,4 @@ +(episode-images)= # Managing Software Images teaching: 0 diff --git a/episodes/troubleshooting.md b/episodes/troubleshooting.md index 5f8bee2e..66b9427d 100644 --- a/episodes/troubleshooting.md +++ b/episodes/troubleshooting.md @@ -1,3 +1,4 @@ +(episode-troubleshoot)= # Troubleshooting and providing user support teaching: 0 diff --git a/index.md b/index.md index 10bdf00a..b71bb55d 100644 --- a/index.md +++ b/index.md @@ -1,6 +1,27 @@ # JupyterHub Administration to Empower Research Communities -This lesson is aimed at Hub Champions and teaches the fundamentals of hub administration and user support for 2i2c managed JupyterHubs in the cloud. Delivered over two synchronous workshops, two hours in length a week apart. The time in between is dedicated to self-guided study with asynchronous support (via email 2i2c support / online Slack? To be discussed). +:::::{grid} 2 +:reverse: + +::::{grid-item} +:columns: 4 + +:::{image} media/logo/catalyst-logo-dark-bg-white.png +:alt: Catalyst Project logo +:width: 100% +::: + +:::: + +::::{grid-item} +:columns: 8 + +This lesson is aimed at Hub Champions in charge of 2i2c managed JupyterHubs in the cloud. Learn the fundamentals of adminstering your hub and providing user support to your research and education communities. + +Training is delivered over two synchronous workshops, each two hours in length a week apart. The week in between is dedicated to self-guided study with asynchronous support provided by the instructors. +:::: + +::::: :::{attention} This lesson is under active development and not ready for teaching yet. @@ -21,51 +42,15 @@ After attending this training, Hub Champions will be able to: - navigate the filesystem and transfer data to and from the hub - provide user support and troubleshoot common issues -## Episode objectives - -1. :star: Recognising the benefits your hub can provide for your user community - - identify use cases of your user community - - distinguish which hub features can support these use cases - - understand your role and capacity as a Hub Champion to administer and support your hub -1. Administering your hub - - add users to the hub with GitHub - - configure server options (CPU, GPU, RAM) - - stop and restart a server -1. Applying software environments - - explain the value of reproducibility with containerized software environments - - pull a pre-configured Jupyter or RStudio image container for your hub -1. Navigating the filesystem and transferring data to and from the hub - - recognise and locate your home directory - - distribute datasets to all hub users in a shared directory - - push and pull GitHub repos with `gh-scoped-creds` -1. :star: Troubleshooting and providing user support - - triage common problems and know where to look for help - - share learning experiences from self-guided study - - foster a sustainable support system for your community - -( :star: indicates this episode is delivered via a synchronous workshop) - -## Prerequisites - -Before joining the training, participants should be able to: - -- access the 2i2c training hub -- login to their GitHub account - -## Authors - -- [Toby Hodges](https://github.com/tobyhodges) -- [Sabrina Lopez](https://github.com/SLLDeC) -- [James Munroe](https://github.com/jmunroe) -- [Jenny Wong](https://github.com/jnywong) - -## Contributing - -See [CONTRIBUTING.md](./CONTRIBUTING.md). +## Episodes -## License +1. ⭐ {ref}`episode-intro` +1. {ref}`episode-admin` +1. {ref}`episode-images` +1. {ref}`episode-data` +1. ⭐ {ref}`episode-troubleshoot` -See [LICENSE.md](./LICENSE.md) +( ⭐ indicates this episode is delivered via a synchronous workshop) ## Acknowledgements and Funding diff --git a/instructors/instructor-notes.md b/instructors/instructor-notes.md index aee85cc3..11bf6e7d 100644 --- a/instructors/instructor-notes.md +++ b/instructors/instructor-notes.md @@ -1,6 +1,4 @@ ---- -title: 'Instructor Notes' ---- +# Instructor Notes ## Instructor setup diff --git a/learners/reference.md b/learners/reference.md index ba26b9fe..26b578ae 100644 --- a/learners/reference.md +++ b/learners/reference.md @@ -1,6 +1,4 @@ ---- -title: 'Reference' ---- +# Reference ## Glossary diff --git a/learners/setup.md b/learners/setup.md index befcb4d2..e5a80800 100644 --- a/learners/setup.md +++ b/learners/setup.md @@ -1,10 +1,11 @@ ---- -title: Setup ---- +# Setup -- GitHub account. You can make one on [GitHub Sign Up page](https://github.com/signup). We recommend you to check [GitHub Documentation on two factor authentication](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa) -- Internet connection -- Web browser +Before joining the training, participants should be able to: + +- Access the 2i2c training hub +- GitHub account – Create an account on the [GitHub Sign Up page](https://github.com/signup). We recommend you to check [GitHub Documentation on two factor authentication](https://docs.github.com/en/authentication/securing-your-account-with-two-factor-authentication-2fa) for secure access +- Access a stable internet connection +- Use a web browser diff --git a/profiles/learner-profiles.md b/profiles/learner-profiles.md index 434e335a..a5e04866 100644 --- a/profiles/learner-profiles.md +++ b/profiles/learner-profiles.md @@ -1,5 +1,3 @@ ---- -title: FIXME ---- +# Learner Profiles This is a placeholder file. Please add content here. From 515067c12ecc03793edb1011638fca27387f6a32 Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 13:35:20 +0000 Subject: [PATCH 06/16] Add skeleton to data transfer episode --- episodes/episode_template_components.md | 13 ++++--- episodes/transfer_data.md | 48 ++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/episodes/episode_template_components.md b/episodes/episode_template_components.md index 7eabbbfd..b4895e7e 100644 --- a/episodes/episode_template_components.md +++ b/episodes/episode_template_components.md @@ -13,13 +13,13 @@ OVERVIEW :::{grid-item} Questions -- Placeholder text +- TODO ::: :::{grid-item} Objectives -- Placeholder text +- TODO ::: ::::: @@ -47,7 +47,7 @@ Objectives ## Introduction -Placeholder text. +TODO ``` ::::{dropdown} Challenge Title @@ -63,7 +63,7 @@ Solution content :::: ``` -::::{dropdown} Challenge Template +::::{dropdown} Challenge Title :open: Challenge content @@ -105,7 +105,6 @@ Solution content ### Figure - ``` :::{figure} ../media/logo/catalyst-icon-dark.png :scale: 50 % @@ -154,7 +153,7 @@ The equation {eq}`mymath2` is also a quadratic equation. :::{card} KEY POINTS ^^^ -- placeholder text +- TODO ::: ``` @@ -162,5 +161,5 @@ KEY POINTS :::{card} KEY POINTS ^^^ -- placeholder text +- TODO ::: diff --git a/episodes/transfer_data.md b/episodes/transfer_data.md index e5d91271..f8a1f3ff 100644 --- a/episodes/transfer_data.md +++ b/episodes/transfer_data.md @@ -1,2 +1,48 @@ (episode-data)= -# Navigating the filesystem and transferring data to and from the hub \ No newline at end of file +# Navigating the filesystem and transferring data to and from the hub + +teaching: 0 +exercises: 0 + +:::::{card} +OVERVIEW +^^^ + +::::{grid} +:gutter: 2 + +:::{grid-item} +Questions + +- TODO +::: + +:::{grid-item} +Objectives + +- recognise and locate your home directory +- distribute datasets to all hub users in a shared directory +- push and pull GitHub repos with `gh-scoped-creds` +::: + +::::: + +## Exercises + +::::{dropdown} Challenge Title +:open: + +Challenge content + +:::{dropdown} Solution +Solution content + +::: + +:::: + +:::{card} +KEY POINTS +^^^ +- TODO +::: \ No newline at end of file From e834119850e20e4d7e5d05f4a1060b917a43d86d Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 13:40:03 +0000 Subject: [PATCH 07/16] Change README to reflect contents of the GH repo and how to get set up --- README.md | 80 +++++++++++++++++++++++++++++++------------------------ 1 file changed, 45 insertions(+), 35 deletions(-) diff --git a/README.md b/README.md index 89846771..7f5fc228 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,12 @@ # JupyterHub Administration to Empower Research Communities -Delivered over two synchronous workshops, each two hours in length a week apart. The time in between is dedicated to self-guided study with asynchronous support provided by the instructors (via email 2i2c support / online Slack? To be discussed). +This repo contains the Jupyter Book source files for the Hub Champion Training. + +## About + +This lesson is aimed at Hub Champions in charge of 2i2c managed JupyterHubs in the cloud. Learn the fundamentals of adminstering your hub and providing user support to your research and education communities. + +Training is delivered over two synchronous workshops, each two hours in length a week apart. The week in between is dedicated to self-guided study with asynchronous support provided by the instructors. > [!WARNING] > This lesson is under active development and not ready for teaching yet. @@ -8,47 +14,51 @@ Delivered over two synchronous workshops, each two hours in length a week apart. > [!NOTE] > TODO: Link to the Spanish repo. -## Lesson objectives +## Getting Started + +We recommend editing the contents of this repo using the 2i2c Community Showcase Hub. + +> [!NOTE] +> If you require collaborator access to this repo, please [Get in Touch](#get-in-touch). + +1. Access the 2i2c Community Showcase Hub at [https://showcase.2i2c.cloud/](https://showcase.2i2c.cloud/). If you require authorisation to access this hub, please [Get in Touch](#get-in-touch). + +1. Select the *Shared Small: 1-4 CPU, 8-32 GB* server option and in the *Image* dropdown box select *Handbook Authoring*. + +1. Once the JupyterLab interface has loaded, set up GitHub authentication with `gh-scoped-creds`. This allows you to pull and push to GitHub repos. To enable this, open a terminal, run the command + + ```shell + jovyan@jupyter-user:~$ gh-scoped-creds + ``` + + and follow the prompts to enter your code at [https://github.com/login/device](https://github.com/login/device) + +1. Git clone [this project repo](https://github.com/czi-catalystproject/website) using the Terminal with the command + + ```shell + jovyan@jupyter-user:~$ git clone https://github.com/czi-catalystproject/website.git + ``` + +1. Follow the [how-to-guide](https://2i2c.org/community-showcase/community/content/authoring.html) for authoring and previewing content using Jupyter Book. + +> [!CAUTION] +> We do not recommend entering your GitHub credentials (GitHub password, personal access tokens or otherwise) on any kind of shared infrastructure (e.g. private and public cloud, HPC, any remote machine) as this information will be at risk. We highly advise using `gh-scoped-creds` for authentication on our hubs. Read [this article](https://blog.jupyter.org/securely-pushing-to-github-from-a-jupyterhub-3ee42dfdc54f) for more information. -After attending this training, Hub Champions will be able to: +### GitHub permissions for 2i2c-org and czi-catalystproject owners -- explain how interactive cloud computing can empower your user community -- control user authentication and access to your hub -- monitor usage and cloud billing costs -- apply software environments through containerization -- navigate the filesystem and transfer data to and from the hub -- provide user support and troubleshoot common issues +These are extra instructions for GitHub [2i2c-org](https://github.com/2i2c-org) and [czi-catalystproject](https://github.com/czi-catalystproject) owners to grant permissions to collaborators when requested. -## Episode objectives +#### Access to the Community Showcase Hub -1. :star: Recognising the benefits your hub can provide for your user community - - identify use cases of your user community - - distinguish which hub features can support these use cases - - understand your role and capacity as a Hub Champion to administer and support your hub -1. Administering your hub - - add users to the hub with GitHub - - configure server options (CPU, GPU, RAM) - - stop and restart a server -1. Applying software environments - - explain the value of reproducibility with containerized software environments - - pull a pre-configured Jupyter or RStudio image container for your hub -1. Navigating the filesystem and transferring data to and from the hub - - recognise and locate your home directory - - distribute datasets to all hub users in a shared directory - - push and pull GitHub repos with `gh-scoped-creds` -1. :star: Troubleshooting and providing user support - - triage common problems and know where to look for help - - share learning experiences from self-guided study - - foster a sustainable support system for your community +Add the user to the `2i2c-org/Research-Delight-Team` for access. -( :star: indicates this episode is delivered via a synchronous workshop) +#### Add collaborator to [this project repo](https://github.com/czi-catalystproject/website) -## Prerequisites +Go to the [GH repo](https://github.com/czi-catalystproject/website), click *Settings -> Access - Collaborators and teams* and add the relevant user or team. Assign the *Write* role in the first instance (this can be upgraded later if needed). -Before joining the training, participants should be able to: +#### `gh-scoped-creds` and GitHub App -- access the 2i2c training hub -- login to their GitHub account +The GitHub App [2i2c Community Showcase Hub](https://showcase.2i2c.cloud/) is currently installed on `czi-catalystproject/website` and `czi-catalystproject/hub-champion-training` repos to enable `gh-scoped-creds`. ## Authors @@ -78,4 +88,4 @@ We would like to acknowledge Chan Zuckerberg Initiative funding for the "A Colla ## Contacting us -If you would like to get in touch with us, then please email [support@2i2c.org](mailto:support@2i2c.org). +If you would like to get in touch with us, then please open an [issue](https://github.com/czi-catalystproject/hub-champion-training/issues) or email [support@2i2c.org](mailto:support@2i2c.org). From f89b374ccbc824b9598772f75921c564f0d42a65 Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 13:44:24 +0000 Subject: [PATCH 08/16] Formatting --- README.md | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 7f5fc228..88c1dd2a 100644 --- a/README.md +++ b/README.md @@ -44,21 +44,22 @@ We recommend editing the contents of this repo using the 2i2c Community Showcase > [!CAUTION] > We do not recommend entering your GitHub credentials (GitHub password, personal access tokens or otherwise) on any kind of shared infrastructure (e.g. private and public cloud, HPC, any remote machine) as this information will be at risk. We highly advise using `gh-scoped-creds` for authentication on our hubs. Read [this article](https://blog.jupyter.org/securely-pushing-to-github-from-a-jupyterhub-3ee42dfdc54f) for more information. -### GitHub permissions for 2i2c-org and czi-catalystproject owners - +
+GitHub permissions for 2i2c-org and czi-catalystproject owners These are extra instructions for GitHub [2i2c-org](https://github.com/2i2c-org) and [czi-catalystproject](https://github.com/czi-catalystproject) owners to grant permissions to collaborators when requested. -#### Access to the Community Showcase Hub +**Access to the Community Showcase Hub** Add the user to the `2i2c-org/Research-Delight-Team` for access. -#### Add collaborator to [this project repo](https://github.com/czi-catalystproject/website) +**Add collaborator to [this project repo](https://github.com/czi-catalystproject/website)** Go to the [GH repo](https://github.com/czi-catalystproject/website), click *Settings -> Access - Collaborators and teams* and add the relevant user or team. Assign the *Write* role in the first instance (this can be upgraded later if needed). -#### `gh-scoped-creds` and GitHub App +**Info about `gh-scoped-creds` and GitHub App** The GitHub App [2i2c Community Showcase Hub](https://showcase.2i2c.cloud/) is currently installed on `czi-catalystproject/website` and `czi-catalystproject/hub-champion-training` repos to enable `gh-scoped-creds`. +
## Authors From 13eadd09d232145e82fa43500323bed2658c4a6e Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 13:45:33 +0000 Subject: [PATCH 09/16] Change title of dropdown --- README.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 88c1dd2a..9210d1b7 100644 --- a/README.md +++ b/README.md @@ -45,7 +45,8 @@ We recommend editing the contents of this repo using the 2i2c Community Showcase > We do not recommend entering your GitHub credentials (GitHub password, personal access tokens or otherwise) on any kind of shared infrastructure (e.g. private and public cloud, HPC, any remote machine) as this information will be at risk. We highly advise using `gh-scoped-creds` for authentication on our hubs. Read [this article](https://blog.jupyter.org/securely-pushing-to-github-from-a-jupyterhub-3ee42dfdc54f) for more information.
-GitHub permissions for 2i2c-org and czi-catalystproject owners +NOTE: GitHub permissions for 2i2c-org and czi-catalystproject owners + These are extra instructions for GitHub [2i2c-org](https://github.com/2i2c-org) and [czi-catalystproject](https://github.com/czi-catalystproject) owners to grant permissions to collaborators when requested. **Access to the Community Showcase Hub** From 9966b5bb27ce922f766346a40ffe221a07a5597f Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 14:56:22 +0000 Subject: [PATCH 10/16] Add instructions for localisation to Spanish --- README.md | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 59 insertions(+) diff --git a/README.md b/README.md index 9210d1b7..87bd3765 100644 --- a/README.md +++ b/README.md @@ -62,6 +62,65 @@ Go to the [GH repo](https://github.com/czi-catalystproject/website), click *Sett The GitHub App [2i2c Community Showcase Hub](https://showcase.2i2c.cloud/) is currently installed on `czi-catalystproject/website` and `czi-catalystproject/hub-champion-training` repos to enable `gh-scoped-creds`.
+## Localisation to Spanish + +The following are instructions for localising the Jupyter Book to Spanish, adapted from the [Sphinx documentation](https://www.sphinx-doc.org/en/master/usage/advanced/intl.html). + +1. Open a terminal and navigate to the `hub-champion-training` folder + + ```shell + jovyan@jupyter-username:~$ cd hub-champion-training/ + ``` + +1. If a `config.py` file does not exist in this folder, **or** if you have made changes to `_config.yml`, then automatically generate this from the `_config.yml` with + + ```shell + jupyter-book config sphinx . + ``` + + (See [Jupyter Book docs](https://jupyterbook.org/en/stable/explain/sphinx.html#jupyter-book-is-a-distribution-of-sphinx)) + +1. Generate `gettext` files + + ```shell + jovyan@jupyter-username:~$ jupyter-book build --builder custom --custom-builder gettext . + ``` + +1. Create `.po` files in the `locale` folder in the `es_AR` target language (ensure that `locale` matches the `locale_dirs` setting in `_config.yml`) + + ```shell + jovyan@jupyter-username:~$ sphinx-intl update -p _build/gettext -d locale -l es_AR + ``` + +1. Translate the `.po` files located inside the `locale/es_AR/LC_MESSAGES` folder as required, e.g. with human translation services, machine translation with [Crowdin](https://crowdin.com/). + +1. Build the HTML files in English (the source language) + + ```shell + jovyan@jupyter-username:~$ jupyter-book build . + ``` + +1. Build the HTML files in Spanish (the target language) + + ```shell + jovyan@jupyter-username:~$ jupyter-book config sphinx . + jovyan@jupyter-username:~$ sphinx-build -b html -D language=es_AR . _build/html/es + ``` +1. Follow this [how-to guide](https://2i2c.org/community-showcase/community/content/authoring.html#build-and-preview-your-jupyter-book) for previewing your local Jupyter Book. The Spanish version of the website can be found at the following URL + + ```shell + https:///user//proxy/8000/es/index.html + ``` + +> [!TIP] +> If you run into the following error +> `sphinx.errors.SphinxError: This environment is incompatible with the selected builder, please choose another doctree directory.` +> try cleaning the build outputs first before building again +> ```shell +> jovyan@jupyter-username:~$ jupyter-book clean . +> jovyan@jupyter-username:~$ jupyter-book build . +> ``` + ## Authors - [Toby Hodges](https://github.com/tobyhodges) From 7cf20f662fdcbacbb561803c4a91cb9e1992c000 Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 14:58:23 +0000 Subject: [PATCH 11/16] Add configs and files for localisation --- _config.yml | 1 - conf.py | 43 +++ locale/es_AR/LC_MESSAGES/CODE_OF_CONDUCT.mo | Bin 0 -> 430 bytes locale/es_AR/LC_MESSAGES/CODE_OF_CONDUCT.po | 31 ++ locale/es_AR/LC_MESSAGES/CONTRIBUTING.mo | Bin 0 -> 430 bytes locale/es_AR/LC_MESSAGES/CONTRIBUTING.po | 179 +++++++++++ locale/es_AR/LC_MESSAGES/LICENSE.mo | Bin 0 -> 430 bytes locale/es_AR/LC_MESSAGES/LICENSE.po | 126 ++++++++ locale/es_AR/LC_MESSAGES/README.mo | Bin 0 -> 430 bytes locale/es_AR/LC_MESSAGES/README.po | 284 ++++++++++++++++++ .../LC_MESSAGES/episodes/adminster_hub.mo | Bin 0 -> 430 bytes .../LC_MESSAGES/episodes/adminster_hub.po | 99 ++++++ .../episodes/episode_template_components.mo | Bin 0 -> 430 bytes .../episodes/episode_template_components.po | 180 +++++++++++ .../LC_MESSAGES/episodes/introduction.mo | Bin 0 -> 430 bytes .../LC_MESSAGES/episodes/introduction.po | 186 ++++++++++++ .../LC_MESSAGES/episodes/manage_images.mo | Bin 0 -> 430 bytes .../LC_MESSAGES/episodes/manage_images.po | 100 ++++++ .../LC_MESSAGES/episodes/transfer_data.mo | Bin 0 -> 430 bytes .../LC_MESSAGES/episodes/transfer_data.po | 66 ++++ .../LC_MESSAGES/episodes/troubleshooting.mo | Bin 0 -> 430 bytes .../LC_MESSAGES/episodes/troubleshooting.po | 65 ++++ locale/es_AR/LC_MESSAGES/index.mo | Bin 0 -> 430 bytes locale/es_AR/LC_MESSAGES/index.po | 130 ++++++++ .../instructors/instructor-notes.mo | Bin 0 -> 430 bytes .../instructors/instructor-notes.po | 35 +++ .../es_AR/LC_MESSAGES/learners/reference.mo | Bin 0 -> 430 bytes .../es_AR/LC_MESSAGES/learners/reference.po | 30 ++ locale/es_AR/LC_MESSAGES/learners/setup.mo | Bin 0 -> 430 bytes locale/es_AR/LC_MESSAGES/learners/setup.po | 44 +++ .../LC_MESSAGES/profiles/learner-profiles.mo | Bin 0 -> 430 bytes .../LC_MESSAGES/profiles/learner-profiles.po | 27 ++ 32 files changed, 1625 insertions(+), 1 deletion(-) create mode 100644 conf.py create mode 100644 locale/es_AR/LC_MESSAGES/CODE_OF_CONDUCT.mo create mode 100644 locale/es_AR/LC_MESSAGES/CODE_OF_CONDUCT.po create mode 100644 locale/es_AR/LC_MESSAGES/CONTRIBUTING.mo create mode 100644 locale/es_AR/LC_MESSAGES/CONTRIBUTING.po create mode 100644 locale/es_AR/LC_MESSAGES/LICENSE.mo create mode 100644 locale/es_AR/LC_MESSAGES/LICENSE.po create mode 100644 locale/es_AR/LC_MESSAGES/README.mo create mode 100644 locale/es_AR/LC_MESSAGES/README.po create mode 100644 locale/es_AR/LC_MESSAGES/episodes/adminster_hub.mo create mode 100644 locale/es_AR/LC_MESSAGES/episodes/adminster_hub.po create mode 100644 locale/es_AR/LC_MESSAGES/episodes/episode_template_components.mo create mode 100644 locale/es_AR/LC_MESSAGES/episodes/episode_template_components.po create mode 100644 locale/es_AR/LC_MESSAGES/episodes/introduction.mo create mode 100644 locale/es_AR/LC_MESSAGES/episodes/introduction.po create mode 100644 locale/es_AR/LC_MESSAGES/episodes/manage_images.mo create mode 100644 locale/es_AR/LC_MESSAGES/episodes/manage_images.po create mode 100644 locale/es_AR/LC_MESSAGES/episodes/transfer_data.mo create mode 100644 locale/es_AR/LC_MESSAGES/episodes/transfer_data.po create mode 100644 locale/es_AR/LC_MESSAGES/episodes/troubleshooting.mo create mode 100644 locale/es_AR/LC_MESSAGES/episodes/troubleshooting.po create mode 100644 locale/es_AR/LC_MESSAGES/index.mo create mode 100644 locale/es_AR/LC_MESSAGES/index.po create mode 100644 locale/es_AR/LC_MESSAGES/instructors/instructor-notes.mo create mode 100644 locale/es_AR/LC_MESSAGES/instructors/instructor-notes.po create mode 100644 locale/es_AR/LC_MESSAGES/learners/reference.mo create mode 100644 locale/es_AR/LC_MESSAGES/learners/reference.po create mode 100644 locale/es_AR/LC_MESSAGES/learners/setup.mo create mode 100644 locale/es_AR/LC_MESSAGES/learners/setup.po create mode 100644 locale/es_AR/LC_MESSAGES/profiles/learner-profiles.mo create mode 100644 locale/es_AR/LC_MESSAGES/profiles/learner-profiles.po diff --git a/_config.yml b/_config.yml index 969c48bf..94474808 100644 --- a/_config.yml +++ b/_config.yml @@ -57,7 +57,6 @@ sphinx: language: en html_last_updated_fmt: '%b %d, %Y' html_show_copyright: true - html_search_language: ja html_css_files: ["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css"] # for FontAwesome 6.1 icons (the defaults are version 5) # see https://sphinx-design.readthedocs.io/en/latest/badges_buttons.html html_theme_options: diff --git a/conf.py b/conf.py new file mode 100644 index 00000000..87715505 --- /dev/null +++ b/conf.py @@ -0,0 +1,43 @@ +############################################################################### +# Auto-generated by `jupyter-book config` +# If you wish to continue using _config.yml, make edits to that file and +# re-generate this one. +############################################################################### +author = 'The Catalyst Project Team' +comments_config = {'hypothesis': False, 'utterances': False} +copyright = '2024' +exclude_patterns = ['**.ipynb_checkpoints', '.DS_Store', 'Thumbs.db', '_build'] +extensions = ['sphinx_togglebutton', 'sphinx_copybutton', 'myst_nb', 'jupyter_book', 'sphinx_thebe', 'sphinx_comments', 'sphinx_external_toc', 'sphinx.ext.intersphinx', 'sphinx_design', 'sphinx_book_theme', 'sphinx_jupyterbook_latex'] +external_toc_exclude_missing = False +external_toc_path = '_toc.yml' +gettext_additional_targets = ['literal-block'] +gettext_compact = False +gettext_location = False +html_baseurl = '' +html_css_files = ['https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css'] +html_favicon = 'images/logo/favicon.ico' +html_last_updated_fmt = '%b %d, %Y' +html_logo = 'images/logo/catalyst-text-dark-rectangle.png' +html_show_copyright = True +html_sourcelink_suffix = '' +html_theme = 'sphinx_book_theme' +html_theme_options = {'toc_title': 'Table of contents.'} +html_title = 'Hub Champion Training' +language = 'en' +latex_engine = 'pdflatex' +locale_dirs = ['locale/'] +myst_enable_extensions = ['amsmath', 'colon_fence', 'deflist', 'dollarmath', 'html_admonition', 'html_image', 'linkify', 'replacements', 'smartquotes', 'substitution'] +myst_url_schemes = ['mailto', 'http', 'https'] +nb_execution_allow_errors = False +nb_execution_cache_path = '' +nb_execution_excludepatterns = [] +nb_execution_in_temp = False +nb_execution_mode = 'force' +nb_execution_timeout = 30 +nb_output_stderr = 'show' +nb_render_priority = {'gettext': {}} +numfig = True +pygments_style = 'sphinx' +suppress_warnings = ['myst.domains'] +use_jupyterbook_latex = True +use_multitoc_numbering = True diff --git a/locale/es_AR/LC_MESSAGES/CODE_OF_CONDUCT.mo b/locale/es_AR/LC_MESSAGES/CODE_OF_CONDUCT.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "" +"As contributors and maintainers of this project, we pledge to follow the " +"[The Carpentries Code of Conduct][coc]." +msgstr "" + +msgid "" +"Instances of abusive, harassing, or otherwise unacceptable behavior may " +"be reported by following our [reporting guidelines][coc-reporting]." +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/CONTRIBUTING.mo b/locale/es_AR/LC_MESSAGES/CONTRIBUTING.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Contributing" +msgstr "" + +msgid "" +"[The Carpentries][cp-site] ([Software Carpentry][swc-site], [Data " +"Carpentry][dc-site], and [Library Carpentry][lc-site]) are open source " +"projects, and we welcome contributions of all kinds: new lessons, fixes " +"to existing material, bug reports, and reviews of proposed changes are " +"all welcome." +msgstr "" + +msgid "Contributor Agreement" +msgstr "" + +msgid "" +"By contributing, you agree that we may redistribute your work under [our " +"license](LICENSE.md). In exchange, we will address your issues and/or " +"assess your change proposal as promptly as we can, and help you become a " +"member of our community. Everyone involved in [The Carpentries][cp-site] " +"agrees to abide by our [code of conduct](CODE_OF_CONDUCT.md)." +msgstr "" + +msgid "How to Contribute" +msgstr "" + +msgid "" +"The easiest way to get started is to file an issue to tell us about a " +"spelling mistake, some awkward wording, or a factual error. This is a " +"good way to introduce yourself and to meet some of our community members." +msgstr "" + +msgid "" +"If you do not have a [GitHub][github] account, you can [send us comments " +"by email][contact]. However, we will be able to respond more quickly if " +"you use one of the other methods described below." +msgstr "" + +msgid "" +"If you have a [GitHub][github] account, or are willing to [create one" +"][github-join], but do not know how to use Git, you can report problems " +"or suggest improvements by [creating an issue][repo-issues]. This allows " +"us to assign the item to someone and to respond to it in a threaded " +"discussion." +msgstr "" + +msgid "" +"If you are comfortable with Git, and would like to add or change " +"material, you can submit a pull request (PR). Instructions for doing this" +" are [included below](#using-github). For inspiration about changes that " +"need to be made, check out the [list of open issues][issues] across the " +"Carpentries." +msgstr "" + +msgid "" +"Note: if you want to build the website locally, please refer to [The " +"Workbench documentation][template-doc]." +msgstr "" + +msgid "Where to Contribute" +msgstr "" + +msgid "If you wish to change this lesson, add issues and pull requests here." +msgstr "" + +msgid "" +"If you wish to change the template used for workshop websites, please " +"refer to [The Workbench documentation][template-doc]." +msgstr "" + +msgid "What to Contribute" +msgstr "" + +msgid "" +"There are many ways to contribute, from writing new exercises and " +"improving existing ones to updating or filling in the documentation and " +"submitting [bug reports][issues] about things that do not work, are not " +"clear, or are missing. If you are looking for ideas, please see [the list" +" of issues for this repository][repo-issues], or the issues for [Data " +"Carpentry][dc-issues], [Library Carpentry][lc-issues], and [Software " +"Carpentry][swc-issues] projects." +msgstr "" + +msgid "" +"Comments on issues and reviews of pull requests are just as welcome: we " +"are smarter together than we are on our own. **Reviews from novices and " +"newcomers are particularly valuable**: it's easy for people who have been" +" using these lessons for a while to forget how impenetrable some of this " +"material can be, so fresh eyes are always welcome." +msgstr "" + +msgid "What *Not* to Contribute" +msgstr "" + +msgid "" +"Our lessons already contain more material than we can cover in a typical " +"workshop, so we are usually *not* looking for more concepts or tools to " +"add to them. As a rule, if you want to introduce a new idea, you must (a)" +" estimate how long it will take to teach and (b) explain what you would " +"take out to make room for it. The first encourages contributors to be " +"honest about requirements; the second, to think hard about priorities." +msgstr "" + +msgid "" +"We are also not looking for exercises or other material that only run on " +"one platform. Our workshops typically contain a mixture of Windows, " +"macOS, and Linux users; in order to be usable, our lessons must run " +"equally well on all three." +msgstr "" + +msgid "Using GitHub" +msgstr "" + +msgid "" +"If you choose to contribute via GitHub, you may want to look at [How to " +"Contribute to an Open Source Project on GitHub][how-contribute]. In " +"brief, we use [GitHub flow][github-flow] to manage changes:" +msgstr "" + +msgid "" +"Create a new branch in your desktop copy of this repository for each " +"significant change." +msgstr "" + +msgid "Commit the change in that branch." +msgstr "" + +msgid "Push that branch to your fork of this repository on GitHub." +msgstr "" + +msgid "Submit a pull request from that branch to the [upstream repository][repo]." +msgstr "" + +msgid "" +"If you receive feedback, make changes on your desktop and push to your " +"branch on GitHub: the pull request will update automatically." +msgstr "" + +msgid "NB: The published copy of the lesson is usually in the `main` branch." +msgstr "" + +msgid "" +"Each lesson has a team of maintainers who review issues and pull requests" +" or encourage others to do so. The maintainers are community volunteers, " +"and have final say over what gets merged into the lesson." +msgstr "" + +msgid "Other Resources" +msgstr "" + +msgid "" +"The Carpentries is a global organisation with volunteers and learners all" +" over the world. We share values of inclusivity and a passion for sharing" +" knowledge, teaching and learning. There are several ways to connect with" +" The Carpentries community listed at " +"including via social media, slack, newsletters, and email lists. You can " +"also [reach us by email][contact]." +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/LICENSE.mo b/locale/es_AR/LC_MESSAGES/LICENSE.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Instructional Material" +msgstr "" + +msgid "" +"All Carpentries (Software Carpentry, Data Carpentry, and Library " +"Carpentry) instructional material is made available under the [Creative " +"Commons Attribution license][cc-by-human]. The following is a human-" +"readable summary of (and not a substitute for) the [full legal text of " +"the CC BY 4.0 license][cc-by-legal]." +msgstr "" + +msgid "You are free:" +msgstr "" + +msgid "to **Share**---copy and redistribute the material in any medium or format" +msgstr "" + +msgid "to **Adapt**---remix, transform, and build upon the material" +msgstr "" + +msgid "for any purpose, even commercially." +msgstr "" + +msgid "" +"The licensor cannot revoke these freedoms as long as you follow the " +"license terms." +msgstr "" + +msgid "Under the following terms:" +msgstr "" + +msgid "" +"**Attribution**---You must give appropriate credit (mentioning that your " +"work is derived from work that is Copyright (c) The Carpentries and, " +"where practical, linking to ), provide a [link " +"to the license][cc-by-human], and indicate if changes were made. You may " +"do so in any reasonable manner, but not in any way that suggests the " +"licensor endorses you or your use." +msgstr "" + +msgid "" +"**No additional restrictions**---You may not apply legal terms or " +"technological measures that legally restrict others from doing anything " +"the license permits. With the understanding that:" +msgstr "" + +msgid "Notices:" +msgstr "" + +msgid "" +"You do not have to comply with the license for elements of the material " +"in the public domain or where your use is permitted by an applicable " +"exception or limitation." +msgstr "" + +msgid "" +"No warranties are given. The license may not give you all of the " +"permissions necessary for your intended use. For example, other rights " +"such as publicity, privacy, or moral rights may limit how you use the " +"material." +msgstr "" + +msgid "Software" +msgstr "" + +msgid "" +"Except where otherwise noted, the example programs and other software " +"provided by The Carpentries are made available under the " +"[OSI][osi]-approved [MIT license][mit-license]." +msgstr "" + +msgid "" +"Permission is hereby granted, free of charge, to any person obtaining a " +"copy of this software and associated documentation files (the " +"\"Software\"), to deal in the Software without restriction, including " +"without limitation the rights to use, copy, modify, merge, publish, " +"distribute, sublicense, and/or sell copies of the Software, and to permit" +" persons to whom the Software is furnished to do so, subject to the " +"following conditions:" +msgstr "" + +msgid "" +"The above copyright notice and this permission notice shall be included " +"in all copies or substantial portions of the Software." +msgstr "" + +msgid "" +"THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS" +" OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF " +"MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN" +" NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM," +" DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR " +"OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE" +" USE OR OTHER DEALINGS IN THE SOFTWARE." +msgstr "" + +msgid "Trademark" +msgstr "" + +msgid "" +"\"The Carpentries\", \"Software Carpentry\", \"Data Carpentry\", and " +"\"Library Carpentry\" and their respective logos are registered " +"trademarks of [Community Initiatives][ci]." +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/README.mo b/locale/es_AR/LC_MESSAGES/README.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "JupyterHub Administration to Empower Research Communities" +msgstr "" + +msgid "" +"This repo contains the Jupyter Book source files for the Hub Champion " +"Training." +msgstr "" + +msgid "About" +msgstr "" + +msgid "" +"This lesson is aimed at Hub Champions in charge of 2i2c managed " +"JupyterHubs in the cloud. Learn the fundamentals of adminstering your hub" +" and providing user support to your research and education communities." +msgstr "" + +msgid "" +"Training is delivered over two synchronous workshops, each two hours in " +"length a week apart. The week in between is dedicated to self-guided " +"study with asynchronous support provided by the instructors." +msgstr "" + +msgid "" +"[!WARNING] This lesson is under active development and not ready for " +"teaching yet." +msgstr "" + +msgid "[!NOTE] TODO: Link to the Spanish repo." +msgstr "" + +msgid "Getting Started" +msgstr "" + +msgid "" +"We recommend editing the contents of this repo using the 2i2c Community " +"Showcase Hub." +msgstr "" + +msgid "" +"[!NOTE] If you require collaborator access to this repo, please [Get in " +"Touch](#get-in-touch)." +msgstr "" + +msgid "" +"Access the 2i2c Community Showcase Hub at " +"[https://showcase.2i2c.cloud/](https://showcase.2i2c.cloud/). If you " +"require authorisation to access this hub, please [Get in Touch](#get-in-" +"touch)." +msgstr "" + +msgid "" +"Select the *Shared Small: 1-4 CPU, 8-32 GB* server option and in the " +"*Image* dropdown box select *Handbook Authoring*." +msgstr "" + +msgid "" +"Once the JupyterLab interface has loaded, set up GitHub authentication " +"with `gh-scoped-creds`. This allows you to pull and push to GitHub repos." +" To enable this, open a terminal, run the command" +msgstr "" + +msgid "jovyan@jupyter-user:~$ gh-scoped-creds\n" +msgstr "" + +msgid "" +"and follow the prompts to enter your code at " +"[https://github.com/login/device](https://github.com/login/device)" +msgstr "" + +msgid "" +"Git clone [this project repo](https://github.com/czi-" +"catalystproject/website) using the Terminal with the command" +msgstr "" + +msgid "" +"jovyan@jupyter-user:~$ git clone https://github.com/czi-" +"catalystproject/website.git\n" +msgstr "" + +msgid "" +"Follow the [how-to-guide](https://2i2c.org/community-" +"showcase/community/content/authoring.html) for authoring and previewing " +"content using Jupyter Book." +msgstr "" + +msgid "" +"[!CAUTION] We do not recommend entering your GitHub credentials (GitHub " +"password, personal access tokens or otherwise) on any kind of shared " +"infrastructure (e.g. private and public cloud, HPC, any remote machine) " +"as this information will be at risk. We highly advise using `gh-scoped-" +"creds` for authentication on our hubs. Read [this " +"article](https://blog.jupyter.org/securely-pushing-to-github-from-a" +"-jupyterhub-3ee42dfdc54f) for more information." +msgstr "" + +msgid "" +"These are extra instructions for GitHub [2i2c-org](https://github.com" +"/2i2c-org) and [czi-catalystproject](https://github.com/czi-" +"catalystproject) owners to grant permissions to collaborators when " +"requested." +msgstr "" + +msgid "**Access to the Community Showcase Hub**" +msgstr "" + +msgid "Add the user to the `2i2c-org/Research-Delight-Team` for access." +msgstr "" + +msgid "" +"**Add collaborator to [this project repo](https://github.com/czi-" +"catalystproject/website)**" +msgstr "" + +msgid "" +"Go to the [GH repo](https://github.com/czi-catalystproject/website), " +"click *Settings -> Access - Collaborators and teams* and add the relevant" +" user or team. Assign the *Write* role in the first instance (this can be" +" upgraded later if needed)." +msgstr "" + +msgid "**Info about `gh-scoped-creds` and GitHub App**" +msgstr "" + +msgid "" +"The GitHub App [2i2c Community Showcase " +"Hub](https://showcase.2i2c.cloud/) is currently installed on `czi-" +"catalystproject/website` and `czi-catalystproject/hub-champion-training` " +"repos to enable `gh-scoped-creds`." +msgstr "" + +msgid "Localisation to Spanish" +msgstr "" + +msgid "" +"The following are instructions for localising the Jupyter Book to " +"Spanish, adapted from the [Sphinx documentation](https://www.sphinx-" +"doc.org/en/master/usage/advanced/intl.html)." +msgstr "" + +msgid "Open a terminal and navigate to the `hub-champion-training` folder" +msgstr "" + +msgid "jovyan@jupyter-username:~$ cd hub-champion-training/\n" +msgstr "" + +msgid "" +"If a `config.py` file does not exist, **or** if you have made changes to " +"`_config.yml`, then automatically generate this from the `_config.yml` " +"with" +msgstr "" + +msgid "jupyter-book config sphinx .\n" +msgstr "" + +msgid "" +"(See [Jupyter Book " +"docs](https://jupyterbook.org/en/stable/explain/sphinx.html#jupyter-book-" +"is-a-distribution-of-sphinx))" +msgstr "" + +msgid "Generate `gettext` files" +msgstr "" + +msgid "" +"jovyan@jupyter-username:~$ jupyter-book build --builder custom --custom-" +"builder gettext .\n" +msgstr "" + +msgid "" +"Create `.po` files in the `locale` folder in the `es_AR` target language " +"(ensure that `locale` matches the `locale_dirs` setting in `_config.yml`)" +msgstr "" + +msgid "" +"jovyan@jupyter-username:~$ sphinx-intl update -p _gettext -d locale -l " +"es_AR\n" +msgstr "" + +msgid "" +"Translate the `.po` files as required, e.g. with human translation " +"services, machine translation with [Crowdin](https://crowdin.com/)." +msgstr "" + +msgid "Build the HTML files in English (the source language)" +msgstr "" + +msgid "jovyan@jupyter-username:~$ jupyter-book build .\n" +msgstr "" + +msgid "Build the HTML files in Spanish (the target language)" +msgstr "" + +msgid "" +"jupyter-book config sphinx .\n" +"\n" +msgstr "" + +msgid "Authors" +msgstr "" + +msgid "[Toby Hodges](https://github.com/tobyhodges)" +msgstr "" + +msgid "[Sabrina Lopez](https://github.com/SLLDeC)" +msgstr "" + +msgid "[James Munroe](https://github.com/jmunroe)" +msgstr "" + +msgid "[Jenny Wong](https://github.com/jnywong)" +msgstr "" + +msgid "Contributing" +msgstr "" + +msgid "See [CONTRIBUTING.md](./CONTRIBUTING.md)." +msgstr "" + +msgid "License" +msgstr "" + +msgid "See [LICENSE.md](./LICENSE.md)" +msgstr "" + +msgid "Acknowledgements and Funding" +msgstr "" + +msgid "" +"We would like to acknowledge Chan Zuckerberg Initiative funding for the " +"\"A Collaborative Interactive Computing Service Model for Global " +"Communities\" project and our partner organisations:" +msgstr "" + +msgid "[2i2c](https://2i2c.org/)" +msgstr "" + +msgid "[The Carpentries](https://carpentries.org/about/)" +msgstr "" + +msgid "" +"[Center for Scientific Collaboration and Community " +"Engagement](https://www.cscce.org/)" +msgstr "" + +msgid "[Invest in Open Infrastructure](https://investinopen.org/)" +msgstr "" + +msgid "[MetaDocencia](https://www.metadocencia.org/)" +msgstr "" + +msgid "[Open Life Science](https://openlifesci.org/)" +msgstr "" + +msgid "Contacting us" +msgstr "" + +msgid "" +"If you would like to get in touch with us, then please open an " +"[issue](https://github.com/czi-catalystproject/hub-champion-" +"training/issues) or email [support@2i2c.org](mailto:support@2i2c.org)." +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/episodes/adminster_hub.mo b/locale/es_AR/LC_MESSAGES/episodes/adminster_hub.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Administering your hub" +msgstr "" + +msgid "teaching: 0 exercises: 0" +msgstr "" + +msgid "OVERVIEW" +msgstr "" + +msgid "Questions" +msgstr "" + +msgid "What is the difference between JupyterHub and JupyterLab?" +msgstr "" + +msgid "Who has control over acces to a Hub?" +msgstr "" + +msgid "What's really happening in the cloud when I run a server?" +msgstr "" + +msgid "Objectives" +msgstr "" + +msgid "Add users to the hub with GitHub" +msgstr "" + +msgid "Configure server options (CPU, GPU, RAM)" +msgstr "" + +msgid "Stop and restart a server" +msgstr "" + +msgid "Exercises" +msgstr "" + +msgid "Why is my programme running slow?" +msgstr "" + +msgid "" +"Suppose a user writes a program to analyze a dataset. On their laptop " +"using testing data the program works and is reasonably fast. When the " +"user tries to run this same program on a real dataset their JupyterHub " +"environment is it frustratingly slow. Why is their interactive computing " +"session being so slow?" +msgstr "" + +msgid "What is the solution to this exercise?" +msgstr "" + +msgid "" +"a. It is caused by a poor internet connection between my home computer " +"and the cloud. b. Too many other users are using the cloud server at the " +"same time. c. I am trying to a computationally intensive task and the " +"cloud computer has poor hardware. d. I am accessing a very large file " +"that is not local to the cloud server being used." +msgstr "" + +msgid "Solution" +msgstr "" + +msgid "" +"d. I am accessing a very large file that is not local to the cloud server" +" being used." +msgstr "" + +msgid "KEY POINTS" +msgstr "" + +msgid "As a Hub Champion your main tool is JupyterHub." +msgstr "" + +msgid "You have control over who has access to your Hub" +msgstr "" + +msgid "A Hub in a cloud is just a computer" +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/episodes/episode_template_components.mo b/locale/es_AR/LC_MESSAGES/episodes/episode_template_components.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Recognising the benefits your hub can provide for your user community" +msgstr "" + +msgid "teaching: 10 exercises: 2" +msgstr "" + +msgid "OVERVIEW" +msgstr "" + +msgid "Questions" +msgstr "" + +msgid "TODO" +msgstr "" + +msgid "Objectives" +msgstr "" + +msgid "" +":::::{card} \n" +"OVERVIEW\n" +"^^^\n" +"\n" +"::::{grid}\n" +":gutter: 2\n" +"\n" +":::{grid-item}\n" +"Questions\n" +"\n" +":::\n" +"\n" +":::{grid-item}\n" +"Objectives\n" +"\n" +":::\n" +"\n" +":::::\n" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "" +"::::{dropdown} Challenge Title\n" +":open:\n" +"\n" +"Challenge content\n" +"\n" +":::{dropdown} Solution\n" +"Solution content\n" +"\n" +":::\n" +"\n" +"::::\n" +msgstr "" + +msgid "Challenge Title" +msgstr "" + +msgid "Challenge content" +msgstr "" + +msgid "Solution" +msgstr "" + +msgid "Solution content" +msgstr "" + +msgid "Images and Figures" +msgstr "" + +msgid "Inline image" +msgstr "" + +msgid "![Catalyst icon](../media/logo/favicon.ico)\n" +msgstr "" + +msgid "![Catalyst icon](../media/logo/favicon.ico)" +msgstr "" + +msgid "Catalyst icon" +msgstr "" + +msgid "Block-level image" +msgstr "" + +msgid "" +":::{image} ../media/logo/catalyst-logo-dark.png \n" +":alt: Block-level image\n" +":width: 200px\n" +":align: center\n" +"\n" +":::\n" +msgstr "" + +msgid "Figure" +msgstr "" + +msgid "" +":::{figure} ../media/logo/catalyst-icon-dark.png\n" +":scale: 50 %\n" +":alt: Catalyst Project logo\n" +"\n" +"This is the caption of the figure (a simple paragraph).\n" +":::\n" +"\n" +msgstr "" + +msgid "Catalyst Project logo" +msgstr "" + +msgid "This is the caption of the figure (a simple paragraph)." +msgstr "" + +msgid "Math" +msgstr "" + +msgid "Inline" +msgstr "" + +msgid "$\\alpha = \\dfrac{1}{(1 - \\beta)^2}$\n" +msgstr "" + +msgid "$\\alpha = \\dfrac{1}{(1 - \\beta)^2}$" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "" +"$$\n" +"(a + b)^2 &= (a + b)(a + b) \\\\\n" +" &= a^2 + 2ab + b^2\n" +"$$ (mymath2)\n" +"\n" +"The equation {eq}`mymath2` is also a quadratic equation.\n" +msgstr "" + +msgid "" +"\n" +"(a + b)^2 &= (a + b)(a + b) \\\\\n" +" &= a^2 + 2ab + b^2\n" +msgstr "" + +msgid "The equation {eq}`mymath2` is also a quadratic equation." +msgstr "" + +msgid "" +":::{card} \n" +"KEY POINTS\n" +"^^^\n" +"- TODO\n" +":::\n" +"\n" +msgstr "" + +msgid "KEY POINTS" +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/episodes/introduction.mo b/locale/es_AR/LC_MESSAGES/episodes/introduction.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Recognising the benefits your hub can provide for your user community" +msgstr "" + +msgid "teaching: 10 exercises: 2" +msgstr "" + +msgid "OVERVIEW" +msgstr "" + +msgid "Questions" +msgstr "" + +msgid "Placeholder text" +msgstr "" + +msgid "Objectives" +msgstr "" + +msgid "" +":::::{card} \n" +"OVERVIEW\n" +"^^^\n" +"\n" +"::::{grid}\n" +":gutter: 2\n" +"\n" +":::{grid-item}\n" +"Questions\n" +"\n" +":::\n" +"\n" +":::{grid-item}\n" +"Objectives\n" +"\n" +":::\n" +"\n" +":::::\n" +msgstr "" + +msgid "Introduction" +msgstr "" + +msgid "Placeholder text." +msgstr "" + +msgid "" +"::::{dropdown} Challenge Title\n" +":open:\n" +"\n" +"Challenge content\n" +"\n" +":::{dropdown} Solution\n" +"Solution content\n" +"\n" +":::\n" +"\n" +"::::\n" +msgstr "" + +msgid "Challenge Title" +msgstr "" + +msgid "Challenge content" +msgstr "" + +msgid "Solution" +msgstr "" + +msgid "Solution content" +msgstr "" + +msgid "Images and Figures" +msgstr "" + +msgid "Inline image" +msgstr "" + +msgid "![Catalyst icon](../media/logo/favicon.ico)\n" +msgstr "" + +msgid "![Catalyst icon](../media/logo/favicon.ico)" +msgstr "" + +msgid "Catalyst icon" +msgstr "" + +msgid "Block-level image" +msgstr "" + +msgid "" +":::{image} ../media/logo/catalyst-logo-dark.png \n" +":alt: Block-level image\n" +":width: 200px\n" +":align: center\n" +"\n" +":::\n" +msgstr "" + +msgid "Figure" +msgstr "" + +msgid "" +":::{figure} ../media/logo/catalyst-icon-dark.png\n" +":scale: 50 %\n" +":alt: Catalyst Project logo\n" +"\n" +"This is the caption of the figure (a simple paragraph).\n" +":::\n" +"\n" +msgstr "" + +msgid "Catalyst Project logo" +msgstr "" + +msgid "This is the caption of the figure (a simple paragraph)." +msgstr "" + +msgid "Math" +msgstr "" + +msgid "Inline" +msgstr "" + +msgid "$\\alpha = \\dfrac{1}{(1 - \\beta)^2}$\n" +msgstr "" + +msgid "$\\alpha = \\dfrac{1}{(1 - \\beta)^2}$" +msgstr "" + +msgid "Block" +msgstr "" + +msgid "" +"$$\n" +"(a + b)^2 &= (a + b)(a + b) \\\\\n" +" &= a^2 + 2ab + b^2\n" +"$$ (mymath2)\n" +"\n" +"The equation {eq}`mymath2` is also a quadratic equation.\n" +msgstr "" + +msgid "" +"\n" +"(a + b)^2 &= (a + b)(a + b) \\\\\n" +" &= a^2 + 2ab + b^2\n" +msgstr "" + +msgid "The equation {eq}`mymath2` is also a quadratic equation." +msgstr "" + +msgid "" +":::{card} \n" +"KEY POINTS\n" +"^^^\n" +"- placeholder text\n" +":::\n" +"\n" +msgstr "" + +msgid "KEY POINTS" +msgstr "" + +msgid "placeholder text" +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/episodes/manage_images.mo b/locale/es_AR/LC_MESSAGES/episodes/manage_images.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Managing Software Images" +msgstr "" + +msgid "teaching: 0 exercises: 0" +msgstr "" + +msgid "OVERVIEW" +msgstr "" + +msgid "Questions" +msgstr "" + +msgid "TODO" +msgstr "" + +msgid "Objectives" +msgstr "" + +msgid "" +"explain the value of reproducibility with containerized software " +"environments" +msgstr "" + +msgid "pull a pre-configured Jupyter or RStudio image container for your hub" +msgstr "" + +msgid "Exercises" +msgstr "" + +msgid "Specifying a custom image tag." +msgstr "" + +msgid "" +"Which of the following would you paste into the _Custom Image_ field to " +"add the latest version of the `handbook-authoring-image` image to your " +"hub?" +msgstr "" + +msgid "quay.io/2i2c/handbook-authoring-image:bbe4225a7940" +msgstr "" + +msgid "quay.io/2i2c/handbook-authoring-image" +msgstr "" + +msgid "docker pull quay.io/2i2c/handbook-authoring-image:ad18f6ea575d" +msgstr "" + +msgid "quay.io/2i2c/handbook-authoring-image:ad18f6ea575d" +msgstr "" + +msgid "Solution" +msgstr "" + +msgid "Notes on the other answers:" +msgstr "" + +msgid "This is using an older version tag and not the latest version." +msgstr "" + +msgid "This is missing the version tag." +msgstr "" + +msgid "Need to remove the 'docker pull' part." +msgstr "" + +msgid "KEY POINTS" +msgstr "" + +msgid "" +"Container images are useful for reproducing software environments across " +"platforms." +msgstr "" + +msgid "Default images are available on the hub" +msgstr "" + +msgid "Additional images can be pulled to the hub if required" +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/episodes/transfer_data.mo b/locale/es_AR/LC_MESSAGES/episodes/transfer_data.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Navigating the filesystem and transferring data to and from the hub" +msgstr "" + +msgid "teaching: 0 exercises: 0" +msgstr "" + +msgid "OVERVIEW" +msgstr "" + +msgid "Questions" +msgstr "" + +msgid "TODO" +msgstr "" + +msgid "Objectives" +msgstr "" + +msgid "recognise and locate your home directory" +msgstr "" + +msgid "distribute datasets to all hub users in a shared directory" +msgstr "" + +msgid "push and pull GitHub repos with `gh-scoped-creds`" +msgstr "" + +msgid "Exercises" +msgstr "" + +msgid "Challenge Title" +msgstr "" + +msgid "Challenge content" +msgstr "" + +msgid "Solution" +msgstr "" + +msgid "Solution content" +msgstr "" + +msgid "KEY POINTS" +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/episodes/troubleshooting.mo b/locale/es_AR/LC_MESSAGES/episodes/troubleshooting.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Troubleshooting and providing user support" +msgstr "" + +msgid "teaching: 0 exercises: 0" +msgstr "" + +msgid "OVERVIEW" +msgstr "" + +msgid "Questions" +msgstr "" + +msgid "TODO" +msgstr "" + +msgid "Objectives" +msgstr "" + +msgid "triage common problems and know where to look for help" +msgstr "" + +msgid "share learning experiences from self-guided study" +msgstr "" + +msgid "foster a sustainable support system for your community" +msgstr "" + +msgid "KEY POINTS" +msgstr "" + +msgid "After following this episode, learners will be able to..." +msgstr "" + +msgid "triage problems encountered by hub users" +msgstr "" + +msgid "Use Grafana to measure hub usage" +msgstr "" + +msgid "" +"choose the most appropriate place to look or ask for help with hub " +"management" +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/index.mo b/locale/es_AR/LC_MESSAGES/index.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "About" +msgstr "" + +msgid "Episodes" +msgstr "" + +msgid "JupyterHub Administration to Empower Research Communities" +msgstr "" + +msgid "Catalyst Project logo" +msgstr "" + +msgid "" +"This lesson is aimed at Hub Champions in charge of 2i2c managed " +"JupyterHubs in the cloud. Learn the fundamentals of adminstering your hub" +" and providing user support to your research and education communities." +msgstr "" + +msgid "" +"Training is delivered over two synchronous workshops, each two hours in " +"length a week apart. The week in between is dedicated to self-guided " +"study with asynchronous support provided by the instructors." +msgstr "" + +msgid "This lesson is under active development and not ready for teaching yet." +msgstr "" + +msgid "TODO: Link to the Spanish repo." +msgstr "" + +msgid "Lesson objectives" +msgstr "" + +msgid "After attending this training, Hub Champions will be able to:" +msgstr "" + +msgid "explain how interactive cloud computing can empower your user community" +msgstr "" + +msgid "control user authentication and access to your hub" +msgstr "" + +msgid "monitor usage and cloud billing costs" +msgstr "" + +msgid "apply software environments through containerization" +msgstr "" + +msgid "navigate the filesystem and transfer data to and from the hub" +msgstr "" + +msgid "provide user support and troubleshoot common issues" +msgstr "" + +msgid "⭐ {ref}`episode-intro`" +msgstr "" + +msgid "{ref}`episode-admin`" +msgstr "" + +msgid "{ref}`episode-images`" +msgstr "" + +msgid "{ref}`episode-data`" +msgstr "" + +msgid "⭐ {ref}`episode-troubleshoot`" +msgstr "" + +msgid "( ⭐ indicates this episode is delivered via a synchronous workshop)" +msgstr "" + +msgid "Acknowledgements and Funding" +msgstr "" + +msgid "" +"We would like to acknowledge Chan Zuckerberg Initiative funding for the " +"\"A Collaborative Interactive Computing Service Model for Global " +"Communities\" project and our partner organisations:" +msgstr "" + +msgid "[2i2c](https://2i2c.org/)" +msgstr "" + +msgid "[The Carpentries](https://carpentries.org/about/)" +msgstr "" + +msgid "" +"[Center for Scientific Collaboration and Community " +"Engagement](https://www.cscce.org/)" +msgstr "" + +msgid "[Invest in Open Infrastructure](https://investinopen.org/)" +msgstr "" + +msgid "[MetaDocencia](https://www.metadocencia.org/)" +msgstr "" + +msgid "[Open Life Science](https://openlifesci.org/)" +msgstr "" + +msgid "Contacting us" +msgstr "" + +msgid "" +"If you would like to get in touch with us, then please email " +"[support@2i2c.org](mailto:support@2i2c.org)." +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/instructors/instructor-notes.mo b/locale/es_AR/LC_MESSAGES/instructors/instructor-notes.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Instructor Notes" +msgstr "" + +msgid "Instructor setup" +msgstr "" + +msgid "" +"Ask to 2i2c engineering team to schedule re-deploy the Hub for training " +"workshop." +msgstr "" + +msgid "Test that it works before the workshop." +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/learners/reference.mo b/locale/es_AR/LC_MESSAGES/learners/reference.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Reference" +msgstr "" + +msgid "Glossary" +msgstr "" + +msgid "This is a placeholder file. Please add content here." +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/learners/setup.mo b/locale/es_AR/LC_MESSAGES/learners/setup.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Setup" +msgstr "" + +msgid "Before joining the training, participants should be able to:" +msgstr "" + +msgid "Access the 2i2c training hub" +msgstr "" + +msgid "" +"GitHub account – Create an account on the [GitHub Sign Up " +"page](https://github.com/signup). We recommend you to check [GitHub " +"Documentation on two factor " +"authentication](https://docs.github.com/en/authentication/securing-your-" +"account-with-two-factor-authentication-2fa) for secure access" +msgstr "" + +msgid "Access a stable internet connection" +msgstr "" + +msgid "Use a web browser" +msgstr "" + diff --git a/locale/es_AR/LC_MESSAGES/profiles/learner-profiles.mo b/locale/es_AR/LC_MESSAGES/profiles/learner-profiles.mo new file mode 100644 index 0000000000000000000000000000000000000000..194ba72e211f43d36cd38e35ca8d887e1c816030 GIT binary patch literal 430 zcmYjNO;5r=5XHn(kDfh@i3bf1wv_`eAED5qOjo|_xnN)?~1d^Rz2@Y1u zHbQEQRbDJ`u+0@_f`FAwG8{@qwGpFFH6!5KZWC?S9B`V%y{+2@Mu;hUE2^b?-BaMD z7*Ejm;C@2lu>L$52UbLt#!OPKN~(nBjx#)=Ejn# z7cc$em@&HE51|u9{jz8XnfI)u+)7&FNXWG!z&Afsb=@}nw%rR3XI*eE+g2RL!65{v zVOvANHRI-OyNz+w>|I}PN?PzX%vV$@rn_6c#MVJq{b9)@27E3S1, 2024. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Python \n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2024-02-02 14:29+0000\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language: es_AR\n" +"Language-Team: es_AR \n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=utf-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Generated-By: Babel 2.13.0\n" + +msgid "Learner Profiles" +msgstr "" + +msgid "This is a placeholder file. Please add content here." +msgstr "" + From b3b7d3a932fec4ef50931958a31beddd9d6c6656 Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 15:09:18 +0000 Subject: [PATCH 12/16] Manually translate title --- locale/es_AR/LC_MESSAGES/index.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/locale/es_AR/LC_MESSAGES/index.po b/locale/es_AR/LC_MESSAGES/index.po index 26643995..d030ed67 100644 --- a/locale/es_AR/LC_MESSAGES/index.po +++ b/locale/es_AR/LC_MESSAGES/index.po @@ -26,7 +26,7 @@ msgid "Episodes" msgstr "" msgid "JupyterHub Administration to Empower Research Communities" -msgstr "" +msgstr "Gestión de JupyterHub para empoderar a las comunidades de investigación" msgid "Catalyst Project logo" msgstr "" From f6f036f6f026aea7a1c1c906d89825b894f4f63e Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 15:09:47 +0000 Subject: [PATCH 13/16] Add info on continuous deployment via GH actions --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index 87bd3765..8040af51 100644 --- a/README.md +++ b/README.md @@ -121,6 +121,10 @@ The following are instructions for localising the Jupyter Book to Spanish, adapt > jovyan@jupyter-username:~$ jupyter-book build . > ``` +## Depolyment + +On push to main, the website will be deployed at [https://czi-catalystproject.github.io/hub-champion-training/](https://czi-catalystproject.github.io/hub-champion-training/) via the GitHub actions defined in `.github/workflows`. + ## Authors - [Toby Hodges](https://github.com/tobyhodges) From ee50a3c455791db90c1769752ec91d41138e6c10 Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 15:13:26 +0000 Subject: [PATCH 14/16] Manually translate title --- .github/workflows/deploy_website.yml | 11 +++++++++-- locale/es_AR/LC_MESSAGES/index.mo | Bin 430 -> 578 bytes 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy_website.yml b/.github/workflows/deploy_website.yml index 4f6a4d7c..292aa3af 100644 --- a/.github/workflows/deploy_website.yml +++ b/.github/workflows/deploy_website.yml @@ -44,10 +44,17 @@ jobs: # path: _build/.jupyter_cache # key: jupyter-book-cache-${{ hashFiles('requirements.txt') }} - # Build the book - - name: Build the book + # + + # Build the book in English + - name: Build the book in English run: | jupyter-book build . + + # Build the book in Spanish + - name: Build the book in Spanish + run: | + sphinx-build -b html -D language=es_AR . _build/html/es # Upload the book's HTML as an artifact - name: Upload artifact diff --git a/locale/es_AR/LC_MESSAGES/index.mo b/locale/es_AR/LC_MESSAGES/index.mo index 194ba72e211f43d36cd38e35ca8d887e1c816030..9c163492898c962cc1aaaf84b4e9cb8ab704b759 100644 GIT binary patch delta 211 zcmYj}K?(vf3`ILSCvfc|2hgPpK^G#T&Pu#NoCdAfc1Sx8v(ig=4MDtt-otaaG~M~( zksnCjz5B{9pI&}bl8(?925I@rMEY2m3fD}jM&?@hN>@c)wUKyL?_j2_aVA8@XuN~y zVPPxZ5W|)NA(sc3duwZFqM@KR?2lB&;bYWh#gala@23Mz@TaVh5lAeW7#R>w7@+jY Rp;1#v=f<7W^B&72P(PHjJ_Y~) delta 53 ocmX@avW{8jo)F7a1|VPrVi_P-0dbIk4v^gdl+*>%8_Sv)0ko(E@&Et; From 48aa52fdec02288361b42ea5e19e58fdf55ecdbb Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 17:19:22 +0000 Subject: [PATCH 15/16] Add H1 heading --- CONTRIBUTING.md | 16 ++++++++-------- LICENSE.md | 5 ++--- 2 files changed, 10 insertions(+), 11 deletions(-) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 6c2b81c8..e142ef05 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,4 +1,4 @@ -## Contributing +# Contributing [The Carpentries][cp-site] ([Software Carpentry][swc-site], [Data Carpentry][dc-site], and [Library Carpentry][lc-site]) are open source @@ -6,7 +6,7 @@ projects, and we welcome contributions of all kinds: new lessons, fixes to existing material, bug reports, and reviews of proposed changes are all welcome. -### Contributor Agreement +## Contributor Agreement By contributing, you agree that we may redistribute your work under [our license](LICENSE.md). In exchange, we will address your issues and/or assess @@ -14,7 +14,7 @@ your change proposal as promptly as we can, and help you become a member of our community. Everyone involved in [The Carpentries][cp-site] agrees to abide by our [code of conduct](CODE_OF_CONDUCT.md). -### How to Contribute +## How to Contribute The easiest way to get started is to file an issue to tell us about a spelling mistake, some awkward wording, or a factual error. This is a good way to @@ -37,14 +37,14 @@ introduce yourself and to meet some of our community members. Note: if you want to build the website locally, please refer to [The Workbench documentation][template-doc]. -### Where to Contribute +## Where to Contribute 1. If you wish to change this lesson, add issues and pull requests here. 2. If you wish to change the template used for workshop websites, please refer to [The Workbench documentation][template-doc]. -### What to Contribute +## What to Contribute There are many ways to contribute, from writing new exercises and improving existing ones to updating or filling in the documentation and submitting [bug @@ -59,7 +59,7 @@ are particularly valuable**: it's easy for people who have been using these lessons for a while to forget how impenetrable some of this material can be, so fresh eyes are always welcome. -### What *Not* to Contribute +## What *Not* to Contribute Our lessons already contain more material than we can cover in a typical workshop, so we are usually *not* looking for more concepts or tools to add to @@ -73,7 +73,7 @@ platform. Our workshops typically contain a mixture of Windows, macOS, and Linux users; in order to be usable, our lessons must run equally well on all three. -### Using GitHub +## Using GitHub If you choose to contribute via GitHub, you may want to look at [How to Contribute to an Open Source Project on GitHub][how-contribute]. In brief, we @@ -93,7 +93,7 @@ Each lesson has a team of maintainers who review issues and pull requests or encourage others to do so. The maintainers are community volunteers, and have final say over what gets merged into the lesson. -### Other Resources +## Other Resources The Carpentries is a global organisation with volunteers and learners all over the world. We share values of inclusivity and a passion for sharing knowledge, diff --git a/LICENSE.md b/LICENSE.md index 7632871f..4325999a 100644 --- a/LICENSE.md +++ b/LICENSE.md @@ -1,6 +1,5 @@ ---- -title: "Licenses" ---- +# Licenses + ## Instructional Material From b17522c00823784ed866617b5da54c27d5017ee8 Mon Sep 17 00:00:00 2001 From: jnywong Date: Fri, 2 Feb 2024 17:20:10 +0000 Subject: [PATCH 16/16] Add Hub Champions Training media --- _config.yml | 4 +- conf.py | 4 +- episodes/episode_template_components.md | 22 +- index.md | 7 +- media/logos/2i2c/favicon.ico | Bin 0 -> 15406 bytes media/logos/2i2c/logo-icon.png | Bin 0 -> 6086 bytes media/logos/2i2c/logo-wide.png | Bin 0 -> 26657 bytes .../Chan_Zuckerberg_Initiative.svg | 0 .../catalyst}/catalyst-icon-dark.png | Bin .../catalyst-icon-light-bg-darkgreen.png | Bin .../catalyst-icon-light-bg-white.png | Bin .../catalyst}/catalyst-logo-dark-bg-white.png | Bin .../catalyst}/catalyst-logo-dark.png | Bin .../catalyst-text-dark-rectangle.png | Bin .../catalyst}/catalyst-text-dark-square.png | Bin media/{logo => logos/catalyst}/favicon.ico | Bin media/logos/hub-champion-training/logo.svg | 277 ++++++++++++++++ media/logos/hub-champion-training/logo_es.svg | 172 ++++++++++ media/logos/hub-champion-training/text.svg | 310 ++++++++++++++++++ media/logos/hub-champion-training/text_es.svg | 32 ++ 20 files changed, 810 insertions(+), 18 deletions(-) create mode 100644 media/logos/2i2c/favicon.ico create mode 100644 media/logos/2i2c/logo-icon.png create mode 100644 media/logos/2i2c/logo-wide.png rename media/{ => logos}/Chan_Zuckerberg_Initiative.svg (100%) rename media/{logo => logos/catalyst}/catalyst-icon-dark.png (100%) rename media/{logo => logos/catalyst}/catalyst-icon-light-bg-darkgreen.png (100%) rename media/{logo => logos/catalyst}/catalyst-icon-light-bg-white.png (100%) rename media/{logo => logos/catalyst}/catalyst-logo-dark-bg-white.png (100%) rename media/{logo => logos/catalyst}/catalyst-logo-dark.png (100%) rename media/{logo => logos/catalyst}/catalyst-text-dark-rectangle.png (100%) rename media/{logo => logos/catalyst}/catalyst-text-dark-square.png (100%) rename media/{logo => logos/catalyst}/favicon.ico (100%) create mode 100644 media/logos/hub-champion-training/logo.svg create mode 100644 media/logos/hub-champion-training/logo_es.svg create mode 100644 media/logos/hub-champion-training/text.svg create mode 100644 media/logos/hub-champion-training/text_es.svg diff --git a/_config.yml b/_config.yml index 94474808..c8624b4e 100644 --- a/_config.yml +++ b/_config.yml @@ -4,7 +4,7 @@ title: Hub Champion Training author: The Catalyst Project Team email: catalyst-project-core-team@googlegroups.com -logo: images/logo/catalyst-text-dark-rectangle.png +logo: media/logos/hub-champion-training/text_es.svg copyright: '2024' description: >- Lessons for JupyterHub Administration to Empower Research Communities. @@ -35,7 +35,7 @@ html: use_issues_button: true use_repository_button: true home_page_in_navbar: false - favicon: images/logo/favicon.ico + favicon: images/logos/2i2c/favicon.ico parse: myst_enable_extensions: # default extensions to enable in the myst parser. See https://myst-parser.readthedocs.io/en/latest/using/syntax-optional.html diff --git a/conf.py b/conf.py index 87715505..e3e638b1 100644 --- a/conf.py +++ b/conf.py @@ -15,9 +15,9 @@ gettext_location = False html_baseurl = '' html_css_files = ['https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css'] -html_favicon = 'images/logo/favicon.ico' +html_favicon = 'images/logos/2i2c/favicon.ico' html_last_updated_fmt = '%b %d, %Y' -html_logo = 'images/logo/catalyst-text-dark-rectangle.png' +html_logo = 'media/logos/hub-champion-training/text.svg' html_show_copyright = True html_sourcelink_suffix = '' html_theme = 'sphinx_book_theme' diff --git a/episodes/episode_template_components.md b/episodes/episode_template_components.md index b4895e7e..dd1a7070 100644 --- a/episodes/episode_template_components.md +++ b/episodes/episode_template_components.md @@ -80,15 +80,15 @@ Solution content ### Inline image ``` -![Catalyst icon](../media/logo/favicon.ico) +![Catalyst icon](../media/logos/catalyst/favicon.ico) ``` -![Catalyst icon](../media/logo/favicon.ico) +![Catalyst icon](../media/logos/catalyst/favicon.ico) ### Block-level image ``` -:::{image} ../media/logo/catalyst-logo-dark.png +:::{image} ../media/logos/catalyst/catalyst-dark.png :alt: Block-level image :width: 200px :align: center @@ -96,7 +96,7 @@ Solution content ::: ``` -:::{image} ../media/logo/catalyst-logo-dark.png +:::{image} ../media/logos/catalyst/catalyst-dark.png :alt: Block-level image :width: 200px :align: center @@ -106,17 +106,17 @@ Solution content ### Figure ``` -:::{figure} ../media/logo/catalyst-icon-dark.png +:::{figure} ../media/logos/catalyst/catalyst-icon-dark.png :scale: 50 % -:alt: Catalyst Project logo +:alt: Catalyst Project logos/catalyst This is the caption of the figure (a simple paragraph). ::: ``` -:::{figure} ../media/logo/catalyst-icon-dark.png +:::{figure} ../media/logos/catalyst/catalyst-icon-dark.png :scale: 50 % -:alt: Catalyst Project logo +:alt: Catalyst Project logos/catalyst This is the caption of the figure (a simple paragraph). ::: @@ -137,15 +137,15 @@ $\alpha = \dfrac{1}{(1 - \beta)^2}$ $$ (a + b)^2 &= (a + b)(a + b) \\ &= a^2 + 2ab + b^2 -$$ (mymath2) +$$ (mymath1) -The equation {eq}`mymath2` is also a quadratic equation. +The equation {eq}`mymath1` is also a quadratic equation. ``` $$ (a + b)^2 &= (a + b)(a + b) \\ &= a^2 + 2ab + b^2 -$$ (mymath2) +$$ (mymath1) The equation {eq}`mymath2` is also a quadratic equation. diff --git a/index.md b/index.md index b71bb55d..771485fd 100644 --- a/index.md +++ b/index.md @@ -6,7 +6,7 @@ ::::{grid-item} :columns: 4 -:::{image} media/logo/catalyst-logo-dark-bg-white.png +:::{image} media/logos/hub-champion-training/logo.svg :alt: Catalyst Project logo :width: 100% ::: @@ -16,7 +16,7 @@ ::::{grid-item} :columns: 8 -This lesson is aimed at Hub Champions in charge of 2i2c managed JupyterHubs in the cloud. Learn the fundamentals of adminstering your hub and providing user support to your research and education communities. +This lesson is aimed at Hub Champions in charge of 2i2c managed JupyterHubs in the cloud. Learn the fundamentals of administering your hub and providing user support to your research and education communities. Training is delivered over two synchronous workshops, each two hours in length a week apart. The week in between is dedicated to self-guided study with asynchronous support provided by the instructors. :::: @@ -24,6 +24,7 @@ Training is delivered over two synchronous workshops, each two hours in length a ::::: :::{attention} +{bdg-danger}`pre-alpha` This lesson is under active development and not ready for teaching yet. ::: @@ -54,7 +55,7 @@ After attending this training, Hub Champions will be able to: ## Acknowledgements and Funding -We would like to acknowledge Chan Zuckerberg Initiative funding for the "A Collaborative Interactive Computing Service Model for Global Communities" project and our partner organisations: +We would like to acknowledge Chan Zuckerberg Initiative funding for The Catalyst Project "A Collaborative Interactive Computing Service Model for Global Communities" and our partner organisations: - [2i2c](https://2i2c.org/) - [The Carpentries](https://carpentries.org/about/) diff --git a/media/logos/2i2c/favicon.ico b/media/logos/2i2c/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..76aef0de905c6fbe76f039e7e3415ab4daf4f25a GIT binary patch literal 15406 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 U+oBI?14oVX)3=`}u(K%eU#?x4ivR!s literal 0 HcmV?d00001 diff --git a/media/logos/2i2c/logo-icon.png b/media/logos/2i2c/logo-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..cd420f42213f9cf7d4d35dc507d64f1c84cafd17 GIT binary patch literal 6086 zcmV;%7dhyOP)00009a7bBm000XU z000XU0RWnu7ytkO0drDELIAGL9O(c600d`2O+f$vv5yP z zIw=KBDCfLF8Ain(i;gJFv9-8Eu7!}N#orAUMT=Yt;lRYrijalrye|H(2%1;!)5ZV& zWZyjHjNAyJb@%^aN_}`b>FkbeAf_Pco^=X^`Mg+(%nPA)_jgVTNfRu95D1zp2G2%k-Cpky)}7D}{hKz;O%jN|Iy57y|_1 zIO1^|t%FrUU^mDXp9|vPKA-R^WoN0%c;12iC!Ln=jjvZZ%#AYz6E_ zy6zbzh8Z#(qlJK!sO!p)I2N!Q8)65C3*LA;P5!esh*`~UdUY5^LjI#*r3S}KR zyK-sdH8KpNgut#)J}}W$GR8G3Pppn95q!ZS$UbnDaIJsz&#T5Z0uZH9!nz-P%NijjU=c9d2$~!nUwxMnA`v09vO^pgo5F$nZRx%jQ%R*(V;2IaNX_E4mxk#1 zpBBj$gyT#nA%<9mfQm7Tzzp{75%k_0!}QvVLu4BeL);bU*o1)IAykZsNgcRCpU&Px z#~!iA5^P6Rpl9RkO^QVbtu9jMBVtnL(FY5j2<(Xqx>70>osY1#CIe&E5LgR313wctLUA z@Z*J=suR+H3@ijppp&jWMKk!&&;PVQ$Bq{1@FAgG$fNX#~j% zef8f>I=|4M?BKOwd_3qxy@BlL=Bbq5*kBFdI-tE^Q2!Yg;BG+&##joxHXVy_ z?$QSR$N3G)8kmZ4`eUy}w|dHH!k=hzE6%LR$pygc{dfCWApi3B5IO7L=|ix9Qcl)>E|(y)43wHA$z` z-}m*mE@d6*x{rr-kwV`lktHI7fg6N^QruNlKTtI>TLU-lsj1t!5P^r|gx8W+&GhR`GEK=A)TVNry3TKY7)nnfsN*Z4bCiL|nD1PA= z>z-SbH&AE`Q(Fiugr;<-O|=HNBd6J412Ig!m~LwWg5oS@h5}Fu(~A`7s%-|ylVm7x ziGqMTChnf_q2WTbyAh}{JaDK$Pd?&!H3wZzjSqSChNS&+!~+Q0uP*1$3hYEoskM4G z$dKVcc6{{2+69%Xnj`~(HTdIuyS1JR0lf38x^_AdKl|;|!(Mhqhp)bE(hEOdr=;*> zlRU)({lLNK*A_+|*L}XW5KK>(Vxj8n#U13%3AYO|hz<|_+pS#s=q3>)ovIxpc&FMM zjPBif5clEC`MP(v*WuVBdVdcSBLTXhwS<6vB4ukTWGKkx>!dEx7BQ#~{qC>y0?|CQ zLYs~dqH^FFwRSbovhzYZMi1uFU34FQK6pC>f?$XV!E`SU9||r6ST(e6mMnepexkK67KjmVL6;vTxT(rGm5Dzuwt3a?GwICk-mT5P|LvG?OM= zFx!xwJ)IpEVbd+D5aabQO}$hMe6GN|ALM#tjL~#+k9J()yt_s4v(Y(51}O+X-O7=T{y}rP&Xk6DJn8!N`UM0@27^m3{aE=9RR=>hNMdSr&~hU zOq-S|L*N{-IF3+4o#4#*4c?bvH|0bBB7eO6JMkSp*;*x8OPlIWwa^8N{=?63w!j9v zK^dXmSgX*cdvs@|IO4Iactuf)05Jdtc76DHlPy5TXpa-NR*R4{mW9iVfOrrQV6pqB z`*BjgJ~NuW%Y^UAoM zON4Emr~AkCbgf5SyRa3eGXm0dq@P1WY@E zL>Z3`GDd1?1U_oVBy_9+!1>4wvyBomM-DPZWI2yM)ZZdRIr5Ro7JKd;Di=jVma^V@ z4fc&tq%9ZyxU$>~Jc1q@f_iPhAC$12x7hffX_vA{M~cEJ{@C`^sm=w)L4QH(41<7p z zbC#K8z+%IqW0Hqs1co6N0>gN)YqZJsekGn=lrM5A1WdcY9tN~;A3o&tY}&&SP-x-) z>RZe=GJBK1A8ez+a68zY$KvjeI5@s`-S&++I$)7t3U-i9{++Cb(4NmOI) z@j8C<*+$-X?^QD`1h_xv-nb|7QSj~Hyfo}Rh?BU)+zwnPypEg-q6*jO8+A{!e!J#& zo>OJdXBwh!AAYOfIJ@D>2n~_p3I#P%#WekYmozuG# zTRaH9fBj~(zt2C{dHR*%#9jwLp#ACWZf}Nco=}datWk!5I|LCV4GtoC`*bvm2g3Sv z_MS+Ow+afZ(0|Rw>sFeAa75K1DKaAjTr|W4Y2lsEHsHY|ux3$Pm#{$G_*=3r1}Ujp zR4=ib6>kt@AA?>r3<8EfjCuk5V;?Mn!zwL_yK|7A36~=5IC=cvFw?x_1g;XqknO_~ zMXlJBjlVlWZ&IAeV6g_d8$$qR&eyvJh3x}^gB(QYWq8!zfoxI`US*Vfs||vPr8qZ(nw*^ZRS+ zl35)vV=?L6-OwH}$Z@b(M5rd~fWTRYAa`c`eh3)?h$7GL3j)XF>H;_M$w%yWrQ4|C z#2nwwSIJ^@r(xq*s6o*^UFX34eV^hjD%~-Z_?`dy^V_kU>pc5G!;6=6dFS-75m~J$ zP{p(*JbFTqf|kf)bleauq(A&Anni@bv>y-rq`x?Ii&pT>pPITIYqj_MrG~b(^AiGD zK#+4s2to?0g`neFtb8BcB8nn&5~K?jEe}a#YtUz;YZ;K3$bwZ+MxcsEPYABlyi6I# zv`mMtH9$;|WZw@g1OD|RGge{K2zWv$Qp0MCU>mwcI%J39hza_El&sE;BMU(@GDdjx zB#q3`==fTdEN#a|5Zupo*j{8B1Z;#Egy){nTR^Y>Qa^x=5{Lj+p`X>l`+$BZTTdsI zB$tpe!pC=Po1jJYok_9~1i?`S!a5w*D60K^wYxB35&D5tZ<tcblYaS^d%mJ$a7wO4=>@8ZG51Da=T=YNQ62eenXtC+? zIb*%R0@e+3yVWdoY93gGCfsFp17}-l);GTNKi;zO)%o33vb?YsH)t==O?h@($T~F- z1j$V7RR8bO{Z;>yZO*QkCuRrmld)S&w`~Foxto8l6KLmYn`CN86%)5{*Ohf;<8l^S zvZEx-p5b2pz0S|Mvdk`O+$fuS*G>N}Aq*9o^G&yKfpX3uQzQJjM}xq#hT`XkoAoc- zKfg-|UOnN&4=Rl+E0i~MO8qiFp77J-gJ z$bx$m$BZCY0MrNuNsqD+Qbc(=o!lbO)mM8#tk0eUyfwi5?vlC%7|Y30`JsfN60b ze%4eAzv1=z#CbP{$odTHu?ldB zg0w`mFa9Lkp7Hzo2>}!JAnKr_Bcq^Y4f z2ScqemJw4MlJ5P-@6)-HLM&+n&bmX#;yx)TG9=A)3zB{MCah(_y+{@iY(~&6Z>Uw8 z!RT*4>n{XYx1`6i>lPjHKH9QHb7P}^rr&e=3IRbg39(3qqkHi%ztjYCjx?-JD%GDv zorD;IOyo{`Pqj80)&OXgFp)|ngVEhE15<9&#nYWE=Zisiuy7dQhUuO(gd0j4V`jo2 z$(hr6o|X_yw+cFQMuBOjyp^8S%MAHvn?*fT%Wpx!Sbbe^L$P7c1p11uE$seM=egQV zEhbxq!y4Nk{rtUYynZ&AmBONp%2mREE}YdCL|o@C*>ePKV`JlG-REix!DOqT)1;=; z?3M{wyVj9(~Bs8cx;;Kha>z#-ojT z{ZJ4g1adg>gGZ15FiS#CkwIjkNe%ACf&1(9vzPRJbsya2k3J}3yBXLff}qv_1b*iV zh4nMGpRi*pK@aRm0_#Me>cBd6gY5(s0;%DVndqrT85gt@Tk^d;u{!3u z;tSg*`m zP7=fPL(<&J!XE8$EQ6AG%O;C~=}W>Q0IBpYvly7Jq#y#2$}pgnPevxW6@%G<7ZW5e z0+8BNECfNET4j8Y9ZD)N?nLU_x;VAUB$XoVg%SH3M~|;gk`Nb&$r-XHs4x|Gu}lYJ zHu|DBsp*Q3hz9}Wg{s@AKO1M;L=cSH@xD1^7=r-H#AFspwA85ApN(>3&7c@LJ(sJ{ z8AfG>FnXo7xZkL4y~d7_{?YN(se%yG+{T?1WDVOZquyB-6-LifXICjRcpGX=a)q{I z#lZrcVzn4UU7_t*Aq22FQ4cBBGBGw#mC~6UbOK#cn04M#4={AN;M5=H)(i`P6}VA< z*cK50Yb-)L96Oi^(xN1tDVqe~W2F#$kXdqsI87{wlrcLaq=VH$0G@Ri8lG0KWRjTV zu_PGohxJ16VL>DdPPNB@-X^C+gOC{^_;`ZYwd;bqQWat%2Ld1}%-9$Q^dfUY@Hz18 zt;a;eon#9U4Ota{PiBSS!!FYx$eM})<|R3ESrvd!=7rz`K@1P?Iw8qx<|`A^17v~3 z?CNU$tnERtF1ZmxJEO!rPWhaXcPPN;XNLiWcLRrNX+T_u3E8yg?< z;@=4iL4z%8L50VppfO?o>7iQ-f4I13art-RJ7RjmLI?pY#>oDAj!?5PCS;+k0`D=B zt`dhxcsHHO?vSVoK}%A)OC*a+t2b|7<~x3HSO^i~3q%$2N>aFGBB!Jlsd^M;?+H@2 z9!ZwEi$>+{Nq7rc64liIuM&>!bwy2zW>qcx+K@w+YqgCkFZk&Ae M07*qoM6N<$g78{wKL7v# literal 0 HcmV?d00001 diff --git a/media/logos/2i2c/logo-wide.png b/media/logos/2i2c/logo-wide.png new file mode 100644 index 0000000000000000000000000000000000000000..522696195c8ed710186709d53fedeec853a5775b GIT binary patch literal 26657 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 Bid6sr literal 0 HcmV?d00001 diff --git a/media/Chan_Zuckerberg_Initiative.svg b/media/logos/Chan_Zuckerberg_Initiative.svg similarity index 100% rename from media/Chan_Zuckerberg_Initiative.svg rename to media/logos/Chan_Zuckerberg_Initiative.svg diff --git a/media/logo/catalyst-icon-dark.png b/media/logos/catalyst/catalyst-icon-dark.png similarity index 100% rename from media/logo/catalyst-icon-dark.png rename to media/logos/catalyst/catalyst-icon-dark.png diff --git a/media/logo/catalyst-icon-light-bg-darkgreen.png b/media/logos/catalyst/catalyst-icon-light-bg-darkgreen.png similarity index 100% rename from media/logo/catalyst-icon-light-bg-darkgreen.png rename to media/logos/catalyst/catalyst-icon-light-bg-darkgreen.png diff --git a/media/logo/catalyst-icon-light-bg-white.png b/media/logos/catalyst/catalyst-icon-light-bg-white.png similarity index 100% rename from media/logo/catalyst-icon-light-bg-white.png rename to media/logos/catalyst/catalyst-icon-light-bg-white.png diff --git a/media/logo/catalyst-logo-dark-bg-white.png b/media/logos/catalyst/catalyst-logo-dark-bg-white.png similarity index 100% rename from media/logo/catalyst-logo-dark-bg-white.png rename to media/logos/catalyst/catalyst-logo-dark-bg-white.png diff --git a/media/logo/catalyst-logo-dark.png b/media/logos/catalyst/catalyst-logo-dark.png similarity index 100% rename from media/logo/catalyst-logo-dark.png rename to media/logos/catalyst/catalyst-logo-dark.png diff --git a/media/logo/catalyst-text-dark-rectangle.png b/media/logos/catalyst/catalyst-text-dark-rectangle.png similarity index 100% rename from media/logo/catalyst-text-dark-rectangle.png rename to media/logos/catalyst/catalyst-text-dark-rectangle.png diff --git a/media/logo/catalyst-text-dark-square.png b/media/logos/catalyst/catalyst-text-dark-square.png similarity index 100% rename from media/logo/catalyst-text-dark-square.png rename to media/logos/catalyst/catalyst-text-dark-square.png diff --git a/media/logo/favicon.ico b/media/logos/catalyst/favicon.ico similarity index 100% rename from media/logo/favicon.ico rename to media/logos/catalyst/favicon.ico diff --git a/media/logos/hub-champion-training/logo.svg b/media/logos/hub-champion-training/logo.svg new file mode 100644 index 00000000..bcd6a3a2 --- /dev/null +++ b/media/logos/hub-champion-training/logo.svg @@ -0,0 +1,277 @@ + + diff --git a/media/logos/hub-champion-training/logo_es.svg b/media/logos/hub-champion-training/logo_es.svg new file mode 100644 index 00000000..a7f5b9bd --- /dev/null +++ b/media/logos/hub-champion-training/logo_es.svg @@ -0,0 +1,172 @@ + +Formación paraCampeones del hub diff --git a/media/logos/hub-champion-training/text.svg b/media/logos/hub-champion-training/text.svg new file mode 100644 index 00000000..84d822d1 --- /dev/null +++ b/media/logos/hub-champion-training/text.svg @@ -0,0 +1,310 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/media/logos/hub-champion-training/text_es.svg b/media/logos/hub-champion-training/text_es.svg new file mode 100644 index 00000000..de731ffd --- /dev/null +++ b/media/logos/hub-champion-training/text_es.svg @@ -0,0 +1,32 @@ + + + + + + + Formación paraCampeones del hub + +