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 超入門
Search
Tomohiko Ozawa
August 10, 2023
Technology
3.8k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
カスタム GitHub Actions 超入門
Tomohiko Ozawa
August 10, 2023
More Decks by Tomohiko Ozawa
See All by Tomohiko Ozawa
ベンチャー入社後の3年間でDevOps実践して開発・運用体験を劇的に改善した話
kota65535
1
490
Other Decks in Technology
See All in Technology
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
640
tamachi.goを支える技術
rymiyamoto
0
110
dbt と Snowflake と tag
kevinrobot34
2
290
Microsoft MVP プログラムを紹介するから目指す人増えてくれ
tsubakimoto_s
0
140
IHV like なユースケースへのOpenID Connect 関連仕様の適用事例
optim
0
340
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3.2k
AWSとGitHub Actionsの責任境界と 組織で安全に使用する取り組み
nealle
0
210
顧客の要望は2次情報である 〜アンテナを張るFDEの構造論〜
noriakioji
5
1k
形式手法特論:Hyperproperty とモデル検査 #kernelvm / Kernel VM Study Tokyo 19th
ytaka23
0
870
現場の暗黙知を継承するAIエージェント — 対話から生まれる長期記憶と Skills
atsukish
0
120
AI駆動開発をチームに根付かせる - 「1行も書かない」チームがHarnessを育てた1年 -
kenichirokimura
6
3.2k
OpenID for Verifiable Credentials 実装から見えた相互運用性確保までの道のり(OAuth/OIDC Numa (Immersion) Workshop 2026)
oidfj
PRO
0
340
Featured
See All Featured
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
Documentation Writing (for coders)
carmenintech
77
5.5k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
2
3.8k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
500
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
820
Code Review Best Practice
trishagee
74
20k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.6k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
The untapped power of vector embeddings
frankvandijk
2
1.8k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.6k
HDC tutorial
michielstock
2
820
Transcript
© 2023 SRE Holdings Corporation 証券コード:2980 © 2023 SRE Holdings
Corporation GitHub Actions 2023/08/09 Oracle Cloud Hangout Cafe LT
© 2023 SRE Holdings Corporation SRE Holdings 2 2014 2019
SRE / AI DX DX IT
© 2023 SRE Holdings Corporation • ( @kota65535) • •
⁃ ⁃ ⁃ ⁃ CI/CD ⁃ 3
© 2023 SRE Holdings Corporation • Custom Actions • JavaScript
• Agenda 4
© 2023 SRE Holdings Corporation Custom Action
© 2023 SRE Holdings Corporation • • ⁃ ⁃ ⁃
⁃ Custom Actions 6
© 2023 SRE Holdings Corporation • JavaScript ⁃ Runner Node.js
JavaScript ⁃ : https://github.com/actions/hello-world-javascript-action • Docker ⁃ Runner Docker ⁃ ⁃ : https://github.com/actions/hello-world-docker-action • Composite ⁃ ⁃ : https://github.com/microsoft/action-python 7
© 2023 SRE Holdings Corporation JavaScript
© 2023 SRE Holdings Corporation • Minimal • https://github.com/kota65535/hello-world-javascript-action Minimal
JavaScript 9 . ├── README.md ├── action.yml ├── index.js ├── node_modules ├── package-lock.json └── package.json ⁃ action.yml • ⁃ index.js • JavaScript ⁃ node_modules • NPM node_modules ⁃ package.json & package-lock.json • NPM package.json
© 2023 SRE Holdings Corporation • • ⁃ ⁃ ⁃
⁃ ⁃ ⁃ action.yml 10
© 2023 SRE Holdings Corporation • inputs ⁃ Map ⁃
⁃ or not • outputs ⁃ Map • runs ⁃ ⁃ ⁃ JavaScript • using : Node • main : action.yml 11 inputs: who-to-greet: description: 'Who to greet' required: true default: 'World' outputs: time: description: 'The time we greeted you' runs: using: 'node16' main: 'index.js'
© 2023 SRE Holdings Corporation • JavaScript • @actions/core ⁃
JavaScript ⁃ index.js 12 const core = require('@actions/core'); try { // const nameToGreet = core.getInput('who-to-greet'); // core.info(`Hello ${nameToGreet}!`); ...
© 2023 SRE Holdings Corporation index.js 13 try { //
const nameToGreet = core.getInput('who-to-greet'); // core.info(`Hello ${nameToGreet}!`); // const time = (new Date()).toTimeString(); // core.setOutput("time", time); } catch (error) { // Fail core.setFailed(error.message); }
© 2023 SRE Holdings Corporation • • @actions/core • ⁃
@actions/github Octokit GitHub API package.json & package-lock.json 14 // Octokit const octokit = getOctokit(token); // Issue await octokit.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number, "LGTM!" });
© 2023 SRE Holdings Corporation • index.js • ⁃ node_modules
Commit ⁃ ncc Bundle Commit • husky pre-commit • TypeScript • https://github.com/actions/typescript-action node_modules 15
© 2023 SRE Holdings Corporation • https://github.com/kota65535/hello-world-javascript-action-test • 16 steps:
- name: Checkout uses: actions/checkout@v3 - name: Greet uses: kota65535/hello-world-javascript-action@main with: who-to-greet: foo
© 2023 SRE Holdings Corporation 17
© 2023 SRE Holdings Corporation &
© 2023 SRE Holdings Corporation • Semantic Versioning : v1.2.3
• v1 • • Release 19 name: Release on: workflow_dispatch: inputs: version: description: Released version type: string required: true ...
© 2023 SRE Holdings Corporation Release 20 jobs: release: runs-on:
ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Configure git uses: kota65535/github-git-config-action@v1 with: user.name: Tomohiko Ozawa user.email:
[email protected]
- name: Get major version run: echo "MAJOR_VERSION=$(perl -ne 'print $1 if /^(.*?)\.(.*?)\.(.*?)$/' <<< '${{ inputs.version }}')" >> $GITHUB_ENV - name: Run npm version run: npm version ${{ inputs.version }} - name: Update the major version tag run: git tag -f v${{ env.MAJOR_VERSION }} - name: Push the version commit and tags run: | git pull --rebase --autostash git push origin HEAD git push -f --tags
© 2023 SRE Holdings Corporation • Release 21 main v1.2.4
v1 v1 v1.2.3
© 2023 SRE Holdings Corporation • GitHub Marketplace • ⁃
⁃ GitHub Marketplace 22
© 2023 SRE Holdings Corporation • name ⁃ ⁃ •
description ⁃ • branding ⁃ ⁃ icon • Feather ⁃ color • action.yml 23 name: "Terraform Plan to PR Comment" description: "Notify Terraform plan result as a pull request comment" branding: icon: "cloud" color: "purple"
© 2023 SRE Holdings Corporation • action.yml • Publish this
Action to the GitHub Marketplace 24
© 2023 SRE Holdings Corporation • ⁃ : Continuous Integration,
Security, Utilities, Chat • Publish release GitHub Marketplace 25
© 2023 SRE Holdings Corporation • 26
© 2023 SRE Holdings Corporation Custom Action CI/CD
© 2023 SRE Holdings Corporation