You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -15,168 +15,47 @@ _Write your own GitHub JavaScript Action and automate customized tasks unique to
15
15
</header>
16
16
17
17
<!--
18
-
<<< Author notes: Step 4 >>>
18
+
<<< Author notes: Step 5 >>>
19
19
Start this step by acknowledging the previous step.
20
20
Define terms and link to docs.github.com.
21
21
-->
22
22
23
-
## Step 4: Create the JavaScript files for your action
23
+
## Step 5: Add your action to the workflow file
24
24
25
-
_Good job adding the metadata file! :dancer:_
25
+
_Great job! :tada:_
26
26
27
-
## Files
27
+
All of the following steps will add the action to the workflow file that’s already in the repo [`my-workflow.yml` file](/.github/workflows/my-workflow.yml)
28
28
29
-
As you probably know, in JavaScript and other programming languages it is common to break your code into modules so that it is easier to read and maintain going forward. Since JavaScript actions are just programs written in JavaScript that run based on a specific trigger we are able to make our action code modular as well.
29
+
### :keyboard: Activity 1: Edit the custom action at the bottom of the workflow file.
30
30
31
-
To do so we will create two files. One of them will contain the logic to reach out to an external API and retrieve a joke for us, the other will call that module and print the joke to the actions console for us. We will be extending this functionality in our third and final action.
32
-
33
-
### Fetching a joke
34
-
35
-
**Joke API**
36
-
37
-
The first file will be `joke.js` and it will fetch our joke for us. We will be using the [icanhazdadjoke API](https://icanhazdadjoke.com/api) for our action. This API does not require any authentication, but it does however that we set a few parameters in the [HTTP headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers). We need to point out what those are when we get to the code, however it is outside of the scope of this course to cover HTTP in any depth.
38
-
39
-
When we make our request to this API we will get back a JSON Object in the response. That Object looks like this:
40
-
41
-
```
42
-
{
43
-
id: '0LuXvkq4Muc',
44
-
joke: "I knew I shouldn't steal a mixer from work, but it was a whisk I was willing to take.",
45
-
status: 200
46
-
}
31
+
```yaml
32
+
- name: ha-ha
33
+
uses: ./.github/actions/joke-action
47
34
```
48
35
49
-
It contains 3 key/value pairs of data that we can use in our own program or service. In our case, we are only interested in the `joke` field.
36
+
Here is what the full file should look like (we’re using issues instead of the pull request event and removing the reference to the hello world action.)
50
37
51
-
**Joke Module**
38
+
```yaml
39
+
name: JS Actions
52
40
53
-
We will create a file named `joke.js` and it will reside in the `.github/actions/joke-action` directory.
Need an advanced description of the <code>joke.js</code> source code?
79
-
80
-
We first bring in the `request-promise` library that we installed earlier using `npm`.
81
-
82
-
Next we define a set of `options` that the `request-promise` library will use when it makes the request.
83
-
84
-
Read more about [request-promise](https://github.com/request/request-promise/)
85
-
86
-
Inside of the `options` block we add a key named `headers`. This defines the HTTP headers that the **icanhazdadjoke** API expects in each request that comes it's way.
87
-
88
-
**icanhazdadjoke** cares the most about the keys, **Accept** and **User-Agent**, so we need to make sure we fill them in.
89
-
90
-
Next we define an **asynchronous JavaScript function** to make the request for us, storing the JSON Object that is returned in a variable named `res`.
91
-
92
-
Lastly, we `return` the `res.joke` which is only the value associated with the `joke` key of the JSON Object. This value will be random every time our action runs because of how we are interacting with the **icanhazdadjoke** API.
93
-
94
-
This file finishes up by exporting the newly created function so that we can use it in our `main.js` file.
95
-
96
-
### Creating the main entry point for your action
97
-
98
-
**Main Module**
99
-
100
-
We will also create a file named `main.js` that resides inside of the `.github/actions/joke-action` directory.
101
-
102
-
That file will look like this:
103
-
104
-
```javascript
105
-
constgetJoke=require("./joke");
106
-
constcore=require("@actions/core");
107
-
108
-
asyncfunctionrun() {
109
-
constjoke=awaitgetJoke();
110
-
console.log(joke);
111
-
core.setOutput("joke-output", joke);
112
-
}
113
-
114
-
run();
115
-
```
116
-
117
-
Need an advanced description of the <code>main.js</code> source code?
118
-
119
-
Like we did in the `joke.js` file, we are first going to bring in our dependencies. Only this time, our dependencies include something we wrote! To do that we simply use `require()` to point to the location of the file we wish to bring in.
120
-
121
-
We also bring in `@actions/core` so that we can set the output of our action.
122
-
123
-
Next we write another **asynchronous JavaScript function** that stores the return value of `getJoke()` in a variable called **joke**.
124
-
125
-
Then we log the joke to the console.
126
-
127
-
Finally we finish the function with by setting the contents of the joke as the value of the `joke-output` output parameter. We will use this output later in the course.
128
-
_Don't forget to call the `run()` function._
129
-
130
-
### :keyboard: Activity 1: Creating the JavaScript files for your new action.
131
-
132
-
1. Create and add the following contents to the `.github/actions/joke-action/joke.js` file:
3. Create and add the following contents to the `.github/actions/joke-action/main.js` file:
157
-
158
-
```javascript
159
-
constgetJoke=require("./joke");
160
-
constcore=require("@actions/core");
161
-
162
-
asyncfunctionrun() {
163
-
constjoke=awaitgetJoke();
164
-
console.log(joke);
165
-
core.setOutput("joke-output", joke);
166
-
}
167
-
168
-
run();
169
-
```
56
+
You can make these changes in your repository by opening [`my-workflow.yml`](/.github/workflows/my-workflow.yml) in another browser tab and [editing the file directly](https://docs.github.com/en/repositories/working-with-files/managing-files/editing-files). Make sure to select the `Commit directly to the main branch` option.
170
57
171
-
4. Save the `main.js` file.
172
-
5. Commit the changes to this branch and push them to GitHub:
173
-
```shell
174
-
git add joke.js main.js
175
-
git commit -m 'creating joke.js and main.js'
176
-
git pull
177
-
git push
178
-
```
179
-
6. Wait about 20 seconds then refresh this page (the one you're following instructions from). [GitHub Actions](https://docs.github.com/en/actions) will automatically update to the next step.
58
+
Wait about 20 seconds then refresh this page (the one you're following instructions from). [GitHub Actions](https://docs.github.com/en/actions) will automatically update to the next step.
0 commit comments