Upgrade to Pro — share decks privately, control downloads, hide ads and more …

カスタム GitHub Actions 超入門

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

カスタム GitHub Actions 超入門

Avatar for Tomohiko Ozawa

Tomohiko Ozawa

August 10, 2023
Tweet

More Decks by Tomohiko Ozawa

Other Decks in Technology

Transcript

  1. © 2023 SRE Holdings Corporation 証券コード:2980 © 2023 SRE Holdings

    Corporation GitHub Actions 2023/08/09 Oracle Cloud Hangout Cafe LT
  2. © 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
  3. © 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
  4. © 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'
  5. © 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}!`); ...
  6. © 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); }
  7. © 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!" });
  8. © 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
  9. © 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
  10. © 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 ...
  11. © 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
  12. © 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"
  13. © 2023 SRE Holdings Corporation • ⁃ : Continuous Integration,

    Security, Utilities, Chat • Publish release GitHub Marketplace 25