Closed simonw closed 4 years ago
I need to figure out how to build and push the Docker image on releases. Here's the Travis code for that: https://github.com/simonw/datasette/blob/52eabb019d4051084b21524bd0fd9c2731126985/.travis.yml#L38-L47
I'd like to set these up as different workflows that depend on each other, if that's possible.
I want to start three test runs in parallel (on three different Python versions), then if all three pass kick off the PyPI push (without running more tests), then if that passes do the Docker build and push.
A set of steps that execute on the same runner. You can define the dependency rules for how jobs run in a workflow file. Jobs can run at the same time in parallel or run sequentially depending on the status of a previous job. For example, a workflow can have two sequential jobs that build and test code, where the test job is dependent on the status of the build job. If the build job fails, the test job will not run.
When I figure this out I'll update the https://github.com/simonw/datasette-plugin/blob/main/datasette-%7B%7Bcookiecutter.hyphenated%7D%7D/.github/workflows/publish.yml default workflow to do this - right now it runs the tests once on just a single version of Python as part of the package deploy to PyPI step.
This example of jobs depending on each other and sharing data via artifacts looks relevant: https://docs.github.com/en/actions/configuring-and-managing-workflows/persisting-workflow-data-using-artifacts#passing-data-between-jobs-in-a-workflow
I think ${GITHUB_REF#refs/tags/}
is the equivalent of $TRAVIS_TAG
.
I think this is ready. I'll only know for sure the first time I push a release through it though!
I'll close this after the next release successfully goes out.
I tested this new publish pattern (running the tests in parallel before the deploy step) on github-to-sqlite
- skipping the Docker step - and it worked: https://github.com/dogsheep/github-to-sqlite/actions/runs/213809864
Package deploys are still broken, just got this error trying to ship 0.49a1: https://github.com/simonw/datasette/actions/runs/253099665
The workflow is not valid. .github/workflows/publish.yml (Line: 61, Col: 9): Unexpected symbol: '"a"'. Located at position 24 within expression: !(contains(github.ref, "a") || contains(github.ref, "b"))
I think those should be single quoted.
That worked: https://github.com/simonw/datasette/runs/1110040212?check_suite_focus=true ran and deployed https://pypi.org/project/datasette/0.49a1/ to PyPI but it skipped the push to Docker step because there was an "a" in the tag.
Just release Datasette 0.49 - which shipped to PyPI just fine but skipped the Docker step for some reason!
https://github.com/simonw/datasette/runs/1114585275?check_suite_focus=true
I bet that's because the github.ref
actually looks like this:
${GITHUB_REF#refs/tags/}
And the refs/tags/
part has an a
in it.
So now I've released Datasette 0.49 but failed to push a new Docker image. This is bad, and I need to fix it.
I'd like to push to Docker from GitHub Actions, so I think I'm going to create a one-off workflow task for doing that.
Using https://github.com/marketplace/actions/debugging-with-tmate to manually submit a new build from within an interactive GitHub Actions session.
I'm going to switch to using this logic to decide if I should ship to Docker: https://github.community/t/release-prerelease-action-triggers/17275/2
if: "!github.event.release.prerelease"
I shipped the Docker build manually by running the following in a tmate session:
docker login
# Typed my username and password interactively
export REPO=datasetteproject/datasette
docker build -f Dockerfile -t $REPO:0.49 .
docker tag $REPO:0.49 $REPO:latest
docker push $REPO
I'm going to cross my fingers and hope that this works - I don't want to leave this issue open until Datasette 0.50.
It looks like the tests take 3m33s to run in GitHub Actions, but they're taking more than 8 minutes in Travis