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

カスタム GitHub Actions 超入門

カスタム GitHub Actions 超入門

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