Continuous Integration / Continuous Development (CI/CD) - Github Edition: Glossary

Key Points

Introduction
  • CI/CD is crucial for any reproducibility and testing

  • Take advantage of automation to reduce your workload

Exit Codes
  • Exit codes are used to identify if a command or script executed with errors or not

  • Not everyone respects exit codes

Being Assertive
  • You can do whatever you like in a test, as long as you return the right exit code

  • Pytest, and other test utilities, will propagate the exit codes correctly

Understanding YAML
  • YAML is a plain-text format, similar to JSON, useful for configuration

  • YAML is a superset of JSON, so it contains additional features like comments, while still supporting JSON.

YAML and GitHub Actions
  • You should bookmark the GitHub Actions reference. You’ll visit that page often.

  • Actions are standalone commands that are combined into steps to create a job.

  • Workflows are made up of one or more jobs and can be scheduled or triggered.

Coffee break!
  • You’ll be back.

  • They’re the jedi of the sea.

Hello CI World
  • Creating .github/workflows/main.yml is the first step to salvation.

  • Pipelines are made of jobs with steps.

Adding CI to Your Existing Code
  • Setting up CI/CD shouldn’t be mind-numbing

  • All defined jobs run in parallel by default

Matrix
  • Using matrix allows to test the code against a combination of versions.

Coffee break!
  • Stupid mistakes happen, but telling a computer to do what you mean versus what you say is hard

Dependent Jobs
  • We can specify dependencies between jobs running in a series using the needs value.

A Skimmer Higgs
  • Making jobs aware of each other is pretty easy.

  • Artifacts are files created by the CI that are offered for download and inspection.

Getting into the Spy Game
  • Secrets in GitHub actions allow you to hide protected information from others who can see your code

Making Plots to Take Over The World
  • Another action, another job, another artifact.

Let's Actually Make A Test (For Real)
  • This kind of test is a regression test, as we’re testing assuming the code up to this point was correct.

  • This is not a unit test. Unit tests would be testing individual pieces of the Framework code-base, or specific functionality you wrote into your algorithms.

Homework
  • Use everything you’ve learned to write your own CI/CD!

Bonus Episode: Building and deploying a Docker container to Github Packages
  •  Python packages can be installed in Docker images along with ubuntu packages.

  •  It is possible to publish and share Docker images over github packages.

Glossary

The glossary would go here, formatted as:

{:auto_ids}
key word 1
:   explanation 1

key word 2
:   explanation 2

({:auto_ids} is needed at the start so that Jekyll will automatically generate a unique ID for each item to allow other pages to hyperlink to specific glossary entries.) This renders as:

key word 1
explanation 1
key word 2
explanation 2