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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
meil
September 20, 2019
Programming
450
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
900
GitHub Actions入門
meilcli
0
470
Azure Pipelinesのすゝめ
meilcli
0
340
Other Decks in Programming
See All in Programming
[DroidKaigi 26] How We Moved from Android Studio to Slack
thisaay
0
190
高専キャリア LT 発表内容
crysta1221
6
5.5k
go-spidermonkeyでAIエージェントのCode Modeを実装する
syumai
3
1.5k
Foundry Localでエージェント開発
seosoft
0
120
Go 1.27からのGODEBUG / Go 1.27 リリースパーティ #go127party
mazrean
0
290
tsc.rip を支える技術 / Kyoto.なんか #8
susisu
0
4.3k
信頼性の目標を誰も求めてない
shubox
0
480
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
560
ソフトウェアラスタライザ
fadis
1
780
思考垂れ流し開発 ~音声入力 × AIエージェント × 開発ハーネスによる試行錯誤~
npostring
0
810
AIの中の人になってみる
htkym
0
150
Go を使い始めて 2 ヶ月の学び / My first two months with Go
contour_gara
0
420
Featured
See All Featured
Dealing with People You Can't Stand - Big Design 2015
cassininazir
367
27k
Why Our Code Smells
bkeepers
PRO
340
58k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
800
Designing Experiences People Love
moore
143
24k
Embracing the Ebb and Flow
colly
88
5.2k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
410
Utilizing Notion as your number one productivity tool
mfonobong
4
570
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
430
The Cult of Friendly URLs
andyhume
79
7k
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
890
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
290
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