--- tags: WIP, Tech --- # GitHub actions ## Problem - travis-ci.org [shutting down at the end of 2020](https://mailchi.mp/3d439eeb1098/travis-ciorg-is-moving-to-travis-cicom) - used across the OME/IDR GitHub organizations since 5-8 years - already impacts CI builds as Travis VM are getting migrated # Solutions - Migrate to [travis-ci.com](https://travis-ci.com) - Existing [migration guide](https://docs.travis-ci.com/user/migrate/open-source-repository-migration). Looks straightforward - Unclear whether this will fix build times and issues reported over the years - See also https://blog.travis-ci.com/2020-11-02-travis-ci-new-billing re long-term OSS support - Alternative: migrate to [GitHub actions](https://github.com/features/actions) - Builds on growing experience from last few weeks - Requires conversion work ## GitHub actions - Based on the creation of workflows - see [workflow syntax reference](https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions) - Workflow is made of jobs, parallel or sequential - Workflow is triggered based on event e.g. push or pull request - Job is a series of steps - A step is a task that can run a command or an actions e.g. checkout a repo, run a command. - Actions: smallest building block. Standalone command that can be created, exchanged, reused - Support for various environments incl. Windows/Linux/Mac, various flavors of Java/Python - omero-py: example of [monolithic workflow](https://github.com/ome/omero-py/blob/v5.8.3/.github/workflows/workflow.yml) - executed on every push or pull requrest - test job running on multiple Python versions and operating systems: calls tox - publish job executed on tags only: deploys the distribution to PyPI - Examples of execution - [Pull Request](https://github.com/ome/omero-py/actions/runs/319388544) - [Tag](https://github.com/ome/omero-py/actions/runs/283027113) - Pro: closest to the current Travis paradigm i.e. single multi-stage build - Con: potentially requires a per-repo conversion - omero-web: example of [multiple workflows](https://github.com/ome/omero-web/pull/240/files) - three types of workflows: code review, build-n-test and build-n-publish - Pro: abstract core checks into a set of re-usable workflows (see below) - Con: no dependency between separate workflows - [Organization workflow templates](https://docs.github.com/en/free-pro-team@latest/actions/learn-github-actions/sharing-workflows-with-your-organization#creating-a-workflow-template) - Stored under [the OME .github repo](https://github.com/ome/.github/tree/master/workflow-templates) - Requires a YML file (workflow) + a JSON file (metadata) - Example template: [publish to PyPI on tag](https://github.com/ome/.github/tree/master/workflow-templates) - Appears when creating a new workflow e.g. https://github.com/ome/omero-weberror/actions ## Open questions - Other alternatives to consider? - [> 200 public OME repos using Travis](https://github.com/search?q=org%3Aome+path%3A%60.travis.yml%60+archived%3Afalse+public%3Atrue&type=Repositories) - not including IDR - Burden of implementation (and maintenance) could be reduced by defining classes of workflows, turn them into templates and then applying them to all repos - build Java library with Gradle - for insight: we might have to review the strategy used to package app. javapackager has been removed from java 11 (oracle). Moving towards jpackage - build Java library with Maven - build Ansible role - I think we can make this easier with an action, I'll look into this (Simon) - Worth noting that we'll need to upgrade to Molecule 3 at some point - Seb: possible starting points - https://github.com/robertdebock/molecule-action and https://github.com/robertdebock/galaxy-action - build Docker image - build and test Python library with tox - build Sphinx documentation - ... - Might require some audit - Roll-out strategy: - can be started in the background as soon as the one vs multiple workflows is decided (e.g. https://github.com/ome/.github/pull/5) - use a single commit to master strategy to avoid noise - intermediate strategy might be to immediate migration to travis-ci.com while repositories are getting converted to GH actions ## Who's doing what - https://github.com/ome/omero-plugins/ (Seb) - rOMERO-gateway, minimal-omero-client and supermodule left - https://github.com/ome/ansible-roles (Simon) - https://github.com/ome/omero-insight/ (J-M) - https://github.com/ome/bioformats (J-M) - https://github.com/ome/omero-python-superbuild (Seb)