A Tour of Github Actions

I have been waiting for github to take the CI plunge for quite some time, gitlab showed just how well the combo of code repo/review/planning and the ci/cd step worked together when all under one roof. Honestly the only thing keeping gitlab CI from truly dominating the market is just how much momentum is behind github for better or worse the open source community home is github.

Actions right now is available in beta for both private and public repo's ive not seen any mention of pricing so far but im assuming it will be competitive with whats currently available elsewhere (travis/drone/circle/gitlab) As for the product itself im liking what I see so far they have obviously learned from the rest of the market, the biggest example of this I can see is the way they have done the workflow files rather than a single build file that sits in the root of the repo you have a .github folder that you can load with purpose built actions or in the terminology of the application "workflows". This allows you to do things like have a frontend build and a backend build and keep the relevant parts separate, a godsend to those of us who have struggled to make mono repo's work in the various build tools out there today which has often left me trying to fit a square peg into a round hole.

So far ive tooled around with python/java/elixir builds and have found everything to be pretty intuitive outside of secrets which are in the repo settings rather than the actions panel, while I can of understand the reasoning for this from a UX perspective this still feels a bit awkward.

name: Python package
on: [push]
jobs:
  build:

    runs-on: ubuntu-latest
    strategy:
      max-parallel: 4
      matrix:
        python-version: [3.7]

    steps:
    - uses: actions/checkout@v1
    - name: Set up Python ${{ matrix.python-version }}
      uses: actions/setup-python@v1
      with:
        python-version: ${{ matrix.python-version }}
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install pipenv
        python -m pipenv install --dev --system
    - name: Linting
      run: |
        flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
        flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
    - name: Tests
      run: 
        pytest 

An example build file that builds the application lints/tests and reports the output for a python/fastapi application using pipenv was able to be put together pretty quick and was pretty enjoyable the ability to run my various builds through multiple versions of a language by default was a welcome feature however I did not make much use of it in this example.

Between this and security features recently added to github they are slowly winning me back to the platform after I felt like they had squandered their market dominance by slowing down the feature pipeline to barely a drip between 2014-2018 4 years is a long time to provide little in the way of innovation or feature sets and I found myself thinking hard about gitlab or gitea to get access to more enthusiastic ecosystems.