Modern Python Projects Transcripts
Chapter: CI
Lecture: GitHub Actions in action
Login or
purchase this course
to watch this video and the rest of the course contents.
0:00
Let's see GitHub actions in action. I have pushed my calculator project to GitHub, and now I want to add some GitHub actions to it.
0:10
Setting up a basic workflow is quite easy. You can go to the actions tab, and select the workflow most suitable to your project, as you can see GitHub
0:24
has automatically detected that this is a Python project and I have some suggestions at the top. But down there I have even more options.
0:38
So, here we have to select which workflow we want to start with. Don't worry if none of them looks perfect, you can always edit it by hand.
0:47
So, just like with a cookie cutter template, select something that looks decent and then we will modify it. Let's go with the Python application.
0:59
Now we have a chance to modify this configuration file and then we can click, start commit to commit it to our repository.
1:07
Name is how this GitHub Action will be displayed in the interface, so we can change it to whatever we want
1:12
Next we have to define when we want to run this action. With this configuration, we will run it each time we push a new commit to
1:26
master branch, and also each time we create a new pull request to the master branch. And that's actually what I want to have.
1:33
So let's leave it like that. Next we specified that we want to use the latest version of Ubuntu image and then we have our steps. In the first step,
1:42
we check out the code, then we set up Pytho 3.8. If you want, you can specify multiple Python versions,
1:49
but 3.8 is good enough. Then we install some dependencies. So first we install an update.
1:56
pip,Then we install Flake ate pytest that we're going to use later. And then if we have requirements.txt file.
2:05
We also install dependencies from that file. So again, this is a very good setup. I'm going to leave it next.
2:12
We run Flake 8 twice, each time with different arguments. I will leave it for now as it is, to see how it works. And then in the last step,
2:20
we run pytest. So Actually, this is a very good setup, so let's use it. And once we're happy with it, let's add black later on. So I click,
2:31
Start commit I need a commit message and we're all set. Let's go back to our code.
2:45
Let's modify some files and let's try to create a new pull request to see that our GitHub action is working. So first,
2:53
let's do git pull to get our latest code from github. Now let's go to the code editor. And let's, for example, modify one of the tests.
3:04
Let's change it, so it fails. Now let's try to commit this code. As you can see, I'm not running Tox, and I have pre-commit disabled.
3:21
So nothing stops me from committing a broken test with code repository.
3:27
When we refresh the repository, you can see that there is this yellow dots suggesting that there is something happening in the GitHub actions.
3:35
When we click it, you see that we have one check in progress. Let's open the details and it's broken, our GitHub
3:46
action has failed during the pytest phase, and here we have the error message. You can click around to see the interface,
3:58
and once you're done, you can go back to the code and you can fix it. This time let's try to create a new branch and let's use a pull
4:13
request with this new commit. So we have our first pull request.
4:49
As you can see, the gitlab actions are still running. It should take around half a minute. We can click the details. Okay,
5:01
Now it's starting. So as you can see, those are all the steps that we set up. So, first we check out our code. Then we set up Python version.
5:10
Next we install dependencies. We linked with, Flake 8. We test and now we have this green check,
5:18
which means that we have just fixed our test, if we open it. There is not much happening here because there was no error code
5:27
currently, so we can go back to our pull request. You can see this green check mark here, which means that the GitHub actions are passing.
5:38
So now we know that we can safely merge this pull request and it's going to fix our tests. Great. So one last thing that I want to set up
5:49
is to use black to format, our code. Let's do this directly in the code editor. Let's open our GitHub Workflows configuration file,
5:58
and we actually have to figure out how to add black. So let's go back to the browser and the best place to search for available GitHub
6:06
actions is the GitHub marketplace. So here we can set for Black to see I already search in the past.
6:14
And there are some results. None of them seems to be like the oficial black workflow from the PSF. So, I will just select first one,
6:25
and this one looks pretty easy to use. So, actually, if we want to run in with default settings, we just need this one line. We add a new step here.
6:39
Actually, I can skip the name and I can do this like that. Let's actually run black before running tests. Okay, let's see if it works.
6:57
Okay. just this one file. I'm in the wrong branch. Okay, I can push it directly to Master.
7:30
Don't do get push first I'm just too lazy to untangle this mess. Okay, We should be set up. Let's see if our GitHub actions are still working.
7:42
This might take a bit longer because we just added than new plug in, but in the future, GitHub should use the cache, so it's going to be faster.
7:56
Okay, everything looks fine. So one last thing. Let's go back to our code and let's try to break it So black has something
8:05
to complain about. Again Let's remove some white spaces. That's the easiest way. That's what happens when you don't set up your git repository
8:29
correctly. As you saw, it took a moment before the GitHub actions kicked
8:56
in. So, we saw this green button saying that it's ready to merge. But after a few seconds, it actually disappeared and our GitHub action started.
9:08
So, let's wait for it to finish. Let's see the details, so we actually have something to look at.
9:16
So using black as a plugin seems to be kind of slow because it takes one minute to set it up. So maybe a better idea would be to actually go
9:26
to your git hub actions and in the install dependencies. Just add black here and here you just run command black. just like flake8
9:34
does. Let's go back to our GitHub action to see And it failed. For some reason. I don't get the output, When you refresh,
9:46
you can see the full output from this command. And then black says one file would be reformatted, two files would be left unchanged.
9:55
And we have this huge red icon indicating that there is something wrong with this build
9:58
So now you know that you actually have to go back to this pull request and you have to fix it.
10:09
I will leave this task to you because this lesson is already becoming quite long.