Github Actions を使って deno test を実行してみる

先日は、 Deno を AWS Fargate を使って動かしてみました。
その途上で Github Actions を使いましたが、これでテスト?を実行してる OSS 見かけたことが有ったので試してみます。

参考

実装

.github/workflows/test.yml

.github/workflows/test.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
name: deno-test

on: push

jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 300

steps:
# 実行VMにリポジトリをチェックアウト
# ブランチはpushしたブランチになっていたのでブランチの切り替えは不要
- uses: actions/checkout@v2

# コンテナ準備
- name: Do `container preparation`
run: |
docker-compose build
docker-compose up -d

# テスト実行
# docker-compose exec "-T" としないと the input device is not a TTY と表示されエラーになる
- name: Do `deno test`
run: |
docker-compose exec -T app deno test app.ts

Dockerfile

Dockerfile
1
2
3
4
5
6
7
8
9
10
FROM denoland/deno:centos

RUN yum update -y && \
yum install -y wget which systemd-sysv crontabs && \
yum install -y git tar gcc gcc-c++ make openssl-devel zlib-devel sqlite sqlite-devel bzip2 readline-devel mysql-devel mysql redis

RUN mkdir /usr/src/app
WORKDIR /usr/src/app

EXPOSE 8080

docker-compose.yml

docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
version: "3"
services:
app:
build:
context: .
dockerfile: Dockerfile
networks:
- default
privileged: true
entrypoint:
- /sbin/init
ports:
- "8080:8080"
volumes:
- .:/usr/src/app:cached
tty: true

テスト対象のコード本体 app.ts

1
2
3
4
5
6
7
8
9
import { assertEquals } from "https://deno.land/std@0.113.0/testing/asserts.ts";

const sq = (src: number) => {
return src ** 2;
};

Deno.test("test #1 function sq()", () => {
assertEquals(sq(2), 4);
});

実行

ここまでの実装(というほどでもないですね)で、github actions でテストを実行できました。
テストコードをワザとエラーになるように書き換えると、actions の実行結果もちゃんと失敗になります。
失敗になった後の後続処理は実行されませんでした。

エラーになった時だけのアクションはできないだろうか?

の2つが参考になりました。

以下のように書き換えました。

.github/workflows/test.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
name: deno-test

on: push

jobs:
test:
runs-on: ubuntu-latest
timeout-minutes: 300

steps:
# 実行VMにリポジトリをチェックアウト
- uses: actions/checkout@v2

# コンテナ準備
- name: Do `container preparation`
run: |
docker-compose build
docker-compose up -d

# テスト実行
- name: Do `deno test`
run: |
docker-compose exec -T app deno test app.ts

# 成功した時だけ実行
- name: Do success
if: success()
run: |
echo Success!

# 失敗した時だけ実行
- name: Do failure
if: failure()
run: |
echo Failure!

# いつでも実行
- name: Do allways
if: allways()
run: |
echo Allways Done!

以上の様に書き換えて実行すると、それぞれ「成功時のみ実行」「失敗時実行」「いつでも実行」するようにできました。
実行結果ごとに通知など作るとき便利そうです。


Github Actions で、deno test を実行できました。
と、Deno のテスト実行の文脈で話をしていますが、Deno に縛った話でも無かったわけでした。

ではでは。