Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
GitHub ActionsのActionを作る
Search
meil
September 20, 2019
Programming
440
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitHub ActionsのActionを作る
meil
September 20, 2019
More Decks by meil
See All by meil
クラシルの開発で使ってるGitHub Actions
meilcli
0
210
プログラミング言語(?)を自作した話
meilcli
0
890
GitHub Actions入門
meilcli
0
460
Azure Pipelinesのすゝめ
meilcli
0
330
Other Decks in Programming
See All in Programming
Skillsは効率化、Agentsは"自分の拡張"——Builder時代のエージェント編成(CC Night 2026)
wemra
1
120
技術記事、AIに書かせるか、自分で書くか? 〜それでも私が自分の手で書く理由〜 / #QiitaConference
jnchito
2
1.3k
ユニットテストの先へ:テスト技法で要求・仕様を整理するJava開発実践 / Beyond_Unit_Testing_Practical_Java_Development_Techniques_for_Organizing_Requirements_and_Specifications
shimashima35
0
380
3Dシーンの圧縮
fadis
1
680
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
250
Inside Stream API
skrb
1
680
Make SRE Operations Easier with Azure SRE Agent
kkamegawa
0
5.1k
TypeScript+Orvalで実現する型安全かつ堅牢でスケーラブルなマルチチャネル通知基盤 / TSKaigi Night talks ~after conference~
d0riven
0
320
AIで効率化できた業務・日常
ochtum
0
120
Vite+ Unified Toolchain for the Web
naokihaba
0
220
Signal Forms: Beyond the Basics @ngBaguette 2026 in Paris
manfredsteyer
PRO
0
230
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
130
Featured
See All Featured
Thoughts on Productivity
jonyablonski
76
5.2k
Discover your Explorer Soul
emna__ayadi
2
1.1k
Test your architecture with Archunit
thirion
1
2.3k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
720
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.4k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
220
The SEO identity crisis: Don't let AI make you average
varn
0
490
SEOcharity - Dark patterns in SEO and UX: How to avoid them and build a more ethical web
sarafernandez
0
200
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
How to Think Like a Performance Engineer
csswizardry
28
2.6k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
380
Un-Boring Meetings
codingconduct
0
310
Transcript
GitHub ActionsのActionを作る Mobile Act OSAKA #11
自己紹介 • Twitter: @penguin_sharp • GitHub: MeilCli • Blog: https://blog.meilcli.net/
• Skill: C#, Kotlin, Android, Azure Pipelines • Work: Fenrir Inc. ◦ Android Application Engineer ◦ 発言は個人の見解であり所属する組織の公式見解ではありません
GitHub Actions軽くまとめ • ベータ版 ◦ https://twitter.com/natfriedman/status/1174158823877042177 • Azure Pipelinesのクローン •
Windows, Linux, macOSで動作 • 1つの構成単位としてworkflow、1つの実行ステップ単位としてactionがある
Actionを作るには • 作り方は2種類 ◦ Docker container ◦ JavaScript(Node.js) ← 今回試すのはこっち
• Docker containerはLinuxでのみ対応
注意: 今回作るものはあくまで学習目 的です そして、Dangerのactionを作り ます
そもそもDangerとは • コードレビューを自動化するためのツールみたいなもの ◦ https://github.com/danger/danger • 今回はRuby版を使用
Actionを作る • Node.jsをインストール • Visual Studio Codeを用意 • リポジトリーの作成 ◦
npm init -y ◦ npm install -g typescript ◦ tsc -init ◦ npm install @actions/core --save ◦ npm install @actions/io --save ◦ npm install @actions/exec --save ◦ etc..
Actionを作る まずはactionの実行コードを書いていく import * as core from '@actions/core'; async function
run() { try { } catch (error) { core.setFailed(error.message); } } run();
Actionを作る action外でDangerを動かすための環境がセット アップされている前提にする import * as io from '@actions/io'; async
function checkEnvironment() { await io.which("ruby", true); await io.which("bundle", true); }
Actionを作る actionに渡された引数を取得する interface Option { readonly dangerVersion: string; readonly pluginsFile:
string | null; readonly dangerFile: string; readonly dangerId: string; } async function getOption(): Promise<Option> { return { dangerVersion: core.getInput( "danger_version" , { required: true }), pluginsFile: core.getInput( "plugins_file" ), dangerFile: core.getInput( "danger_file" , { required: true }), dangerId: core.getInput( "danger_id" , { required: true }) } }
Actionを作る Dangerをインストール import * as exec from '@actions/exec' ; async
function installDanger(option: Option) { await exec.exec( `gem install danger --version "${option.dangerVersion }"`, undefined , { failOnStdErr: true } ); if (option.pluginsFile != null) { await exec.exec( `bundle install --gemfile= ${option.pluginsFile }`, undefined , { failOnStdErr: true } ); } }
Actionを作る Danger実行 async function runDanger(option: Option) { await exec.exec( `danger
--dangerfile=${option.dangerFile} --danger_id=${option.dangerId}`, undefined, { failOnStdErr: true } ); }
Actionを作る action.ymlを書く name: 'Danger action' description : 'run danger' author:
'MeilCli' inputs: danger_version : description : 'danger version' default: '~> 6.0' plugins_file : description : 'gemfile for danger plugin' danger_file : description : 'dangerfile for danger' required : true danger_id : description : 'danger id, set identifier string' required : true runs: using: 'node12' main: 'lib/main.js'
Actionを使う workflowのymlを書く • action.ymlのinputsに対してwithで値を渡す • usesにアカウント名/レポジトリ名を指定 ◦ @のあとはバージョン情報 ◦ ここではTagを指定
jobs: danger: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - uses: actions/setup-ruby@v1 with: ruby-version: '2.6' - uses: MeilCli/danger-action@v1 with: plugins_file: 'Gemfile' danger_file: 'Dangerfile' danger_id: 'danger-pr' env: DANGER_GITHUB_API_TOKEN: ${{ secrets.GITHUB_TOKEN }}
Actionを使う WorkflowやDangerfileなどをセットアップしておく と、PullRequestでこのようなコメントが送られてくる ようになる
Actionを公開する • 基本的にリポジトリーを公開しておくだけでOK ◦ 注意点として.jsファイルとそれが参照する node_modulesも公開しておく必要がある • Marketplaceにも公開できる ◦ https://github.com/marketplace?type=actions
◦ Marketplaceに公開する場合はaction.ymlに必要な情報を記述しておく必要あり ▪ 名前、説明、アイコンなど
おわりに • まとめ ◦ GitHub ActionのactionはTypeScriptで簡単に作ることができる ◦ だからみんなもどんどん作っていってくれ~~ • 今回作ったもの
◦ https://github.com/MeilCli/danger-action ◦ https://github.com/marketplace/actions/danger-action • 解説 ◦ https://blog.meilcli.net/2019/09/15/155447