├── .commitlintrc ├── .editorconfig ├── .eslintrc ├── .github ├── CODEOWNERS ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── card-labeler.yml ├── config.yml ├── labeler.yml ├── no-response.yml ├── pr-labeler.yml ├── pull_request_template.md ├── release-drafter.yml ├── stale.yml ├── workflow-details.json ├── workflow-settings.json └── workflows │ ├── add-release-tag.yml │ ├── add-test-tag.yml │ ├── check-warnings.yml │ ├── ci.yml │ ├── issue-opened.yml │ ├── pr-opened.yml │ ├── pr-updated.yml │ ├── project-card-moved.yml │ ├── sync-workflows.yml │ ├── toc.yml │ └── update-dependencies.yml ├── .gitignore ├── .husky ├── .gitignore ├── commit-msg └── pre-commit ├── .lintstagedrc ├── .releasegarc ├── LICENSE ├── README.ja.md ├── README.md ├── _config.yml ├── action.yml ├── package.json ├── rollup.config.mjs ├── src ├── constant.ts ├── fixtures │ ├── actions.list.jobs1.json │ ├── actions.list.jobs2.json │ ├── actions.list.jobs3.json │ └── actions.list.jobs4.json ├── main.ts ├── process.test.ts ├── process.ts └── setup.ts ├── tsconfig.json ├── vite.config.ts └── yarn.lock /.commitlintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "@commitlint/config-conventional" 4 | ] 5 | } -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | end_of_line = lf 6 | insert_final_newline = true 7 | trim_trailing_whitespace = true 8 | indent_style = space 9 | indent_size = 2 10 | 11 | [*.md] 12 | trim_trailing_whitespace = false 13 | -------------------------------------------------------------------------------- /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "extends": [ 3 | "eslint:recommended", 4 | "plugin:@typescript-eslint/recommended", 5 | "plugin:@typescript-eslint/eslint-recommended" 6 | ], 7 | "plugins": [ 8 | "@typescript-eslint", 9 | "import" 10 | ], 11 | "parser": "@typescript-eslint/parser", 12 | "parserOptions": { 13 | "sourceType": "module", 14 | "ecmaVersion": 2018 15 | }, 16 | "env": { 17 | "node": true, 18 | "jest": true, 19 | "es6": true, 20 | "browser": true 21 | }, 22 | "settings": { 23 | "react": { 24 | "version": "latest" 25 | } 26 | }, 27 | "rules": { 28 | "camelcase": [ 29 | "error", 30 | { 31 | "properties": "always" 32 | } 33 | ], 34 | "quotes": [ 35 | "error", 36 | "single", 37 | "avoid-escape" 38 | ], 39 | "key-spacing": [ 40 | "error", 41 | { 42 | "singleLine": { 43 | "beforeColon": false, 44 | "afterColon": true 45 | }, 46 | "multiLine": { 47 | "beforeColon": false, 48 | "afterColon": true 49 | } 50 | } 51 | ], 52 | "eqeqeq": "error", 53 | "block-scoped-var": "error", 54 | "complexity": [ 55 | "error", 56 | { 57 | "maximum": 20 58 | } 59 | ], 60 | "default-case": "error", 61 | "dot-location": [ 62 | "error", 63 | "property" 64 | ], 65 | "guard-for-in": "error", 66 | "no-eval": "error", 67 | "block-spacing": "error", 68 | "brace-style": "error", 69 | "comma-spacing": [ 70 | "error", 71 | { 72 | "before": false, 73 | "after": true 74 | } 75 | ], 76 | "indent": [ 77 | "error", 78 | 2, 79 | { 80 | "SwitchCase": 1 81 | } 82 | ], 83 | "space-before-function-paren": [ 84 | "error", 85 | "never" 86 | ], 87 | "space-before-blocks": "error", 88 | "prefer-const": "error", 89 | "no-var": "error", 90 | "arrow-body-style": "off", 91 | "arrow-spacing": "error", 92 | "strict": [ 93 | "error" 94 | ], 95 | "no-warning-comments": [ 96 | "warn", 97 | { 98 | "terms": [ 99 | "todo", 100 | "fixme", 101 | "hack" 102 | ], 103 | "location": "anywhere" 104 | } 105 | ], 106 | "semi": [ 107 | "error" 108 | ], 109 | "sort-imports": 0, 110 | "import/order": [2, { 111 | "groups": ["type", "builtin", "external", "internal", "parent", "sibling", "index", "object"], 112 | "alphabetize": { "order": "asc", "caseInsensitive": true } 113 | }], 114 | "@typescript-eslint/no-non-null-assertion": "off" 115 | } 116 | } 117 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @technote-space 2 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at technote.space@gmail.com. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | [issues]: https://github.com/technote-space/gh-actions-template/issues 3 | [fork]: https://github.com/technote-space/gh-actions-template/fork 4 | [pr]: https://github.com/technote-space/gh-actions-template/compare 5 | [eslint]: https://eslint.org/ 6 | [jest]: https://jestjs.io/ 7 | [code-of-conduct]: CODE_OF_CONDUCT.md 8 | 9 | When contributing to this repository, please first discuss the change you wish to make via [issue][issues] with the owners of this repository before making a change. 10 | 11 | Please note we have a [Contributor Code of Conduct][code-of-conduct], please follow it in all your interactions with the project. 12 | 13 | ## Submitting a pull request 14 | 15 | 1. [Fork][fork] and clone the repository 16 | 1. Make sure the tests pass on your machine: `yarn test`, which contains 17 | - [`ESLint`][eslint] 18 | - [`Jest`][jest] 19 | 1. Create a new branch: `git checkout -b my-branch-name` 20 | 1. Make your change, add tests, and make sure the tests still pass. 21 | 1. Push to your fork and [submit a pull request][pr]. 22 | 1. Pat your self on the back and wait for your pull request to be reviewed and merged. 23 | 24 | Here are a few things you can do that will increase the likelihood of your pull request being accepted: 25 | - Write and update tests. 26 | - Keep your change as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests. 27 | - Write a [good commit message](https://github.com/erlang/otp/wiki/writing-good-commit-messages). 28 | 29 | Work in Progress pull request are also welcome to get feedback early on, or if there is something blocked you. 30 | 31 | ## Resources 32 | 33 | - [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) 34 | - [Using Pull Requests](https://help.github.com/articles/about-pull-requests/) 35 | - [GitHub Help](https://help.github.com) 36 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | custom: https://paypal.me/technote0space -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: '' 6 | assignees: 'technote-space' 7 | 8 | --- 9 | 10 | ## Describe the bug: バグの概要 11 | 12 | 13 | 14 | ## To Reproduce: 再現手順 15 | Steps to reproduce the behavior: 16 | 1. Go to '...' 17 | 2. Click on '....' 18 | 3. Scroll down to '....' 19 | 4. See error 20 | 21 | ## Expected behavior: 期待する動作 22 | 23 | 24 | 25 | ## Screenshots: スクリーンショット 26 | 27 | 28 | 29 | ## Operating environment: バグが発生した環境 30 | - Version of software 31 | - OS: [e.g. Windows10] 32 | - Browser: [e.g. Chrome, Safari] 33 | - etc. 34 | 35 | ## Additional context: 補足 36 | 37 | 38 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: '' 6 | assignees: 'technote-space' 7 | 8 | --- 9 | 10 | ## Please describe your suggestion: 提案の概要 11 | 12 | 13 | 14 | ## Describe the solution you'd like: 考えうる解決方法 15 | 16 | 17 | 18 | ## Describe alternatives you've considered: 考えうる代替案 19 | 20 | 21 | 22 | ## Additional context: 補足 23 | 24 | 25 | -------------------------------------------------------------------------------- /.github/card-labeler.yml: -------------------------------------------------------------------------------- 1 | Backlog: 2 | 'In progress': 3 | - 'Status: In Progress' 4 | -------------------------------------------------------------------------------- /.github/config.yml: -------------------------------------------------------------------------------- 1 | # Configuration for request-info - https://github.com/behaviorbot/request-info 2 | 3 | # *Required* Comment to reply with 4 | requestInfoReplyComment: > 5 | :clap: We would appreciate it if you could provide us with more info about this issue/pr! 6 | 7 | # *OPTIONAL* default titles to check against for lack of descriptiveness 8 | # MUST BE ALL LOWERCASE 9 | requestInfoDefaultTitles: 10 | - update readme.md 11 | - updates 12 | - update 13 | 14 | # *OPTIONAL* Label to be added to Issues and Pull Requests with insufficient information given 15 | requestInfoLabelToAdd: "Status: More Information Needed" 16 | 17 | 18 | 19 | 20 | # Configuration for welcome - https://github.com/behaviorbot/welcome 21 | 22 | # Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome 23 | 24 | # Comment to be posted to on first time issues 25 | newIssueWelcomeComment: > 26 | :raised_hands: Thanks for opening your first issue here! Be sure to follow the issue template! 27 | 28 | # Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome 29 | 30 | # Comment to be posted to on PRs from first time contributors in your repository 31 | newPRWelcomeComment: > 32 | :raised_hands: Thanks for opening this pull request! Please check out our contributing guidelines. 33 | 34 | # Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge 35 | 36 | # Comment to be posted to on pull requests merged by a first time user 37 | firstPRMergeComment: > 38 | :tada: Congrats on merging your first pull request! We here at behaviorbot are proud of you! 39 | 40 | 41 | 42 | # Configuration for todo - https://github.com/jasonetco/todo 43 | todo: 44 | - label: "Type: Todo" -------------------------------------------------------------------------------- /.github/labeler.yml: -------------------------------------------------------------------------------- 1 | javascript: 2 | - '**/*.js' 3 | typescript: 4 | - '**/*.ts' 5 | php: 6 | - '**/*.php' 7 | python: 8 | - '**/*.py' 9 | cpp: 10 | - '**/*.cpp' 11 | - '**/*.cxx' 12 | - '**/*.cc' 13 | - '**/*.cp' 14 | 15 | 'Type: Testing': 16 | - '**/tests/*' 17 | - '**/test/*' 18 | - '**/__tests__/*' 19 | 20 | 'Type: Documentation': 21 | - '**/*.md' 22 | 23 | 'Type: CI/CD': 24 | - '.github/workflows/*.yml' 25 | - '.circleci/*' 26 | - '.travis.yml' 27 | -------------------------------------------------------------------------------- /.github/no-response.yml: -------------------------------------------------------------------------------- 1 | # Configuration for probot-no-response - https://github.com/probot/no-response 2 | 3 | # Number of days of inactivity before an Issue is closed for lack of response 4 | daysUntilClose: 14 5 | # Label requiring a response 6 | responseRequiredLabel: "Status: More Information Needed" 7 | # Comment to post when closing an Issue for lack of response. Set to `false` to disable 8 | closeComment: > 9 | This issue has been automatically closed because there has been no response 10 | to our request for more information from the original author. With only the 11 | information that is currently in the issue, we don't have enough information 12 | to take action. Please reach out if you have or find the answers we need so 13 | that we can investigate further. 14 | -------------------------------------------------------------------------------- /.github/pr-labeler.yml: -------------------------------------------------------------------------------- 1 | 'Type: Feature': ['feature/*', 'feat/*'] 2 | 'Type: Bug': fix/* 3 | 'Type: Maintenance': ['patch/*', 'chore/*'] 4 | 'Type: Release': release/* 5 | 'Type: Refactoring': ['refactor/*', 'refactoring/*'] 6 | 'Type: Documentation': ['docs/*', 'doc/*'] 7 | -------------------------------------------------------------------------------- /.github/pull_request_template.md: -------------------------------------------------------------------------------- 1 | ## Description: 概要 2 | 3 | 4 | 5 | ## Changes: 変更内容 6 | 7 | 8 | 9 | 10 | 11 | 12 | ## Expected Impact: 影響範囲 13 | 14 | 15 | 16 | ## Operating Requirements: 動作要件 17 | 18 | 19 | 20 | ## Additional context: 補足 21 | 22 | 23 | -------------------------------------------------------------------------------- /.github/release-drafter.yml: -------------------------------------------------------------------------------- 1 | # Config for https://github.com/apps/release-drafter 2 | name-template: 'v$NEXT_PATCH_VERSION' 3 | tag-template: 'v$NEXT_PATCH_VERSION' 4 | categories: 5 | - title: ':rocket: Features' 6 | labels: 7 | - 'Type: Feature' 8 | - 'Type: Refactoring' 9 | - title: ':bug: Bug Fixes' 10 | labels: 11 | - 'Type: Bug' 12 | - 'Type: Security' 13 | - title: ':wrench: Maintenance' 14 | labels: 15 | - 'Type: Maintenance' 16 | - 'Type: CI/CD' 17 | - title: ':green_book: Docs' 18 | labels: 19 | - 'Type: Documentation' 20 | - title: ':white_check_mark: Tested' 21 | labels: 22 | - 'Type: Testing' 23 | - title: ':sparkles: All Changes' 24 | labels: 25 | - 'Type: Release' 26 | exclude-labels: 27 | - 'dependencies' 28 | template: | 29 | ## What’s Changed 30 | 31 | $CHANGES 32 | -------------------------------------------------------------------------------- /.github/stale.yml: -------------------------------------------------------------------------------- 1 | # Number of days of inactivity before an issue becomes stale 2 | daysUntilStale: 180 3 | # Number of days of inactivity before a stale issue is closed 4 | daysUntilClose: 30 5 | # Issues with these labels will never be considered stale 6 | exemptLabels: 7 | - "Priority: Critical" 8 | - "Type: Security" 9 | # Label to use when marking an issue as stale 10 | staleLabel: "Status: Abandoned" 11 | # Comment to post when marking an issue as stale. Set to `false` to disable 12 | markComment: > 13 | This issue has been automatically marked as stale because it has not had 14 | recent activity. It will be closed if no further activity occurs. Thank you 15 | for your contributions. 16 | # Comment to post when closing a stale issue. Set to `false` to disable 17 | closeComment: false -------------------------------------------------------------------------------- /.github/workflow-details.json: -------------------------------------------------------------------------------- 1 | { 2 | "TOC_FOOTER": "*generated with [TOC Generator](https://github.com/technote-space/toc-generator)*" 3 | } 4 | -------------------------------------------------------------------------------- /.github/workflow-settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "EXCLUDE_MESSAGES": [ 3 | "update package version", 4 | "update packages", 5 | "update wp version", 6 | "trigger workflow", 7 | "update TOC" 8 | ], 9 | "PROJECT": "Backlog", 10 | "ISSUE_COLUMN": "To do", 11 | "PR_COLUMN": "In progress", 12 | "PR_BODY_TITLE": "## Changes", 13 | "TOC_FOLDING": "1", 14 | "TOC_MAX_HEADER_LEVEL": "3", 15 | "TOC_TITLE": "Details", 16 | "TOC_CREATE_PR": "true", 17 | "TOC_TARGET_PATHS": "README*.md", 18 | "BRANCH_PREFIX": "release/", 19 | "ANNOTATION_EXCLUDE_PATTERNS": [ 20 | ">> warning ", 21 | ">> hint: ", 22 | "Cloning into", 23 | "has unmet peer dependency", 24 | "has incorrect peer dependency", 25 | "Using version", 26 | "ci-helper", 27 | "tests/bootstrap.php" 28 | ], 29 | "CHANGE_TEMPLATE": "- [ ] ${TITLE} (#${NUMBER}) @${AUTHOR}" 30 | } 31 | -------------------------------------------------------------------------------- /.github/workflows/add-release-tag.yml: -------------------------------------------------------------------------------- 1 | on: 2 | pull_request: 3 | branches: 4 | - master 5 | - main 6 | - develop/v* 7 | types: [closed] 8 | 9 | concurrency: 10 | group: ${{ github.workflow }}-${{ github.ref }} 11 | 12 | name: Add release tag 13 | 14 | jobs: 15 | tag: 16 | name: Add release tag 17 | runs-on: ubuntu-latest 18 | timeout-minutes: 3 19 | if: github.event.pull_request.merged == true && github.event.pull_request.head.user.id == github.event.pull_request.base.user.id && startsWith(github.head_ref, 'release/') 20 | steps: 21 | - uses: technote-space/load-config-action@v1 22 | with: 23 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 24 | IGNORE_WARNING: 'true' 25 | - name: Get version 26 | uses: technote-space/get-next-version-action@v1 27 | with: 28 | EXCLUDE_MESSAGES: ${{ env.EXCLUDE_MESSAGES }} 29 | if: "! startsWith(github.head_ref, 'release/v')" 30 | - name: Get version 31 | run: echo "NEXT_VERSION=${HEAD_REF#release/}" >> $GITHUB_ENV 32 | env: 33 | HEAD_REF: ${{ github.head_ref }} 34 | if: startsWith(github.head_ref, 'release/v') 35 | - uses: actions/github-script@v3 36 | with: 37 | github-token: ${{ secrets.ACCESS_TOKEN }} 38 | script: | 39 | github.git.createRef({ 40 | owner: context.repo.owner, 41 | repo: context.repo.repo, 42 | ref: `refs/tags/${process.env.NEXT_VERSION}`, 43 | sha: context.sha 44 | }) 45 | if: env.NEXT_VERSION 46 | - uses: actions/github-script@v3 47 | with: 48 | github-token: ${{ secrets.ACCESS_TOKEN }} 49 | script: | 50 | github.git.createRef({ 51 | owner: context.repo.owner, 52 | repo: context.repo.repo, 53 | ref: `refs/heads/release/next-${process.env.NEXT_VERSION}`, 54 | sha: context.sha 55 | }) 56 | if: env.NEXT_VERSION 57 | -------------------------------------------------------------------------------- /.github/workflows/add-test-tag.yml: -------------------------------------------------------------------------------- 1 | on: 2 | pull_request: 3 | types: [synchronize] 4 | 5 | concurrency: 6 | group: ${{ github.workflow }}-${{ github.ref }} 7 | 8 | name: Add test tag 9 | 10 | jobs: 11 | tag: 12 | name: Add test tag 13 | runs-on: ubuntu-latest 14 | timeout-minutes: 3 15 | if: github.event.pull_request.head.user.id == github.event.pull_request.base.user.id && startsWith(github.head_ref, 'release/') 16 | steps: 17 | - uses: technote-space/load-config-action@v1 18 | with: 19 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 20 | IGNORE_WARNING: 'true' 21 | - uses: actions/checkout@v3 22 | - uses: technote-space/get-git-comment-action@v1 23 | - name: Get version 24 | uses: technote-space/get-next-version-action@v1 25 | with: 26 | EXCLUDE_MESSAGES: ${{ env.EXCLUDE_MESSAGES }} 27 | if: "! startsWith(github.head_ref, 'release/v') && (contains(env.COMMIT_MESSAGE, 'chore: update dependencies') || contains(env.COMMIT_MESSAGE, 'chore: update npm dependencies'))" 28 | - name: Get version 29 | run: echo "NEXT_VERSION=${HEAD_REF#release/}" >> $GITHUB_ENV 30 | env: 31 | HEAD_REF: ${{ github.head_ref }} 32 | if: "startsWith(github.head_ref, 'release/v') && (contains(env.COMMIT_MESSAGE, 'chore: update dependencies') || contains(env.COMMIT_MESSAGE, 'chore: update npm dependencies'))" 33 | - name: Get tag name 34 | run: echo "TAG_NAME=${NEXT_VERSION}.${RUN_ID}" >> $GITHUB_ENV 35 | env: 36 | HEAD_REF: ${{ github.head_ref }} 37 | RUN_ID: ${{ github.run_id }} 38 | if: env.NEXT_VERSION 39 | - uses: actions/github-script@v3 40 | with: 41 | github-token: ${{ secrets.ACCESS_TOKEN }} 42 | script: | 43 | github.git.createRef({ 44 | owner: context.repo.owner, 45 | repo: context.repo.repo, 46 | ref: `refs/tags/test/${process.env.TAG_NAME}`, 47 | sha: context.payload.pull_request.head.sha 48 | }) 49 | if: env.TAG_NAME 50 | -------------------------------------------------------------------------------- /.github/workflows/check-warnings.yml: -------------------------------------------------------------------------------- 1 | on: 2 | workflow_run: 3 | workflows: 4 | - CI 5 | - Sync workflows 6 | - Update dependencies 7 | - Broken Link Check 8 | types: 9 | - completed 10 | 11 | name: Check Warnings 12 | 13 | jobs: 14 | annotations: 15 | name: Annotations 16 | runs-on: ubuntu-latest 17 | timeout-minutes: 3 18 | steps: 19 | - uses: technote-space/load-config-action@v1 20 | with: 21 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 22 | IGNORE_WARNING: 'true' 23 | - uses: technote-space/download-annotations-action@v2 24 | id: annotations 25 | with: 26 | TARGET_RUN_ID: ${{ github.event.workflow_run.id }} 27 | INCLUDE_LEVELS: warning 28 | EXCLUDE_MESSAGE_PATTERNS: ${{ env.ANNOTATION_EXCLUDE_PATTERNS }} 29 | - name: Build attachments 30 | run: | 31 | arr1='[{"fields":[{"title":"repo","value":"","short":true},{"title":"action","value":"<${{ github.event.workflow_run.html_url }}|summary>","short":true}]}]' 32 | arr2=$(echo '${{ steps.annotations.outputs.messages }}' | jq -c 'map({"color":"warning","text":"```\(.)```"})') 33 | echo "SLACK_ATTACHMENTS=$(jq --argjson arr1 "$arr1" --argjson arr2 "$arr2" -nc '$arr1 + $arr2')" >> $GITHUB_ENV 34 | if: steps.annotations.outputs.number > 0 35 | - uses: 8398a7/action-slack@v3 36 | with: 37 | status: custom 38 | fields: repo 39 | custom_payload: | 40 | { 41 | text: "Warning annotations", 42 | attachments: ${{ env.SLACK_ATTACHMENTS }} 43 | } 44 | env: 45 | SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} 46 | if: steps.annotations.outputs.number > 0 && env.SLACK_WEBHOOK_URL 47 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | on: push 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | 6 | name: CI 7 | 8 | jobs: 9 | eslint: 10 | name: ESLint 11 | runs-on: ubuntu-latest 12 | timeout-minutes: 5 13 | env: 14 | LINT: 1 15 | steps: 16 | - name: Set running flag 17 | run: echo "RUNNING=1" >> $GITHUB_ENV 18 | - uses: actions/checkout@v3 19 | - uses: technote-space/get-git-comment-action@v1 20 | - uses: technote-space/get-diff-action@v6 21 | with: 22 | PATTERNS: +(src|__tests__)/**/*.+(js|ts) 23 | FILES: | 24 | yarn.lock 25 | .eslintrc 26 | if: "! contains(env.COMMIT_MESSAGE, '[skip ci]') && ! contains(env.COMMIT_MESSAGE, '[ci skip]')" 27 | - name: Set running flag 28 | run: echo "RUNNING=" >> $GITHUB_ENV 29 | if: "! env.GIT_DIFF" 30 | 31 | - uses: actions/setup-node@v3 32 | with: 33 | node-version: 16 34 | cache: yarn 35 | if: env.RUNNING 36 | - name: Install Package dependencies 37 | run: yarn install 38 | if: env.RUNNING 39 | - name: Check code style 40 | run: yarn eslint ${{ env.GIT_DIFF_FILTERED }} 41 | if: env.RUNNING && !env.MATCHED_FILES 42 | - name: Check code style 43 | run: yarn lint 44 | if: env.RUNNING && env.MATCHED_FILES 45 | 46 | cover: 47 | name: Coverage 48 | needs: eslint 49 | runs-on: ${{matrix.os}} 50 | timeout-minutes: 10 51 | strategy: 52 | matrix: 53 | os: [ubuntu-20.04, ubuntu-22.04, ubuntu-latest, macos-latest] 54 | steps: 55 | - name: Set running flag 56 | run: echo "RUNNING=1" >> $GITHUB_ENV 57 | - uses: actions/checkout@v3 58 | - uses: technote-space/get-git-comment-action@v1 59 | - uses: technote-space/get-diff-action@v6 60 | with: 61 | PATTERNS: +(src|__tests__)/**/*.+(js|ts|snap) 62 | FILES: | 63 | yarn.lock 64 | jest.config.js 65 | vite.config.ts 66 | if: "! contains(env.COMMIT_MESSAGE, '[skip ci]') && ! contains(env.COMMIT_MESSAGE, '[ci skip]')" 67 | - name: Set running flag 68 | run: echo "RUNNING=" >> $GITHUB_ENV 69 | if: "! env.GIT_DIFF" 70 | - name: Set running flag 71 | if: "matrix.os == 'ubuntu-latest' && ! startsWith(github.ref, 'refs/tags/') && github.event.base_ref == format('refs/heads/{0}', github.event.repository.default_branch)" 72 | run: echo "RUNNING=1" >> $GITHUB_ENV 73 | - name: Set running flag 74 | if: "matrix.os == 'ubuntu-latest' && ! startsWith(github.ref, 'refs/tags/') && startsWith(github.base_ref, 'refs/heads/develop/v')" 75 | run: echo "RUNNING=1" >> $GITHUB_ENV 76 | - name: Set running flag 77 | if: matrix.os == 'ubuntu-latest' && startsWith(github.ref, 'refs/tags/v') 78 | run: echo "RUNNING=1" >> $GITHUB_ENV 79 | - name: Set running flag 80 | run: | 81 | if [[ ! -f package.json ]] || ! < package.json jq -r '.scripts | keys[]' | grep -qe '^cover$'; then 82 | echo "RUNNING=" >> $GITHUB_ENV 83 | fi 84 | 85 | - uses: actions/setup-node@v3 86 | with: 87 | node-version: 16 88 | cache: yarn 89 | if: env.RUNNING 90 | - name: Install Package dependencies 91 | run: yarn install 92 | if: env.RUNNING 93 | - name: Run tests 94 | run: yarn cover 95 | if: env.RUNNING 96 | - name: Codecov 97 | run: | 98 | if [ -n "$CODECOV_TOKEN" ]; then 99 | curl -s https://codecov.io/bash | bash -s -- -t $CODECOV_TOKEN -f $COVERAGE_FILE 100 | fi 101 | env: 102 | CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} 103 | COVERAGE_FILE: ./coverage/lcov.info 104 | if: env.RUNNING && matrix.os == 'ubuntu-latest' 105 | 106 | release: 107 | name: Release GitHub Actions 108 | needs: cover 109 | runs-on: ubuntu-latest 110 | timeout-minutes: 5 111 | if: startsWith(github.ref, 'refs/tags/') 112 | steps: 113 | - uses: actions/checkout@v3 114 | - uses: actions/setup-node@v3 115 | with: 116 | node-version: 16 117 | cache: yarn 118 | 119 | - uses: technote-space/load-config-action@v1 120 | with: 121 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 122 | IGNORE_WARNING: 'true' 123 | - name: Release GitHub Actions 124 | uses: technote-space/release-github-actions@v8 125 | with: 126 | OUTPUT_BUILD_INFO_FILENAME: build.json 127 | TEST_TAG_PREFIX: test/ 128 | ORIGINAL_TAG_PREFIX: original/ 129 | CLEAN_TEST_TAG: true 130 | DELETE_NODE_MODULES: ${{ env.RELEASE_GA_DELETE_NODE_MODULES }} 131 | 132 | package: 133 | name: Publish Package 134 | needs: cover 135 | runs-on: ubuntu-latest 136 | timeout-minutes: 5 137 | if: startsWith(github.ref, 'refs/tags/v') 138 | strategy: 139 | matrix: 140 | target: ['npm', 'gpr'] 141 | steps: 142 | - name: Set running flag 143 | run: echo "RUNNING=1" >> $GITHUB_ENV 144 | - name: Set running flag 145 | run: | 146 | if [ -z "$NPM_AUTH_TOKEN" ]; then 147 | echo "RUNNING=" >> $GITHUB_ENV 148 | fi 149 | env: 150 | NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} 151 | - uses: actions/checkout@v3 152 | if: env.RUNNING 153 | - name: Check package version 154 | uses: technote-space/package-version-check-action@v1 155 | with: 156 | COMMIT_DISABLED: 1 157 | if: env.RUNNING 158 | - name: Set running flag 159 | run: npx can-npm-publish || echo "RUNNING=" >> $GITHUB_ENV 160 | if: env.RUNNING && matrix.target == 'npm' 161 | - name: Set running flag 162 | run: | 163 | LATEST=`npm view . version` 2> /dev/null || : 164 | CURRENT=`cat package.json | jq -r .version` 165 | if [ "$LATEST" = "$CURRENT" ]; then 166 | echo "RUNNING=" >> $GITHUB_ENV 167 | fi 168 | env: 169 | NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 170 | if: env.RUNNING && matrix.target == 'gpr' 171 | 172 | - name: Setup Node.js 173 | uses: actions/setup-node@v3 174 | with: 175 | node-version: 16 176 | registry-url: https://registry.npmjs.org/ 177 | cache: yarn 178 | if: env.RUNNING && matrix.target == 'npm' 179 | - name: Setup Node.js 180 | uses: actions/setup-node@v3 181 | with: 182 | node-version: 16 183 | registry-url: https://npm.pkg.github.com 184 | cache: yarn 185 | if: env.RUNNING && matrix.target == 'gpr' 186 | - name: Install Package dependencies 187 | run: yarn install 188 | if: env.RUNNING 189 | - name: Build 190 | run: yarn build 191 | if: env.RUNNING 192 | - name: Publish 193 | run: | 194 | npm config set //registry.npmjs.org/:_authToken=$NPM_AUTH_TOKEN 195 | npm publish 196 | env: 197 | NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} 198 | if: env.RUNNING && matrix.target == 'npm' 199 | - name: Publish 200 | run: | 201 | npm publish 202 | env: 203 | NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 204 | if: env.RUNNING && matrix.target == 'gpr' 205 | 206 | publishRelease: 207 | name: Create Release 208 | needs: [release, package] 209 | runs-on: ubuntu-latest 210 | timeout-minutes: 5 211 | steps: 212 | - name: Get version 213 | run: echo "TAG_NAME=${HEAD_REF#refs/tags/}" >> $GITHUB_ENV 214 | env: 215 | HEAD_REF: ${{ github.ref }} 216 | - name: Create Release 217 | id: drafter 218 | uses: technote-space/release-drafter@v6 219 | with: 220 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 221 | DRAFT: false 222 | NAME: ${{ env.TAG_NAME }} 223 | TAG: ${{ env.TAG_NAME }} 224 | - uses: 8398a7/action-slack@v3 225 | with: 226 | status: ${{ job.status }} 227 | text: ${{ format('<{0}>', steps.drafter.outputs.html_url) }} 228 | env: 229 | SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} 230 | if: success() && env.SLACK_WEBHOOK_URL 231 | 232 | slack: 233 | name: Slack 234 | needs: publishRelease 235 | runs-on: ubuntu-latest 236 | timeout-minutes: 3 237 | if: always() 238 | steps: 239 | - uses: technote-space/workflow-conclusion-action@gh-actions 240 | - uses: 8398a7/action-slack@v3 241 | with: 242 | status: failure 243 | env: 244 | SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} 245 | if: env.WORKFLOW_CONCLUSION == 'failure' && env.SLACK_WEBHOOK_URL 246 | -------------------------------------------------------------------------------- /.github/workflows/issue-opened.yml: -------------------------------------------------------------------------------- 1 | on: 2 | issues: 3 | types: [opened] 4 | 5 | name: Issue opened 6 | 7 | jobs: 8 | assign: 9 | name: Assign issues to project 10 | runs-on: ubuntu-latest 11 | timeout-minutes: 3 12 | steps: 13 | - uses: technote-space/load-config-action@v1 14 | with: 15 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 16 | IGNORE_WARNING: 'true' 17 | - uses: technote-space/create-project-card-action@v1 18 | with: 19 | PROJECT: ${{ env.PROJECT }} 20 | COLUMN: ${{ env.ISSUE_COLUMN }} 21 | 22 | assignAuthor: 23 | name: Assign author to issue 24 | runs-on: ubuntu-latest 25 | timeout-minutes: 3 26 | steps: 27 | - uses: technote-space/assign-author@v1 28 | -------------------------------------------------------------------------------- /.github/workflows/pr-opened.yml: -------------------------------------------------------------------------------- 1 | on: 2 | pull_request_target: 3 | types: [opened] 4 | 5 | name: Pull Request opened 6 | 7 | jobs: 8 | assignToProject: 9 | name: Assign PullRequest to Project 10 | runs-on: ubuntu-latest 11 | timeout-minutes: 3 12 | steps: 13 | - uses: technote-space/load-config-action@v1 14 | with: 15 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 16 | IGNORE_WARNING: 'true' 17 | - uses: technote-space/create-project-card-action@v1 18 | with: 19 | PROJECT: ${{ env.PROJECT }} 20 | COLUMN: ${{ env.PR_COLUMN }} 21 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 22 | 23 | assignAuthor: 24 | name: Assign author to PR 25 | runs-on: ubuntu-latest 26 | timeout-minutes: 3 27 | steps: 28 | - uses: technote-space/assign-author@v1 29 | 30 | addLabelsByBranch: 31 | name: PR Labeler 32 | runs-on: ubuntu-latest 33 | timeout-minutes: 3 34 | steps: 35 | - uses: technote-space/pr-labeler-action@v4 36 | -------------------------------------------------------------------------------- /.github/workflows/pr-updated.yml: -------------------------------------------------------------------------------- 1 | on: pull_request_target 2 | 3 | concurrency: 4 | group: ${{ github.workflow }}-${{ github.ref }} 5 | 6 | name: Pull Request updated 7 | 8 | jobs: 9 | triage: 10 | name: Pull Request Labeler 11 | runs-on: ubuntu-latest 12 | timeout-minutes: 3 13 | if: "! startsWith(github.head_ref, 'release/')" 14 | steps: 15 | - uses: actions/labeler@v2 16 | with: 17 | repo-token: ${{ secrets.GITHUB_TOKEN }} 18 | 19 | history: 20 | name: Pull Request Body 21 | runs-on: ubuntu-latest 22 | timeout-minutes: 3 23 | if: github.event.pull_request.head.user.id == github.event.pull_request.base.user.id 24 | steps: 25 | - uses: technote-space/load-config-action@v1 26 | with: 27 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 28 | IGNORE_WARNING: 'true' 29 | - uses: technote-space/pr-commit-body-action@v1 30 | with: 31 | EXCLUDE_MESSAGES: ${{ env.EXCLUDE_MESSAGES }} 32 | TITLE: ${{ env.PR_BODY_TITLE }} 33 | LINK_ISSUE_KEYWORD: ${{ (startsWith(github.head_ref, 'release/') && 'closes') || '' }} 34 | FILTER_PR: true 35 | CHANGE_TEMPLATE: ${{ env.CHANGE_TEMPLATE }} 36 | 37 | manageRelease: 38 | name: Manage release 39 | runs-on: ubuntu-latest 40 | timeout-minutes: 3 41 | if: "github.event.pull_request.head.user.id == github.event.pull_request.base.user.id && startsWith(github.head_ref, 'release/') && ! startsWith(github.head_ref, 'release/v')" 42 | steps: 43 | - uses: technote-space/load-config-action@v1 44 | with: 45 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 46 | IGNORE_WARNING: 'true' 47 | - uses: technote-space/release-type-action@v1 48 | with: 49 | EXCLUDE_MESSAGES: ${{ env.EXCLUDE_MESSAGES }} 50 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 51 | 52 | checkVersion: 53 | name: Check package version 54 | runs-on: ubuntu-latest 55 | timeout-minutes: 3 56 | if: "github.event.action == 'synchronize' && github.event.pull_request.head.user.id == github.event.pull_request.base.user.id && startsWith(github.head_ref, 'release/')" 57 | steps: 58 | - uses: technote-space/load-config-action@v1 59 | with: 60 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 61 | IGNORE_WARNING: 'true' 62 | - name: Set running flag 63 | run: echo "RUNNING=1" >> $GITHUB_ENV 64 | - uses: actions/checkout@v3 65 | with: 66 | ref: ${{ github.head_ref }} 67 | - name: Set running flag 68 | run: | 69 | if [[ ! -f package.json ]] || [[ $(< package.json jq -r '.version == null') == 'true' ]]; then 70 | echo "RUNNING=" >> $GITHUB_ENV 71 | fi 72 | 73 | - name: Sort 74 | run: npx sort-package-json 75 | if: env.RUNNING 76 | - name: Get version 77 | uses: technote-space/get-next-version-action@v1 78 | with: 79 | EXCLUDE_MESSAGES: ${{ env.EXCLUDE_MESSAGES }} 80 | if: "env.RUNNING && ! startsWith(github.head_ref, 'release/v')" 81 | - name: Get version 82 | run: echo "NEXT_VERSION=${HEAD_REF#release/}" >> $GITHUB_ENV 83 | env: 84 | HEAD_REF: ${{ github.head_ref }} 85 | if: env.RUNNING && startsWith(github.head_ref, 'release/v') 86 | - name: Check package version 87 | uses: technote-space/package-version-check-action@v1 88 | with: 89 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 90 | BRANCH_PREFIX: release/ 91 | NEXT_VERSION: ${{ env.NEXT_VERSION }} 92 | if: env.NEXT_VERSION 93 | 94 | checkPublish: 95 | name: Check publish 96 | runs-on: ubuntu-latest 97 | timeout-minutes: 3 98 | if: "github.event.pull_request.head.user.id == github.event.pull_request.base.user.id && startsWith(github.head_ref, 'release/')" 99 | steps: 100 | - name: Set running flag 101 | run: echo "RUNNING=1" >> $GITHUB_ENV 102 | - name: Set running flag 103 | run: | 104 | if [ -z "$NPM_AUTH_TOKEN" ]; then 105 | echo "RUNNING=" >> $GITHUB_ENV 106 | fi 107 | env: 108 | NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }} 109 | 110 | - uses: actions/checkout@v3 111 | with: 112 | ref: ${{ github.head_ref }} 113 | if: env.RUNNING 114 | - uses: technote-space/can-npm-publish-action@v1 115 | if: env.RUNNING 116 | -------------------------------------------------------------------------------- /.github/workflows/project-card-moved.yml: -------------------------------------------------------------------------------- 1 | on: 2 | project_card: 3 | types: [created, moved] 4 | 5 | name: Project Card Event 6 | 7 | jobs: 8 | triage: 9 | name: Auto card labeler 10 | runs-on: ubuntu-latest 11 | timeout-minutes: 3 12 | steps: 13 | - uses: technote-space/auto-card-labeler@v1 14 | -------------------------------------------------------------------------------- /.github/workflows/sync-workflows.yml: -------------------------------------------------------------------------------- 1 | on: 2 | schedule: 3 | - cron: 0 11 * * 4 4 | repository_dispatch: 5 | types: [sync-workflows] 6 | workflow_dispatch: 7 | 8 | name: Sync workflows 9 | jobs: 10 | release: 11 | name: Sync workflows 12 | runs-on: ubuntu-latest 13 | timeout-minutes: 5 14 | steps: 15 | - name: Sync workflows 16 | uses: technote-space/create-pr-action@v2 17 | with: 18 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 19 | EXECUTE_COMMANDS: | 20 | rm -rdf .github/workflows/.tmp 21 | mkdir -p .github/workflows/.tmp 22 | git clone --depth=1 https://github.com/technote-space/github-actions-workflows.git .github/workflows/.tmp/workflows 23 | 24 | bash .github/workflows/.tmp/workflows/gh-actions/copy.sh 25 | sed -i 's/cron:.\+$/cron: 0 9 * * 0/' .github/workflows/update-dependencies.yml 26 | 27 | rm -rdf .github/workflows/.tmp 28 | COMMIT_MESSAGE: 'chore: sync workflows' 29 | PR_BRANCH_PREFIX: chore/ 30 | PR_BRANCH_NAME: 'chore-sync-workflows' 31 | PR_TITLE: 'chore: sync workflows' 32 | ONLY_DEFAULT_BRANCH: true 33 | -------------------------------------------------------------------------------- /.github/workflows/toc.yml: -------------------------------------------------------------------------------- 1 | on: 2 | pull_request: 3 | types: [opened, synchronize, reopened, closed] 4 | 5 | concurrency: 6 | group: ${{ github.workflow }}-${{ github.ref }} 7 | 8 | name: TOC Generator 9 | 10 | jobs: 11 | toc: 12 | if: github.event.pull_request.head.user.id == github.event.pull_request.base.user.id 13 | name: TOC Generator 14 | runs-on: ubuntu-latest 15 | timeout-minutes: 3 16 | steps: 17 | - uses: technote-space/load-config-action@v1 18 | with: 19 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 20 | IGNORE_WARNING: 'true' 21 | - uses: technote-space/toc-generator@v4 22 | with: 23 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 24 | TARGET_BRANCH_PREFIX: ${{ env.BRANCH_PREFIX }} 25 | FOLDING: ${{ env.TOC_FOLDING }} 26 | MAX_HEADER_LEVEL: ${{ env.TOC_MAX_HEADER_LEVEL }} 27 | TOC_TITLE: ${{ env.TOC_TITLE }} 28 | CREATE_PR: ${{ env.TOC_CREATE_PR }} 29 | TARGET_PATHS: ${{ env.TOC_TARGET_PATHS }} 30 | FOOTER: ${{ env.TOC_FOOTER }} 31 | -------------------------------------------------------------------------------- /.github/workflows/update-dependencies.yml: -------------------------------------------------------------------------------- 1 | on: 2 | schedule: 3 | - cron: 0 9 * * 0 4 | pull_request: 5 | types: [opened, reopened, closed] 6 | repository_dispatch: 7 | types: [update-deps] 8 | workflow_dispatch: 9 | 10 | concurrency: 11 | group: ${{ github.workflow }}-${{ github.ref }} 12 | 13 | name: Update dependencies 14 | jobs: 15 | update: 16 | name: Update npm dependencies 17 | runs-on: ubuntu-latest 18 | timeout-minutes: 10 19 | if: "! startsWith(github.head_ref, 'release/v')" 20 | steps: 21 | - name: Set running flag 22 | run: echo "RUNNING1=" >> $GITHUB_ENV 23 | - name: Set running flag 24 | run: echo "RUNNING1=1" >> $GITHUB_ENV 25 | if: github.event.pull_request.head.user.id == github.event.pull_request.base.user.id 26 | - uses: technote-space/load-config-action@v1 27 | if: env.RUNNING1 28 | with: 29 | CONFIG_FILENAME: workflow-settings.json, workflow-details.json 30 | IGNORE_WARNING: 'true' 31 | - name: Update dependencies 32 | if: env.RUNNING1 33 | id: update_deps 34 | uses: technote-space/create-pr-action@v2 35 | with: 36 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 37 | EXECUTE_COMMANDS: | 38 | npx npm-check-updates -u --packageFile package.json 39 | yarn install 40 | yarn upgrade 41 | yarn audit 42 | COMMIT_MESSAGE: 'chore: update npm dependencies' 43 | PR_DEFAULT_BRANCH_PREFIX: release/ 44 | PR_DEFAULT_BRANCH_NAME: next-${CURRENT_VERSION} 45 | PR_DEFAULT_BRANCH_TITLE: 'feat: release' 46 | TARGET_BRANCH_PREFIX: release/ 47 | AUTO_MERGE_THRESHOLD_DAYS: 14 48 | 49 | - name: Set running flag 50 | run: echo "RUNNING2=" >> $GITHUB_ENV 51 | - name: Set running flag 52 | run: echo "RUNNING2=1" >> $GITHUB_ENV 53 | if: env.RUNNING1 && steps.update_deps.outputs.result != 'succeeded' && github.event_name == 'pull_request' && github.event.action != 'closed' && startsWith(github.head_ref, 'release/') 54 | - uses: actions/checkout@v3 55 | if: env.RUNNING2 56 | - name: Set running flag 57 | run: | 58 | if [[ ! -f package.json ]] || [[ $(< package.json jq -r '.version == null') == 'true' ]]; then 59 | echo "RUNNING2=" >> $GITHUB_ENV 60 | fi 61 | - name: Sort 62 | run: npx sort-package-json 63 | if: env.RUNNING2 64 | - name: Get version 65 | uses: technote-space/get-next-version-action@v1 66 | with: 67 | EXCLUDE_MESSAGES: ${{ env.EXCLUDE_MESSAGES }} 68 | if: "env.RUNNING2 && ! startsWith(github.head_ref, 'release/v')" 69 | - name: Get version 70 | run: echo "NEXT_VERSION=${HEAD_REF#release/}" >> $GITHUB_ENV 71 | env: 72 | HEAD_REF: ${{ github.head_ref }} 73 | if: env.RUNNING2 && startsWith(github.head_ref, 'release/v') 74 | - name: Check package version 75 | uses: technote-space/package-version-check-action@v1 76 | with: 77 | GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} 78 | BRANCH_PREFIX: release/ 79 | NEXT_VERSION: ${{ env.NEXT_VERSION }} 80 | if: env.NEXT_VERSION 81 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /.idea 2 | /node_modules 3 | /coverage 4 | /lib 5 | /.work 6 | .eslintcache 7 | .env 8 | -------------------------------------------------------------------------------- /.husky/.gitignore: -------------------------------------------------------------------------------- 1 | _ 2 | -------------------------------------------------------------------------------- /.husky/commit-msg: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | yarn commitlint -- --edit $1 5 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | . "$(dirname "$0")/_/husky.sh" 3 | 4 | yarn lint-staged 5 | -------------------------------------------------------------------------------- /.lintstagedrc: -------------------------------------------------------------------------------- 1 | { 2 | "*.{js,jsx,ts,tsx}": "yarn lint:fix" 3 | } -------------------------------------------------------------------------------- /.releasegarc: -------------------------------------------------------------------------------- 1 | { 2 | "inputs": { 3 | "OUTPUT_BUILD_INFO_FILENAME": "build.json", 4 | "TEST_TAG_PREFIX": "test/", 5 | "CLEAN_TEST_TAG": "true" 6 | } 7 | } -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2020 Technote 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in 13 | all copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 21 | THE SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.ja.md: -------------------------------------------------------------------------------- 1 | # Workflow Conclusion Action 2 | 3 | [![CI Status](https://github.com/technote-space/workflow-conclusion-action/workflows/CI/badge.svg)](https://github.com/technote-space/workflow-conclusion-action/actions) 4 | [![codecov](https://codecov.io/gh/technote-space/workflow-conclusion-action/branch/main/graph/badge.svg)](https://codecov.io/gh/technote-space/workflow-conclusion-action) 5 | [![CodeFactor](https://www.codefactor.io/repository/github/technote-space/workflow-conclusion-action/badge)](https://www.codefactor.io/repository/github/technote-space/workflow-conclusion-action) 6 | [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/technote-space/workflow-conclusion-action/blob/main/LICENSE) 7 | 8 | *Read this in other languages: [English](README.md), [日本語](README.ja.md).* 9 | 10 | これはワークフローの結果を取得するための`GitHub Actions`です。 11 | 12 | ## Table of Contents 13 | 14 | 15 | 16 |
17 | Details 18 | 19 | - [使用方法](#%E4%BD%BF%E7%94%A8%E6%96%B9%E6%B3%95) 20 | - [Success](#success) 21 | - [Failure](#failure) 22 | - [Author](#author) 23 | 24 | *generated with [TOC Generator](https://github.com/technote-space/toc-generator)* 25 | 26 |
27 | 28 | 29 | ## 使用方法 30 | 例:Lint => Test => Publish (タグ付与時のみ) => slack (いずれかのジョブが失敗した場合のみ) 31 | ```yaml 32 | on: push 33 | 34 | name: CI 35 | 36 | jobs: 37 | lint: 38 | name: ESLint 39 | runs-on: ubuntu-latest 40 | ... 41 | 42 | test: 43 | name: Coverage 44 | needs: lint 45 | strategy: 46 | matrix: 47 | node: ['11', '12'] 48 | ... 49 | 50 | publish: 51 | name: Publish Package 52 | needs: test 53 | if: startsWith(github.ref, 'refs/tags/v') 54 | ... 55 | 56 | slack: 57 | name: Slack 58 | needs: publish # このjobを除いた最後のjobを"needs"に設定 59 | runs-on: ubuntu-latest 60 | if: always() # "always"を設定 61 | steps: 62 | # workflowの結果を取得するためにこのアクションを実行 63 | # 環境変数から結果を取得できます (env.WORKFLOW_CONCLUSION) 64 | - uses: technote-space/workflow-conclusion-action@v3 65 | 66 | # workflowの結果を使用してアクションを実行 67 | - uses: 8398a7/action-slack@v3 68 | with: 69 | # status: ${{ env.WORKFLOW_CONCLUSION }} # neutral, success, skipped, cancelled, timed_out, action_required, failure 70 | status: failure 71 | env: 72 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 73 | SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} 74 | if: env.WORKFLOW_CONCLUSION == 'failure' # 失敗を通知する場合 75 | ``` 76 | 77 | ### Success 78 | ![Success](https://raw.githubusercontent.com/technote-space/workflow-conclusion-action/images/success.png) 79 | 80 | すべてのジョブが正常だったため、Slackアクションはスキップされます。 81 | 82 | ### Failure 83 | ![Failure](https://raw.githubusercontent.com/technote-space/workflow-conclusion-action/images/failure.png) 84 | 85 | いくつかのジョブがスキップされた場合でもSlackアクションは実行されます。 86 | 87 | ## Author 88 | [GitHub (Technote)](https://github.com/technote-space) 89 | [Blog](https://technote.space) 90 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Workflow Conclusion Action 2 | 3 | [![CI Status](https://github.com/technote-space/workflow-conclusion-action/workflows/CI/badge.svg)](https://github.com/technote-space/workflow-conclusion-action/actions) 4 | [![codecov](https://codecov.io/gh/technote-space/workflow-conclusion-action/branch/main/graph/badge.svg)](https://codecov.io/gh/technote-space/workflow-conclusion-action) 5 | [![CodeFactor](https://www.codefactor.io/repository/github/technote-space/workflow-conclusion-action/badge)](https://www.codefactor.io/repository/github/technote-space/workflow-conclusion-action) 6 | [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://github.com/technote-space/workflow-conclusion-action/blob/main/LICENSE) 7 | 8 | *Read this in other languages: [English](README.md), [日本語](README.ja.md).* 9 | 10 | GitHub action to get workflow conclusion. 11 | 12 | ## Table of Contents 13 | 14 | 15 | 16 |
17 | Details 18 | 19 | - [Usage](#usage) 20 | - [Success](#success) 21 | - [Failure](#failure) 22 | - [Author](#author) 23 | 24 | *generated with [TOC Generator](https://github.com/technote-space/toc-generator)* 25 | 26 |
27 | 28 | 29 | ## Usage 30 | e.g. Lint => Test => Publish (only tagged) => slack (only if any job fails) 31 | ```yaml 32 | on: push 33 | 34 | name: CI 35 | 36 | jobs: 37 | lint: 38 | name: ESLint 39 | runs-on: ubuntu-latest 40 | ... 41 | 42 | test: 43 | name: Coverage 44 | needs: lint 45 | strategy: 46 | matrix: 47 | node: ['11', '12'] 48 | ... 49 | 50 | publish: 51 | name: Publish Package 52 | needs: test 53 | if: startsWith(github.ref, 'refs/tags/v') 54 | ... 55 | 56 | slack: 57 | name: Slack 58 | needs: publish # set "needs" only last job except this job 59 | runs-on: ubuntu-latest 60 | if: always() # set "always" 61 | steps: 62 | # run this action to get the workflow conclusion 63 | # You can get the conclusion via env (env.WORKFLOW_CONCLUSION) 64 | - uses: technote-space/workflow-conclusion-action@v3 65 | 66 | # run other action with the workflow conclusion 67 | - uses: 8398a7/action-slack@v3 68 | with: 69 | # status: ${{ env.WORKFLOW_CONCLUSION }} # neutral, success, skipped, cancelled, timed_out, action_required, failure 70 | status: failure 71 | env: 72 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 73 | SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} 74 | if: env.WORKFLOW_CONCLUSION == 'failure' # notify only if failure 75 | ``` 76 | 77 | ### Success 78 | ![Success](https://raw.githubusercontent.com/technote-space/workflow-conclusion-action/images/success.png) 79 | 80 | Slack action step is skipped because all jobs are success. 81 | 82 | ### Failure 83 | ![Failure](https://raw.githubusercontent.com/technote-space/workflow-conclusion-action/images/failure.png) 84 | 85 | Slack action step has been executed even if some jobs were skipped. 86 | 87 | ## Author 88 | [GitHub (Technote)](https://github.com/technote-space) 89 | [Blog](https://technote.space) 90 | -------------------------------------------------------------------------------- /_config.yml: -------------------------------------------------------------------------------- 1 | theme: jekyll-theme-architect 2 | 3 | # Google Analytics 4 | google_analytics: UA-78163306-3 -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: Workflow Conclusion Action 2 | 3 | description: GitHub action to get workflow conclusion. 4 | 5 | author: technote-space 6 | 7 | inputs: 8 | GITHUB_TOKEN: 9 | description: Secret GitHub API token to use for making API requests. 10 | default: ${{ github.token }} 11 | required: false 12 | TARGET_RUN_ID: 13 | description: Target run id 14 | default: ${{ github.run_id }} 15 | required: false 16 | SET_ENV_NAME: 17 | description: Env name 18 | required: false 19 | default: WORKFLOW_CONCLUSION 20 | FALLBACK_CONCLUSION: 21 | description: Fallback conclusion 22 | required: false 23 | default: skipped 24 | STRICT_SUCCESS: 25 | description: Whether to report as success only if all jobs are successful 26 | required: false 27 | default: "false" 28 | 29 | outputs: 30 | conclusion: 31 | description: Workflow conclusion 32 | 33 | branding: 34 | icon: 'check-circle' 35 | color: 'green' 36 | 37 | runs: 38 | using: node16 39 | main: lib/main.js 40 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@technote-space/workflow-conclusion-action", 3 | "version": "3.0.3", 4 | "description": "GitHub action to get workflow conclusion.", 5 | "keywords": [ 6 | "github", 7 | "github actions" 8 | ], 9 | "homepage": "https://github.com/technote-space/workflow-conclusion-action", 10 | "bugs": { 11 | "url": "https://github.com/technote-space/workflow-conclusion-action/issues" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/technote-space/workflow-conclusion-action.git" 16 | }, 17 | "license": "MIT", 18 | "author": { 19 | "name": "Technote", 20 | "email": "technote.space@gmail.com", 21 | "url": "https://technote.space" 22 | }, 23 | "files": [ 24 | "lib", 25 | "action.yml" 26 | ], 27 | "scripts": { 28 | "build": "rm -rdf lib && rollup -c", 29 | "cover": "vitest run --coverage", 30 | "postinstall": "[ -n \"$CI\" ] || [ ! -f node_modules/.bin/husky ] || husky install", 31 | "lint": "eslint 'src/**/*.ts' --cache", 32 | "lint:fix": "eslint --fix 'src/**/*.ts'", 33 | "prepublishOnly": "[ -n \"$CI\" ] || [ ! -f node_modules/.bin/pinst ] || pinst --disable", 34 | "postpublish": "[ -n \"$CI\" ] || [ ! -f node_modules/.bin/pinst ] || pinst --enable", 35 | "release": "yarn release-ga --test", 36 | "test": "yarn lint && yarn typecheck && yarn cover", 37 | "typecheck": "tsc --noEmit", 38 | "update": "npm_config_yes=true npx npm-check-updates -u --timeout 100000 && yarn install && yarn upgrade && yarn audit" 39 | }, 40 | "devDependencies": { 41 | "@actions/core": "^1.10.0", 42 | "@actions/github": "^5.1.1", 43 | "@commitlint/cli": "^17.3.0", 44 | "@commitlint/config-conventional": "^17.3.0", 45 | "@octokit/openapi-types": "^14.0.0", 46 | "@octokit/types": "^8.0.0", 47 | "@rollup/plugin-commonjs": "^23.0.3", 48 | "@rollup/plugin-json": "^5.0.2", 49 | "@rollup/plugin-node-resolve": "^15.0.1", 50 | "@rollup/plugin-typescript": "^10.0.1", 51 | "@sindresorhus/tsconfig": "^3.0.1", 52 | "@technote-space/github-action-helper": "^5.3.10", 53 | "@technote-space/github-action-log-helper": "^0.2.9", 54 | "@technote-space/github-action-test-helper": "^0.11.1", 55 | "@technote-space/release-github-actions-cli": "^1.9.3", 56 | "@types/node": "^18.11.11", 57 | "@typescript-eslint/eslint-plugin": "^5.45.1", 58 | "@typescript-eslint/parser": "^5.45.1", 59 | "@vitest/coverage-c8": "^0.25.4", 60 | "eslint": "^8.29.0", 61 | "eslint-plugin-import": "^2.26.0", 62 | "husky": "^8.0.2", 63 | "lint-staged": "^13.1.0", 64 | "nock": "^13.2.9", 65 | "pinst": "^3.0.0", 66 | "rollup": "^3.6.0", 67 | "typescript": "^4.9.3", 68 | "vitest": "^0.25.4" 69 | }, 70 | "publishConfig": { 71 | "access": "public" 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /rollup.config.mjs: -------------------------------------------------------------------------------- 1 | import pluginCommonjs from '@rollup/plugin-commonjs'; 2 | import pluginJson from '@rollup/plugin-json'; 3 | import pluginNodeResolve from '@rollup/plugin-node-resolve'; 4 | import pluginTypescript from '@rollup/plugin-typescript'; 5 | 6 | export default { 7 | input: 'src/main.ts', 8 | output: { 9 | file: 'lib/main.js', 10 | format: 'cjs', 11 | }, 12 | plugins: [ 13 | pluginTypescript(), 14 | pluginNodeResolve(), 15 | pluginCommonjs(), 16 | pluginJson(), 17 | ], 18 | }; 19 | -------------------------------------------------------------------------------- /src/constant.ts: -------------------------------------------------------------------------------- 1 | export const CONCLUSIONS = [ 2 | 'neutral', 3 | 'skipped', 4 | 'success', 5 | 'cancelled', 6 | 'timed_out', 7 | 'action_required', 8 | 'failure', 9 | ]; 10 | -------------------------------------------------------------------------------- /src/fixtures/actions.list.jobs1.json: -------------------------------------------------------------------------------- 1 | { 2 | "total_count": 2, 3 | "jobs": [ 4 | { 5 | "id": 399444495, 6 | "run_id": 29679449, 7 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 8 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 9 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 10 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444495", 11 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444495", 12 | "status": "queued", 13 | "conclusion": "skipped", 14 | "started_at": "2020-01-20T17:42:40Z", 15 | "completed_at": "2020-01-20T17:44:39Z", 16 | "name": "build", 17 | "steps": [], 18 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444496" 19 | }, 20 | { 21 | "id": 399444496, 22 | "run_id": 29679449, 23 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 24 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 25 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 26 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444496", 27 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444496", 28 | "status": "completed", 29 | "conclusion": "success", 30 | "started_at": "2020-01-20T17:42:40Z", 31 | "completed_at": "2020-01-20T17:44:39Z", 32 | "name": "build", 33 | "steps": [ 34 | { 35 | "name": "Set up job", 36 | "status": "completed", 37 | "conclusion": "success", 38 | "number": 1, 39 | "started_at": "2020-01-20T09:42:40.000-08:00", 40 | "completed_at": "2020-01-20T09:42:41.000-08:00" 41 | }, 42 | { 43 | "name": "Run actions/checkout@v2", 44 | "status": "completed", 45 | "conclusion": "success", 46 | "number": 2, 47 | "started_at": "2020-01-20T09:42:41.000-08:00", 48 | "completed_at": "2020-01-20T09:42:45.000-08:00" 49 | }, 50 | { 51 | "name": "Set up Ruby", 52 | "status": "completed", 53 | "conclusion": "success", 54 | "number": 3, 55 | "started_at": "2020-01-20T09:42:45.000-08:00", 56 | "completed_at": "2020-01-20T09:42:45.000-08:00" 57 | }, 58 | { 59 | "name": "Run actions/cache@v2", 60 | "status": "completed", 61 | "conclusion": "success", 62 | "number": 4, 63 | "started_at": "2020-01-20T09:42:45.000-08:00", 64 | "completed_at": "2020-01-20T09:42:48.000-08:00" 65 | }, 66 | { 67 | "name": "Install Bundler", 68 | "status": "completed", 69 | "conclusion": "success", 70 | "number": 5, 71 | "started_at": "2020-01-20T09:42:48.000-08:00", 72 | "completed_at": "2020-01-20T09:42:52.000-08:00" 73 | }, 74 | { 75 | "name": "Install Gems", 76 | "status": "completed", 77 | "conclusion": "success", 78 | "number": 6, 79 | "started_at": "2020-01-20T09:42:52.000-08:00", 80 | "completed_at": "2020-01-20T09:42:53.000-08:00" 81 | }, 82 | { 83 | "name": "Run Tests", 84 | "status": "completed", 85 | "conclusion": "success", 86 | "number": 7, 87 | "started_at": "2020-01-20T09:42:53.000-08:00", 88 | "completed_at": "2020-01-20T09:42:59.000-08:00" 89 | }, 90 | { 91 | "name": "Deploy to Heroku", 92 | "status": "completed", 93 | "conclusion": "success", 94 | "number": 8, 95 | "started_at": "2020-01-20T09:42:59.000-08:00", 96 | "completed_at": "2020-01-20T09:44:39.000-08:00" 97 | }, 98 | { 99 | "name": "Post actions/cache@v2", 100 | "status": "completed", 101 | "conclusion": "success", 102 | "number": 16, 103 | "started_at": "2020-01-20T09:44:39.000-08:00", 104 | "completed_at": "2020-01-20T09:44:39.000-08:00" 105 | }, 106 | { 107 | "name": "Complete job", 108 | "status": "completed", 109 | "conclusion": "success", 110 | "number": 17, 111 | "started_at": "2020-01-20T09:44:39.000-08:00", 112 | "completed_at": "2020-01-20T09:44:39.000-08:00" 113 | } 114 | ], 115 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444496" 116 | } 117 | ] 118 | } 119 | -------------------------------------------------------------------------------- /src/fixtures/actions.list.jobs2.json: -------------------------------------------------------------------------------- 1 | { 2 | "total_count": 4, 3 | "jobs": [ 4 | { 5 | "id": 399444496, 6 | "run_id": 29679449, 7 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 8 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 9 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 10 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444496", 11 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444496", 12 | "status": "completed", 13 | "conclusion": null, 14 | "started_at": "2020-01-20T17:42:40Z", 15 | "completed_at": "2020-01-20T17:44:39Z", 16 | "name": "build", 17 | "steps": [ 18 | { 19 | "name": "Set up job", 20 | "status": "completed", 21 | "conclusion": "success", 22 | "number": 1, 23 | "started_at": "2020-01-20T09:42:40.000-08:00", 24 | "completed_at": "2020-01-20T09:42:41.000-08:00" 25 | }, 26 | { 27 | "name": "Run actions/checkout@v2", 28 | "status": "completed", 29 | "conclusion": "success", 30 | "number": 2, 31 | "started_at": "2020-01-20T09:42:41.000-08:00", 32 | "completed_at": "2020-01-20T09:42:45.000-08:00" 33 | }, 34 | { 35 | "name": "Set up Ruby", 36 | "status": "completed", 37 | "conclusion": "success", 38 | "number": 3, 39 | "started_at": "2020-01-20T09:42:45.000-08:00", 40 | "completed_at": "2020-01-20T09:42:45.000-08:00" 41 | }, 42 | { 43 | "name": "Run actions/cache@v2", 44 | "status": "completed", 45 | "conclusion": "success", 46 | "number": 4, 47 | "started_at": "2020-01-20T09:42:45.000-08:00", 48 | "completed_at": "2020-01-20T09:42:48.000-08:00" 49 | }, 50 | { 51 | "name": "Install Bundler", 52 | "status": "completed", 53 | "conclusion": "success", 54 | "number": 5, 55 | "started_at": "2020-01-20T09:42:48.000-08:00", 56 | "completed_at": "2020-01-20T09:42:52.000-08:00" 57 | }, 58 | { 59 | "name": "Install Gems", 60 | "status": "completed", 61 | "conclusion": "success", 62 | "number": 6, 63 | "started_at": "2020-01-20T09:42:52.000-08:00", 64 | "completed_at": "2020-01-20T09:42:53.000-08:00" 65 | }, 66 | { 67 | "name": "Run Tests", 68 | "status": "completed", 69 | "conclusion": "success", 70 | "number": 7, 71 | "started_at": "2020-01-20T09:42:53.000-08:00", 72 | "completed_at": "2020-01-20T09:42:59.000-08:00" 73 | }, 74 | { 75 | "name": "Deploy to Heroku", 76 | "status": "completed", 77 | "conclusion": "success", 78 | "number": 8, 79 | "started_at": "2020-01-20T09:42:59.000-08:00", 80 | "completed_at": "2020-01-20T09:44:39.000-08:00" 81 | }, 82 | { 83 | "name": "Post actions/cache@v2", 84 | "status": "completed", 85 | "conclusion": "success", 86 | "number": 16, 87 | "started_at": "2020-01-20T09:44:39.000-08:00", 88 | "completed_at": "2020-01-20T09:44:39.000-08:00" 89 | }, 90 | { 91 | "name": "Complete job", 92 | "status": "completed", 93 | "conclusion": "success", 94 | "number": 17, 95 | "started_at": "2020-01-20T09:44:39.000-08:00", 96 | "completed_at": "2020-01-20T09:44:39.000-08:00" 97 | } 98 | ], 99 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444496" 100 | }, 101 | { 102 | "id": 399444497, 103 | "run_id": 29679449, 104 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 105 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 106 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 107 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444497", 108 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444497", 109 | "status": "completed", 110 | "conclusion": "cancelled", 111 | "started_at": "2020-01-20T17:42:40Z", 112 | "completed_at": "2020-01-20T17:44:39Z", 113 | "name": "test", 114 | "steps": [ 115 | { 116 | "name": "Set up job", 117 | "status": "completed", 118 | "conclusion": "success", 119 | "number": 1, 120 | "started_at": "2020-01-20T09:42:40.000-08:00", 121 | "completed_at": "2020-01-20T09:42:41.000-08:00" 122 | }, 123 | { 124 | "name": "Run actions/checkout@v2", 125 | "status": "completed", 126 | "conclusion": "success", 127 | "number": 2, 128 | "started_at": "2020-01-20T09:42:41.000-08:00", 129 | "completed_at": "2020-01-20T09:42:45.000-08:00" 130 | }, 131 | { 132 | "name": "Set up Ruby", 133 | "status": "completed", 134 | "conclusion": "success", 135 | "number": 3, 136 | "started_at": "2020-01-20T09:42:45.000-08:00", 137 | "completed_at": "2020-01-20T09:42:45.000-08:00" 138 | }, 139 | { 140 | "name": "Run actions/cache@v2", 141 | "status": "completed", 142 | "conclusion": "success", 143 | "number": 4, 144 | "started_at": "2020-01-20T09:42:45.000-08:00", 145 | "completed_at": "2020-01-20T09:42:48.000-08:00" 146 | }, 147 | { 148 | "name": "Install Bundler", 149 | "status": "completed", 150 | "conclusion": "success", 151 | "number": 5, 152 | "started_at": "2020-01-20T09:42:48.000-08:00", 153 | "completed_at": "2020-01-20T09:42:52.000-08:00" 154 | }, 155 | { 156 | "name": "Install Gems", 157 | "status": "completed", 158 | "conclusion": "success", 159 | "number": 6, 160 | "started_at": "2020-01-20T09:42:52.000-08:00", 161 | "completed_at": "2020-01-20T09:42:53.000-08:00" 162 | }, 163 | { 164 | "name": "Run Tests", 165 | "status": "completed", 166 | "conclusion": "success", 167 | "number": 7, 168 | "started_at": "2020-01-20T09:42:53.000-08:00", 169 | "completed_at": "2020-01-20T09:42:59.000-08:00" 170 | }, 171 | { 172 | "name": "Deploy to Heroku", 173 | "status": "completed", 174 | "conclusion": "success", 175 | "number": 8, 176 | "started_at": "2020-01-20T09:42:59.000-08:00", 177 | "completed_at": "2020-01-20T09:44:39.000-08:00" 178 | }, 179 | { 180 | "name": "Post actions/cache@v2", 181 | "status": "completed", 182 | "conclusion": "success", 183 | "number": 16, 184 | "started_at": "2020-01-20T09:44:39.000-08:00", 185 | "completed_at": "2020-01-20T09:44:39.000-08:00" 186 | }, 187 | { 188 | "name": "Complete job", 189 | "status": "completed", 190 | "conclusion": "success", 191 | "number": 17, 192 | "started_at": "2020-01-20T09:44:39.000-08:00", 193 | "completed_at": "2020-01-20T09:44:39.000-08:00" 194 | } 195 | ], 196 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444497" 197 | }, 198 | { 199 | "id": 399444498, 200 | "run_id": 29679449, 201 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 202 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 203 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 204 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444498", 205 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444498", 206 | "status": "completed", 207 | "conclusion": "success", 208 | "started_at": "2020-01-20T17:42:40Z", 209 | "completed_at": "2020-01-20T17:44:39Z", 210 | "name": "build", 211 | "steps": [ 212 | { 213 | "name": "Set up job", 214 | "status": "completed", 215 | "conclusion": "success", 216 | "number": 1, 217 | "started_at": "2020-01-20T09:42:40.000-08:00", 218 | "completed_at": "2020-01-20T09:42:41.000-08:00" 219 | }, 220 | { 221 | "name": "Run actions/checkout@v2", 222 | "status": "completed", 223 | "conclusion": "success", 224 | "number": 2, 225 | "started_at": "2020-01-20T09:42:41.000-08:00", 226 | "completed_at": "2020-01-20T09:42:45.000-08:00" 227 | }, 228 | { 229 | "name": "Set up Ruby", 230 | "status": "completed", 231 | "conclusion": "success", 232 | "number": 3, 233 | "started_at": "2020-01-20T09:42:45.000-08:00", 234 | "completed_at": "2020-01-20T09:42:45.000-08:00" 235 | }, 236 | { 237 | "name": "Run actions/cache@v2", 238 | "status": "completed", 239 | "conclusion": "success", 240 | "number": 4, 241 | "started_at": "2020-01-20T09:42:45.000-08:00", 242 | "completed_at": "2020-01-20T09:42:48.000-08:00" 243 | }, 244 | { 245 | "name": "Install Bundler", 246 | "status": "completed", 247 | "conclusion": "success", 248 | "number": 5, 249 | "started_at": "2020-01-20T09:42:48.000-08:00", 250 | "completed_at": "2020-01-20T09:42:52.000-08:00" 251 | }, 252 | { 253 | "name": "Install Gems", 254 | "status": "completed", 255 | "conclusion": "success", 256 | "number": 6, 257 | "started_at": "2020-01-20T09:42:52.000-08:00", 258 | "completed_at": "2020-01-20T09:42:53.000-08:00" 259 | }, 260 | { 261 | "name": "Run Tests", 262 | "status": "completed", 263 | "conclusion": "success", 264 | "number": 7, 265 | "started_at": "2020-01-20T09:42:53.000-08:00", 266 | "completed_at": "2020-01-20T09:42:59.000-08:00" 267 | }, 268 | { 269 | "name": "Deploy to Heroku", 270 | "status": "completed", 271 | "conclusion": "success", 272 | "number": 8, 273 | "started_at": "2020-01-20T09:42:59.000-08:00", 274 | "completed_at": "2020-01-20T09:44:39.000-08:00" 275 | }, 276 | { 277 | "name": "Post actions/cache@v2", 278 | "status": "completed", 279 | "conclusion": "success", 280 | "number": 16, 281 | "started_at": "2020-01-20T09:44:39.000-08:00", 282 | "completed_at": "2020-01-20T09:44:39.000-08:00" 283 | }, 284 | { 285 | "name": "Complete job", 286 | "status": "completed", 287 | "conclusion": "success", 288 | "number": 17, 289 | "started_at": "2020-01-20T09:44:39.000-08:00", 290 | "completed_at": "2020-01-20T09:44:39.000-08:00" 291 | } 292 | ], 293 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444498" 294 | }, 295 | { 296 | "id": 399444499, 297 | "run_id": 29679449, 298 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 299 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 300 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 301 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444499", 302 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444499", 303 | "status": "queued", 304 | "conclusion": "skipped", 305 | "started_at": "2020-01-20T17:42:40Z", 306 | "completed_at": "2020-01-20T17:44:39Z", 307 | "name": "release", 308 | "steps": [], 309 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444499" 310 | } 311 | ] 312 | } 313 | -------------------------------------------------------------------------------- /src/fixtures/actions.list.jobs3.json: -------------------------------------------------------------------------------- 1 | { 2 | "total_count": 33, 3 | "jobs": [ 4 | { 5 | "id": 399444496, 6 | "run_id": 29679449, 7 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 8 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 9 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 10 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444496", 11 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444496", 12 | "status": "completed", 13 | "conclusion": "failure", 14 | "started_at": "2020-01-20T17:42:40Z", 15 | "completed_at": "2020-01-20T17:44:39Z", 16 | "name": "lint", 17 | "steps": [ 18 | { 19 | "name": "Set up job", 20 | "status": "completed", 21 | "conclusion": "success", 22 | "number": 1, 23 | "started_at": "2020-01-20T09:42:40.000-08:00", 24 | "completed_at": "2020-01-20T09:42:41.000-08:00" 25 | }, 26 | { 27 | "name": "Run actions/checkout@v2", 28 | "status": "completed", 29 | "conclusion": "success", 30 | "number": 2, 31 | "started_at": "2020-01-20T09:42:41.000-08:00", 32 | "completed_at": "2020-01-20T09:42:45.000-08:00" 33 | }, 34 | { 35 | "name": "Set up Ruby", 36 | "status": "completed", 37 | "conclusion": "success", 38 | "number": 3, 39 | "started_at": "2020-01-20T09:42:45.000-08:00", 40 | "completed_at": "2020-01-20T09:42:45.000-08:00" 41 | }, 42 | { 43 | "name": "Run actions/cache@v2", 44 | "status": "completed", 45 | "conclusion": "success", 46 | "number": 4, 47 | "started_at": "2020-01-20T09:42:45.000-08:00", 48 | "completed_at": "2020-01-20T09:42:48.000-08:00" 49 | }, 50 | { 51 | "name": "Install Bundler", 52 | "status": "completed", 53 | "conclusion": "success", 54 | "number": 5, 55 | "started_at": "2020-01-20T09:42:48.000-08:00", 56 | "completed_at": "2020-01-20T09:42:52.000-08:00" 57 | }, 58 | { 59 | "name": "Install Gems", 60 | "status": "completed", 61 | "conclusion": "success", 62 | "number": 6, 63 | "started_at": "2020-01-20T09:42:52.000-08:00", 64 | "completed_at": "2020-01-20T09:42:53.000-08:00" 65 | }, 66 | { 67 | "name": "Run Tests", 68 | "status": "completed", 69 | "conclusion": "success", 70 | "number": 7, 71 | "started_at": "2020-01-20T09:42:53.000-08:00", 72 | "completed_at": "2020-01-20T09:42:59.000-08:00" 73 | }, 74 | { 75 | "name": "Deploy to Heroku", 76 | "status": "completed", 77 | "conclusion": "success", 78 | "number": 8, 79 | "started_at": "2020-01-20T09:42:59.000-08:00", 80 | "completed_at": "2020-01-20T09:44:39.000-08:00" 81 | }, 82 | { 83 | "name": "Post actions/cache@v2", 84 | "status": "completed", 85 | "conclusion": "success", 86 | "number": 16, 87 | "started_at": "2020-01-20T09:44:39.000-08:00", 88 | "completed_at": "2020-01-20T09:44:39.000-08:00" 89 | }, 90 | { 91 | "name": "Complete job", 92 | "status": "completed", 93 | "conclusion": "success", 94 | "number": 17, 95 | "started_at": "2020-01-20T09:44:39.000-08:00", 96 | "completed_at": "2020-01-20T09:44:39.000-08:00" 97 | } 98 | ], 99 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444496" 100 | }, 101 | { 102 | "id": 399444497, 103 | "run_id": 29679449, 104 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 105 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 106 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 107 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444497", 108 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444497", 109 | "status": "completed", 110 | "conclusion": "cancelled", 111 | "started_at": "2020-01-20T17:42:40Z", 112 | "completed_at": "2020-01-20T17:44:39Z", 113 | "name": "test", 114 | "steps": [ 115 | { 116 | "name": "Set up job", 117 | "status": "completed", 118 | "conclusion": "success", 119 | "number": 1, 120 | "started_at": "2020-01-20T09:42:40.000-08:00", 121 | "completed_at": "2020-01-20T09:42:41.000-08:00" 122 | }, 123 | { 124 | "name": "Run actions/checkout@v2", 125 | "status": "completed", 126 | "conclusion": "success", 127 | "number": 2, 128 | "started_at": "2020-01-20T09:42:41.000-08:00", 129 | "completed_at": "2020-01-20T09:42:45.000-08:00" 130 | }, 131 | { 132 | "name": "Set up Ruby", 133 | "status": "completed", 134 | "conclusion": "success", 135 | "number": 3, 136 | "started_at": "2020-01-20T09:42:45.000-08:00", 137 | "completed_at": "2020-01-20T09:42:45.000-08:00" 138 | }, 139 | { 140 | "name": "Run actions/cache@v2", 141 | "status": "completed", 142 | "conclusion": "success", 143 | "number": 4, 144 | "started_at": "2020-01-20T09:42:45.000-08:00", 145 | "completed_at": "2020-01-20T09:42:48.000-08:00" 146 | }, 147 | { 148 | "name": "Install Bundler", 149 | "status": "completed", 150 | "conclusion": "success", 151 | "number": 5, 152 | "started_at": "2020-01-20T09:42:48.000-08:00", 153 | "completed_at": "2020-01-20T09:42:52.000-08:00" 154 | }, 155 | { 156 | "name": "Install Gems", 157 | "status": "completed", 158 | "conclusion": "success", 159 | "number": 6, 160 | "started_at": "2020-01-20T09:42:52.000-08:00", 161 | "completed_at": "2020-01-20T09:42:53.000-08:00" 162 | }, 163 | { 164 | "name": "Run Tests", 165 | "status": "completed", 166 | "conclusion": "success", 167 | "number": 7, 168 | "started_at": "2020-01-20T09:42:53.000-08:00", 169 | "completed_at": "2020-01-20T09:42:59.000-08:00" 170 | }, 171 | { 172 | "name": "Deploy to Heroku", 173 | "status": "completed", 174 | "conclusion": "success", 175 | "number": 8, 176 | "started_at": "2020-01-20T09:42:59.000-08:00", 177 | "completed_at": "2020-01-20T09:44:39.000-08:00" 178 | }, 179 | { 180 | "name": "Post actions/cache@v2", 181 | "status": "completed", 182 | "conclusion": "success", 183 | "number": 16, 184 | "started_at": "2020-01-20T09:44:39.000-08:00", 185 | "completed_at": "2020-01-20T09:44:39.000-08:00" 186 | }, 187 | { 188 | "name": "Complete job", 189 | "status": "completed", 190 | "conclusion": "success", 191 | "number": 17, 192 | "started_at": "2020-01-20T09:44:39.000-08:00", 193 | "completed_at": "2020-01-20T09:44:39.000-08:00" 194 | } 195 | ], 196 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444497" 197 | }, 198 | { 199 | "id": 399444498, 200 | "run_id": 29679449, 201 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 202 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 203 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 204 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444498", 205 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444498", 206 | "status": "completed", 207 | "conclusion": "success", 208 | "started_at": "2020-01-20T17:42:40Z", 209 | "completed_at": "2020-01-20T17:44:39Z", 210 | "name": "build", 211 | "steps": [ 212 | { 213 | "name": "Set up job", 214 | "status": "completed", 215 | "conclusion": "success", 216 | "number": 1, 217 | "started_at": "2020-01-20T09:42:40.000-08:00", 218 | "completed_at": "2020-01-20T09:42:41.000-08:00" 219 | }, 220 | { 221 | "name": "Run actions/checkout@v2", 222 | "status": "completed", 223 | "conclusion": "success", 224 | "number": 2, 225 | "started_at": "2020-01-20T09:42:41.000-08:00", 226 | "completed_at": "2020-01-20T09:42:45.000-08:00" 227 | }, 228 | { 229 | "name": "Set up Ruby", 230 | "status": "completed", 231 | "conclusion": "success", 232 | "number": 3, 233 | "started_at": "2020-01-20T09:42:45.000-08:00", 234 | "completed_at": "2020-01-20T09:42:45.000-08:00" 235 | }, 236 | { 237 | "name": "Run actions/cache@v2", 238 | "status": "completed", 239 | "conclusion": "success", 240 | "number": 4, 241 | "started_at": "2020-01-20T09:42:45.000-08:00", 242 | "completed_at": "2020-01-20T09:42:48.000-08:00" 243 | }, 244 | { 245 | "name": "Install Bundler", 246 | "status": "completed", 247 | "conclusion": "success", 248 | "number": 5, 249 | "started_at": "2020-01-20T09:42:48.000-08:00", 250 | "completed_at": "2020-01-20T09:42:52.000-08:00" 251 | }, 252 | { 253 | "name": "Install Gems", 254 | "status": "completed", 255 | "conclusion": "success", 256 | "number": 6, 257 | "started_at": "2020-01-20T09:42:52.000-08:00", 258 | "completed_at": "2020-01-20T09:42:53.000-08:00" 259 | }, 260 | { 261 | "name": "Run Tests", 262 | "status": "completed", 263 | "conclusion": "success", 264 | "number": 7, 265 | "started_at": "2020-01-20T09:42:53.000-08:00", 266 | "completed_at": "2020-01-20T09:42:59.000-08:00" 267 | }, 268 | { 269 | "name": "Deploy to Heroku", 270 | "status": "completed", 271 | "conclusion": "success", 272 | "number": 8, 273 | "started_at": "2020-01-20T09:42:59.000-08:00", 274 | "completed_at": "2020-01-20T09:44:39.000-08:00" 275 | }, 276 | { 277 | "name": "Post actions/cache@v2", 278 | "status": "completed", 279 | "conclusion": "success", 280 | "number": 16, 281 | "started_at": "2020-01-20T09:44:39.000-08:00", 282 | "completed_at": "2020-01-20T09:44:39.000-08:00" 283 | }, 284 | { 285 | "name": "Complete job", 286 | "status": "completed", 287 | "conclusion": "success", 288 | "number": 17, 289 | "started_at": "2020-01-20T09:44:39.000-08:00", 290 | "completed_at": "2020-01-20T09:44:39.000-08:00" 291 | } 292 | ], 293 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444498" 294 | }, 295 | { 296 | "id": 399444500, 297 | "run_id": 29679449, 298 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 299 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 300 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 301 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444500", 302 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444500", 303 | "status": "completed", 304 | "conclusion": "success", 305 | "started_at": "2020-01-20T17:42:40Z", 306 | "completed_at": "2020-01-20T17:44:39Z", 307 | "name": "test0", 308 | "steps": [ 309 | { 310 | "name": "Set up job", 311 | "status": "completed", 312 | "conclusion": "success", 313 | "number": 1, 314 | "started_at": "2020-01-20T09:42:40.000-08:00", 315 | "completed_at": "2020-01-20T09:42:41.000-08:00" 316 | }, 317 | { 318 | "name": "Run actions/checkout@v2", 319 | "status": "completed", 320 | "conclusion": "success", 321 | "number": 2, 322 | "started_at": "2020-01-20T09:42:41.000-08:00", 323 | "completed_at": "2020-01-20T09:42:45.000-08:00" 324 | }, 325 | { 326 | "name": "Set up Ruby", 327 | "status": "completed", 328 | "conclusion": "success", 329 | "number": 3, 330 | "started_at": "2020-01-20T09:42:45.000-08:00", 331 | "completed_at": "2020-01-20T09:42:45.000-08:00" 332 | }, 333 | { 334 | "name": "Run actions/cache@v2", 335 | "status": "completed", 336 | "conclusion": "success", 337 | "number": 4, 338 | "started_at": "2020-01-20T09:42:45.000-08:00", 339 | "completed_at": "2020-01-20T09:42:48.000-08:00" 340 | }, 341 | { 342 | "name": "Install Bundler", 343 | "status": "completed", 344 | "conclusion": "success", 345 | "number": 5, 346 | "started_at": "2020-01-20T09:42:48.000-08:00", 347 | "completed_at": "2020-01-20T09:42:52.000-08:00" 348 | }, 349 | { 350 | "name": "Install Gems", 351 | "status": "completed", 352 | "conclusion": "success", 353 | "number": 6, 354 | "started_at": "2020-01-20T09:42:52.000-08:00", 355 | "completed_at": "2020-01-20T09:42:53.000-08:00" 356 | }, 357 | { 358 | "name": "Run Tests", 359 | "status": "completed", 360 | "conclusion": "success", 361 | "number": 7, 362 | "started_at": "2020-01-20T09:42:53.000-08:00", 363 | "completed_at": "2020-01-20T09:42:59.000-08:00" 364 | }, 365 | { 366 | "name": "Deploy to Heroku", 367 | "status": "completed", 368 | "conclusion": "success", 369 | "number": 8, 370 | "started_at": "2020-01-20T09:42:59.000-08:00", 371 | "completed_at": "2020-01-20T09:44:39.000-08:00" 372 | }, 373 | { 374 | "name": "Post actions/cache@v2", 375 | "status": "completed", 376 | "conclusion": "success", 377 | "number": 16, 378 | "started_at": "2020-01-20T09:44:39.000-08:00", 379 | "completed_at": "2020-01-20T09:44:39.000-08:00" 380 | }, 381 | { 382 | "name": "Complete job", 383 | "status": "completed", 384 | "conclusion": "success", 385 | "number": 17, 386 | "started_at": "2020-01-20T09:44:39.000-08:00", 387 | "completed_at": "2020-01-20T09:44:39.000-08:00" 388 | } 389 | ], 390 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444500" 391 | }, 392 | { 393 | "id": 399444501, 394 | "run_id": 29679449, 395 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 396 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 397 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 398 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444501", 399 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444501", 400 | "status": "completed", 401 | "conclusion": "success", 402 | "started_at": "2020-01-20T17:42:40Z", 403 | "completed_at": "2020-01-20T17:44:39Z", 404 | "name": "test1", 405 | "steps": [ 406 | { 407 | "name": "Set up job", 408 | "status": "completed", 409 | "conclusion": "success", 410 | "number": 1, 411 | "started_at": "2020-01-20T09:42:40.000-08:00", 412 | "completed_at": "2020-01-20T09:42:41.000-08:00" 413 | }, 414 | { 415 | "name": "Run actions/checkout@v2", 416 | "status": "completed", 417 | "conclusion": "success", 418 | "number": 2, 419 | "started_at": "2020-01-20T09:42:41.000-08:00", 420 | "completed_at": "2020-01-20T09:42:45.000-08:00" 421 | }, 422 | { 423 | "name": "Set up Ruby", 424 | "status": "completed", 425 | "conclusion": "success", 426 | "number": 3, 427 | "started_at": "2020-01-20T09:42:45.000-08:00", 428 | "completed_at": "2020-01-20T09:42:45.000-08:00" 429 | }, 430 | { 431 | "name": "Run actions/cache@v2", 432 | "status": "completed", 433 | "conclusion": "success", 434 | "number": 4, 435 | "started_at": "2020-01-20T09:42:45.000-08:00", 436 | "completed_at": "2020-01-20T09:42:48.000-08:00" 437 | }, 438 | { 439 | "name": "Install Bundler", 440 | "status": "completed", 441 | "conclusion": "success", 442 | "number": 5, 443 | "started_at": "2020-01-20T09:42:48.000-08:00", 444 | "completed_at": "2020-01-20T09:42:52.000-08:00" 445 | }, 446 | { 447 | "name": "Install Gems", 448 | "status": "completed", 449 | "conclusion": "success", 450 | "number": 6, 451 | "started_at": "2020-01-20T09:42:52.000-08:00", 452 | "completed_at": "2020-01-20T09:42:53.000-08:00" 453 | }, 454 | { 455 | "name": "Run Tests", 456 | "status": "completed", 457 | "conclusion": "success", 458 | "number": 7, 459 | "started_at": "2020-01-20T09:42:53.000-08:00", 460 | "completed_at": "2020-01-20T09:42:59.000-08:00" 461 | }, 462 | { 463 | "name": "Deploy to Heroku", 464 | "status": "completed", 465 | "conclusion": "success", 466 | "number": 8, 467 | "started_at": "2020-01-20T09:42:59.000-08:00", 468 | "completed_at": "2020-01-20T09:44:39.000-08:00" 469 | }, 470 | { 471 | "name": "Post actions/cache@v2", 472 | "status": "completed", 473 | "conclusion": "success", 474 | "number": 16, 475 | "started_at": "2020-01-20T09:44:39.000-08:00", 476 | "completed_at": "2020-01-20T09:44:39.000-08:00" 477 | }, 478 | { 479 | "name": "Complete job", 480 | "status": "completed", 481 | "conclusion": "success", 482 | "number": 17, 483 | "started_at": "2020-01-20T09:44:39.000-08:00", 484 | "completed_at": "2020-01-20T09:44:39.000-08:00" 485 | } 486 | ], 487 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444501" 488 | }, 489 | { 490 | "id": 399444502, 491 | "run_id": 29679449, 492 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 493 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 494 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 495 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444502", 496 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444502", 497 | "status": "completed", 498 | "conclusion": "success", 499 | "started_at": "2020-01-20T17:42:40Z", 500 | "completed_at": "2020-01-20T17:44:39Z", 501 | "name": "test2", 502 | "steps": [ 503 | { 504 | "name": "Set up job", 505 | "status": "completed", 506 | "conclusion": "success", 507 | "number": 1, 508 | "started_at": "2020-01-20T09:42:40.000-08:00", 509 | "completed_at": "2020-01-20T09:42:41.000-08:00" 510 | }, 511 | { 512 | "name": "Run actions/checkout@v2", 513 | "status": "completed", 514 | "conclusion": "success", 515 | "number": 2, 516 | "started_at": "2020-01-20T09:42:41.000-08:00", 517 | "completed_at": "2020-01-20T09:42:45.000-08:00" 518 | }, 519 | { 520 | "name": "Set up Ruby", 521 | "status": "completed", 522 | "conclusion": "success", 523 | "number": 3, 524 | "started_at": "2020-01-20T09:42:45.000-08:00", 525 | "completed_at": "2020-01-20T09:42:45.000-08:00" 526 | }, 527 | { 528 | "name": "Run actions/cache@v2", 529 | "status": "completed", 530 | "conclusion": "success", 531 | "number": 4, 532 | "started_at": "2020-01-20T09:42:45.000-08:00", 533 | "completed_at": "2020-01-20T09:42:48.000-08:00" 534 | }, 535 | { 536 | "name": "Install Bundler", 537 | "status": "completed", 538 | "conclusion": "success", 539 | "number": 5, 540 | "started_at": "2020-01-20T09:42:48.000-08:00", 541 | "completed_at": "2020-01-20T09:42:52.000-08:00" 542 | }, 543 | { 544 | "name": "Install Gems", 545 | "status": "completed", 546 | "conclusion": "success", 547 | "number": 6, 548 | "started_at": "2020-01-20T09:42:52.000-08:00", 549 | "completed_at": "2020-01-20T09:42:53.000-08:00" 550 | }, 551 | { 552 | "name": "Run Tests", 553 | "status": "completed", 554 | "conclusion": "success", 555 | "number": 7, 556 | "started_at": "2020-01-20T09:42:53.000-08:00", 557 | "completed_at": "2020-01-20T09:42:59.000-08:00" 558 | }, 559 | { 560 | "name": "Deploy to Heroku", 561 | "status": "completed", 562 | "conclusion": "success", 563 | "number": 8, 564 | "started_at": "2020-01-20T09:42:59.000-08:00", 565 | "completed_at": "2020-01-20T09:44:39.000-08:00" 566 | }, 567 | { 568 | "name": "Post actions/cache@v2", 569 | "status": "completed", 570 | "conclusion": "success", 571 | "number": 16, 572 | "started_at": "2020-01-20T09:44:39.000-08:00", 573 | "completed_at": "2020-01-20T09:44:39.000-08:00" 574 | }, 575 | { 576 | "name": "Complete job", 577 | "status": "completed", 578 | "conclusion": "success", 579 | "number": 17, 580 | "started_at": "2020-01-20T09:44:39.000-08:00", 581 | "completed_at": "2020-01-20T09:44:39.000-08:00" 582 | } 583 | ], 584 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444502" 585 | }, 586 | { 587 | "id": 399444503, 588 | "run_id": 29679449, 589 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 590 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 591 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 592 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444503", 593 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444503", 594 | "status": "completed", 595 | "conclusion": "success", 596 | "started_at": "2020-01-20T17:42:40Z", 597 | "completed_at": "2020-01-20T17:44:39Z", 598 | "name": "test3", 599 | "steps": [ 600 | { 601 | "name": "Set up job", 602 | "status": "completed", 603 | "conclusion": "success", 604 | "number": 1, 605 | "started_at": "2020-01-20T09:42:40.000-08:00", 606 | "completed_at": "2020-01-20T09:42:41.000-08:00" 607 | }, 608 | { 609 | "name": "Run actions/checkout@v2", 610 | "status": "completed", 611 | "conclusion": "success", 612 | "number": 2, 613 | "started_at": "2020-01-20T09:42:41.000-08:00", 614 | "completed_at": "2020-01-20T09:42:45.000-08:00" 615 | }, 616 | { 617 | "name": "Set up Ruby", 618 | "status": "completed", 619 | "conclusion": "success", 620 | "number": 3, 621 | "started_at": "2020-01-20T09:42:45.000-08:00", 622 | "completed_at": "2020-01-20T09:42:45.000-08:00" 623 | }, 624 | { 625 | "name": "Run actions/cache@v2", 626 | "status": "completed", 627 | "conclusion": "success", 628 | "number": 4, 629 | "started_at": "2020-01-20T09:42:45.000-08:00", 630 | "completed_at": "2020-01-20T09:42:48.000-08:00" 631 | }, 632 | { 633 | "name": "Install Bundler", 634 | "status": "completed", 635 | "conclusion": "success", 636 | "number": 5, 637 | "started_at": "2020-01-20T09:42:48.000-08:00", 638 | "completed_at": "2020-01-20T09:42:52.000-08:00" 639 | }, 640 | { 641 | "name": "Install Gems", 642 | "status": "completed", 643 | "conclusion": "success", 644 | "number": 6, 645 | "started_at": "2020-01-20T09:42:52.000-08:00", 646 | "completed_at": "2020-01-20T09:42:53.000-08:00" 647 | }, 648 | { 649 | "name": "Run Tests", 650 | "status": "completed", 651 | "conclusion": "success", 652 | "number": 7, 653 | "started_at": "2020-01-20T09:42:53.000-08:00", 654 | "completed_at": "2020-01-20T09:42:59.000-08:00" 655 | }, 656 | { 657 | "name": "Deploy to Heroku", 658 | "status": "completed", 659 | "conclusion": "success", 660 | "number": 8, 661 | "started_at": "2020-01-20T09:42:59.000-08:00", 662 | "completed_at": "2020-01-20T09:44:39.000-08:00" 663 | }, 664 | { 665 | "name": "Post actions/cache@v2", 666 | "status": "completed", 667 | "conclusion": "success", 668 | "number": 16, 669 | "started_at": "2020-01-20T09:44:39.000-08:00", 670 | "completed_at": "2020-01-20T09:44:39.000-08:00" 671 | }, 672 | { 673 | "name": "Complete job", 674 | "status": "completed", 675 | "conclusion": "success", 676 | "number": 17, 677 | "started_at": "2020-01-20T09:44:39.000-08:00", 678 | "completed_at": "2020-01-20T09:44:39.000-08:00" 679 | } 680 | ], 681 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444503" 682 | }, 683 | { 684 | "id": 399444504, 685 | "run_id": 29679449, 686 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 687 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 688 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 689 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444504", 690 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444504", 691 | "status": "completed", 692 | "conclusion": "success", 693 | "started_at": "2020-01-20T17:42:40Z", 694 | "completed_at": "2020-01-20T17:44:39Z", 695 | "name": "test4", 696 | "steps": [ 697 | { 698 | "name": "Set up job", 699 | "status": "completed", 700 | "conclusion": "success", 701 | "number": 1, 702 | "started_at": "2020-01-20T09:42:40.000-08:00", 703 | "completed_at": "2020-01-20T09:42:41.000-08:00" 704 | }, 705 | { 706 | "name": "Run actions/checkout@v2", 707 | "status": "completed", 708 | "conclusion": "success", 709 | "number": 2, 710 | "started_at": "2020-01-20T09:42:41.000-08:00", 711 | "completed_at": "2020-01-20T09:42:45.000-08:00" 712 | }, 713 | { 714 | "name": "Set up Ruby", 715 | "status": "completed", 716 | "conclusion": "success", 717 | "number": 3, 718 | "started_at": "2020-01-20T09:42:45.000-08:00", 719 | "completed_at": "2020-01-20T09:42:45.000-08:00" 720 | }, 721 | { 722 | "name": "Run actions/cache@v2", 723 | "status": "completed", 724 | "conclusion": "success", 725 | "number": 4, 726 | "started_at": "2020-01-20T09:42:45.000-08:00", 727 | "completed_at": "2020-01-20T09:42:48.000-08:00" 728 | }, 729 | { 730 | "name": "Install Bundler", 731 | "status": "completed", 732 | "conclusion": "success", 733 | "number": 5, 734 | "started_at": "2020-01-20T09:42:48.000-08:00", 735 | "completed_at": "2020-01-20T09:42:52.000-08:00" 736 | }, 737 | { 738 | "name": "Install Gems", 739 | "status": "completed", 740 | "conclusion": "success", 741 | "number": 6, 742 | "started_at": "2020-01-20T09:42:52.000-08:00", 743 | "completed_at": "2020-01-20T09:42:53.000-08:00" 744 | }, 745 | { 746 | "name": "Run Tests", 747 | "status": "completed", 748 | "conclusion": "success", 749 | "number": 7, 750 | "started_at": "2020-01-20T09:42:53.000-08:00", 751 | "completed_at": "2020-01-20T09:42:59.000-08:00" 752 | }, 753 | { 754 | "name": "Deploy to Heroku", 755 | "status": "completed", 756 | "conclusion": "success", 757 | "number": 8, 758 | "started_at": "2020-01-20T09:42:59.000-08:00", 759 | "completed_at": "2020-01-20T09:44:39.000-08:00" 760 | }, 761 | { 762 | "name": "Post actions/cache@v2", 763 | "status": "completed", 764 | "conclusion": "success", 765 | "number": 16, 766 | "started_at": "2020-01-20T09:44:39.000-08:00", 767 | "completed_at": "2020-01-20T09:44:39.000-08:00" 768 | }, 769 | { 770 | "name": "Complete job", 771 | "status": "completed", 772 | "conclusion": "success", 773 | "number": 17, 774 | "started_at": "2020-01-20T09:44:39.000-08:00", 775 | "completed_at": "2020-01-20T09:44:39.000-08:00" 776 | } 777 | ], 778 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444504" 779 | }, 780 | { 781 | "id": 399444505, 782 | "run_id": 29679449, 783 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 784 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 785 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 786 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444505", 787 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444505", 788 | "status": "completed", 789 | "conclusion": "success", 790 | "started_at": "2020-01-20T17:42:40Z", 791 | "completed_at": "2020-01-20T17:44:39Z", 792 | "name": "test5", 793 | "steps": [ 794 | { 795 | "name": "Set up job", 796 | "status": "completed", 797 | "conclusion": "success", 798 | "number": 1, 799 | "started_at": "2020-01-20T09:42:40.000-08:00", 800 | "completed_at": "2020-01-20T09:42:41.000-08:00" 801 | }, 802 | { 803 | "name": "Run actions/checkout@v2", 804 | "status": "completed", 805 | "conclusion": "success", 806 | "number": 2, 807 | "started_at": "2020-01-20T09:42:41.000-08:00", 808 | "completed_at": "2020-01-20T09:42:45.000-08:00" 809 | }, 810 | { 811 | "name": "Set up Ruby", 812 | "status": "completed", 813 | "conclusion": "success", 814 | "number": 3, 815 | "started_at": "2020-01-20T09:42:45.000-08:00", 816 | "completed_at": "2020-01-20T09:42:45.000-08:00" 817 | }, 818 | { 819 | "name": "Run actions/cache@v2", 820 | "status": "completed", 821 | "conclusion": "success", 822 | "number": 4, 823 | "started_at": "2020-01-20T09:42:45.000-08:00", 824 | "completed_at": "2020-01-20T09:42:48.000-08:00" 825 | }, 826 | { 827 | "name": "Install Bundler", 828 | "status": "completed", 829 | "conclusion": "success", 830 | "number": 5, 831 | "started_at": "2020-01-20T09:42:48.000-08:00", 832 | "completed_at": "2020-01-20T09:42:52.000-08:00" 833 | }, 834 | { 835 | "name": "Install Gems", 836 | "status": "completed", 837 | "conclusion": "success", 838 | "number": 6, 839 | "started_at": "2020-01-20T09:42:52.000-08:00", 840 | "completed_at": "2020-01-20T09:42:53.000-08:00" 841 | }, 842 | { 843 | "name": "Run Tests", 844 | "status": "completed", 845 | "conclusion": "success", 846 | "number": 7, 847 | "started_at": "2020-01-20T09:42:53.000-08:00", 848 | "completed_at": "2020-01-20T09:42:59.000-08:00" 849 | }, 850 | { 851 | "name": "Deploy to Heroku", 852 | "status": "completed", 853 | "conclusion": "success", 854 | "number": 8, 855 | "started_at": "2020-01-20T09:42:59.000-08:00", 856 | "completed_at": "2020-01-20T09:44:39.000-08:00" 857 | }, 858 | { 859 | "name": "Post actions/cache@v2", 860 | "status": "completed", 861 | "conclusion": "success", 862 | "number": 16, 863 | "started_at": "2020-01-20T09:44:39.000-08:00", 864 | "completed_at": "2020-01-20T09:44:39.000-08:00" 865 | }, 866 | { 867 | "name": "Complete job", 868 | "status": "completed", 869 | "conclusion": "success", 870 | "number": 17, 871 | "started_at": "2020-01-20T09:44:39.000-08:00", 872 | "completed_at": "2020-01-20T09:44:39.000-08:00" 873 | } 874 | ], 875 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444505" 876 | }, 877 | { 878 | "id": 399444506, 879 | "run_id": 29679449, 880 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 881 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 882 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 883 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444506", 884 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444506", 885 | "status": "completed", 886 | "conclusion": "success", 887 | "started_at": "2020-01-20T17:42:40Z", 888 | "completed_at": "2020-01-20T17:44:39Z", 889 | "name": "test6", 890 | "steps": [ 891 | { 892 | "name": "Set up job", 893 | "status": "completed", 894 | "conclusion": "success", 895 | "number": 1, 896 | "started_at": "2020-01-20T09:42:40.000-08:00", 897 | "completed_at": "2020-01-20T09:42:41.000-08:00" 898 | }, 899 | { 900 | "name": "Run actions/checkout@v2", 901 | "status": "completed", 902 | "conclusion": "success", 903 | "number": 2, 904 | "started_at": "2020-01-20T09:42:41.000-08:00", 905 | "completed_at": "2020-01-20T09:42:45.000-08:00" 906 | }, 907 | { 908 | "name": "Set up Ruby", 909 | "status": "completed", 910 | "conclusion": "success", 911 | "number": 3, 912 | "started_at": "2020-01-20T09:42:45.000-08:00", 913 | "completed_at": "2020-01-20T09:42:45.000-08:00" 914 | }, 915 | { 916 | "name": "Run actions/cache@v2", 917 | "status": "completed", 918 | "conclusion": "success", 919 | "number": 4, 920 | "started_at": "2020-01-20T09:42:45.000-08:00", 921 | "completed_at": "2020-01-20T09:42:48.000-08:00" 922 | }, 923 | { 924 | "name": "Install Bundler", 925 | "status": "completed", 926 | "conclusion": "success", 927 | "number": 5, 928 | "started_at": "2020-01-20T09:42:48.000-08:00", 929 | "completed_at": "2020-01-20T09:42:52.000-08:00" 930 | }, 931 | { 932 | "name": "Install Gems", 933 | "status": "completed", 934 | "conclusion": "success", 935 | "number": 6, 936 | "started_at": "2020-01-20T09:42:52.000-08:00", 937 | "completed_at": "2020-01-20T09:42:53.000-08:00" 938 | }, 939 | { 940 | "name": "Run Tests", 941 | "status": "completed", 942 | "conclusion": "success", 943 | "number": 7, 944 | "started_at": "2020-01-20T09:42:53.000-08:00", 945 | "completed_at": "2020-01-20T09:42:59.000-08:00" 946 | }, 947 | { 948 | "name": "Deploy to Heroku", 949 | "status": "completed", 950 | "conclusion": "success", 951 | "number": 8, 952 | "started_at": "2020-01-20T09:42:59.000-08:00", 953 | "completed_at": "2020-01-20T09:44:39.000-08:00" 954 | }, 955 | { 956 | "name": "Post actions/cache@v2", 957 | "status": "completed", 958 | "conclusion": "success", 959 | "number": 16, 960 | "started_at": "2020-01-20T09:44:39.000-08:00", 961 | "completed_at": "2020-01-20T09:44:39.000-08:00" 962 | }, 963 | { 964 | "name": "Complete job", 965 | "status": "completed", 966 | "conclusion": "success", 967 | "number": 17, 968 | "started_at": "2020-01-20T09:44:39.000-08:00", 969 | "completed_at": "2020-01-20T09:44:39.000-08:00" 970 | } 971 | ], 972 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444506" 973 | }, 974 | { 975 | "id": 399444507, 976 | "run_id": 29679449, 977 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 978 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 979 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 980 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444507", 981 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444507", 982 | "status": "completed", 983 | "conclusion": "success", 984 | "started_at": "2020-01-20T17:42:40Z", 985 | "completed_at": "2020-01-20T17:44:39Z", 986 | "name": "test7", 987 | "steps": [ 988 | { 989 | "name": "Set up job", 990 | "status": "completed", 991 | "conclusion": "success", 992 | "number": 1, 993 | "started_at": "2020-01-20T09:42:40.000-08:00", 994 | "completed_at": "2020-01-20T09:42:41.000-08:00" 995 | }, 996 | { 997 | "name": "Run actions/checkout@v2", 998 | "status": "completed", 999 | "conclusion": "success", 1000 | "number": 2, 1001 | "started_at": "2020-01-20T09:42:41.000-08:00", 1002 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1003 | }, 1004 | { 1005 | "name": "Set up Ruby", 1006 | "status": "completed", 1007 | "conclusion": "success", 1008 | "number": 3, 1009 | "started_at": "2020-01-20T09:42:45.000-08:00", 1010 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1011 | }, 1012 | { 1013 | "name": "Run actions/cache@v2", 1014 | "status": "completed", 1015 | "conclusion": "success", 1016 | "number": 4, 1017 | "started_at": "2020-01-20T09:42:45.000-08:00", 1018 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1019 | }, 1020 | { 1021 | "name": "Install Bundler", 1022 | "status": "completed", 1023 | "conclusion": "success", 1024 | "number": 5, 1025 | "started_at": "2020-01-20T09:42:48.000-08:00", 1026 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1027 | }, 1028 | { 1029 | "name": "Install Gems", 1030 | "status": "completed", 1031 | "conclusion": "success", 1032 | "number": 6, 1033 | "started_at": "2020-01-20T09:42:52.000-08:00", 1034 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1035 | }, 1036 | { 1037 | "name": "Run Tests", 1038 | "status": "completed", 1039 | "conclusion": "success", 1040 | "number": 7, 1041 | "started_at": "2020-01-20T09:42:53.000-08:00", 1042 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1043 | }, 1044 | { 1045 | "name": "Deploy to Heroku", 1046 | "status": "completed", 1047 | "conclusion": "success", 1048 | "number": 8, 1049 | "started_at": "2020-01-20T09:42:59.000-08:00", 1050 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1051 | }, 1052 | { 1053 | "name": "Post actions/cache@v2", 1054 | "status": "completed", 1055 | "conclusion": "success", 1056 | "number": 16, 1057 | "started_at": "2020-01-20T09:44:39.000-08:00", 1058 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1059 | }, 1060 | { 1061 | "name": "Complete job", 1062 | "status": "completed", 1063 | "conclusion": "success", 1064 | "number": 17, 1065 | "started_at": "2020-01-20T09:44:39.000-08:00", 1066 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1067 | } 1068 | ], 1069 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444507" 1070 | }, 1071 | { 1072 | "id": 399444508, 1073 | "run_id": 29679449, 1074 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1075 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1076 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1077 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444508", 1078 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444508", 1079 | "status": "completed", 1080 | "conclusion": "success", 1081 | "started_at": "2020-01-20T17:42:40Z", 1082 | "completed_at": "2020-01-20T17:44:39Z", 1083 | "name": "test8", 1084 | "steps": [ 1085 | { 1086 | "name": "Set up job", 1087 | "status": "completed", 1088 | "conclusion": "success", 1089 | "number": 1, 1090 | "started_at": "2020-01-20T09:42:40.000-08:00", 1091 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1092 | }, 1093 | { 1094 | "name": "Run actions/checkout@v2", 1095 | "status": "completed", 1096 | "conclusion": "success", 1097 | "number": 2, 1098 | "started_at": "2020-01-20T09:42:41.000-08:00", 1099 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1100 | }, 1101 | { 1102 | "name": "Set up Ruby", 1103 | "status": "completed", 1104 | "conclusion": "success", 1105 | "number": 3, 1106 | "started_at": "2020-01-20T09:42:45.000-08:00", 1107 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1108 | }, 1109 | { 1110 | "name": "Run actions/cache@v2", 1111 | "status": "completed", 1112 | "conclusion": "success", 1113 | "number": 4, 1114 | "started_at": "2020-01-20T09:42:45.000-08:00", 1115 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1116 | }, 1117 | { 1118 | "name": "Install Bundler", 1119 | "status": "completed", 1120 | "conclusion": "success", 1121 | "number": 5, 1122 | "started_at": "2020-01-20T09:42:48.000-08:00", 1123 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1124 | }, 1125 | { 1126 | "name": "Install Gems", 1127 | "status": "completed", 1128 | "conclusion": "success", 1129 | "number": 6, 1130 | "started_at": "2020-01-20T09:42:52.000-08:00", 1131 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1132 | }, 1133 | { 1134 | "name": "Run Tests", 1135 | "status": "completed", 1136 | "conclusion": "success", 1137 | "number": 7, 1138 | "started_at": "2020-01-20T09:42:53.000-08:00", 1139 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1140 | }, 1141 | { 1142 | "name": "Deploy to Heroku", 1143 | "status": "completed", 1144 | "conclusion": "success", 1145 | "number": 8, 1146 | "started_at": "2020-01-20T09:42:59.000-08:00", 1147 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1148 | }, 1149 | { 1150 | "name": "Post actions/cache@v2", 1151 | "status": "completed", 1152 | "conclusion": "success", 1153 | "number": 16, 1154 | "started_at": "2020-01-20T09:44:39.000-08:00", 1155 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1156 | }, 1157 | { 1158 | "name": "Complete job", 1159 | "status": "completed", 1160 | "conclusion": "success", 1161 | "number": 17, 1162 | "started_at": "2020-01-20T09:44:39.000-08:00", 1163 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1164 | } 1165 | ], 1166 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444508" 1167 | }, 1168 | { 1169 | "id": 399444509, 1170 | "run_id": 29679449, 1171 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1172 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1173 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1174 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444509", 1175 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444509", 1176 | "status": "completed", 1177 | "conclusion": "success", 1178 | "started_at": "2020-01-20T17:42:40Z", 1179 | "completed_at": "2020-01-20T17:44:39Z", 1180 | "name": "test9", 1181 | "steps": [ 1182 | { 1183 | "name": "Set up job", 1184 | "status": "completed", 1185 | "conclusion": "success", 1186 | "number": 1, 1187 | "started_at": "2020-01-20T09:42:40.000-08:00", 1188 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1189 | }, 1190 | { 1191 | "name": "Run actions/checkout@v2", 1192 | "status": "completed", 1193 | "conclusion": "success", 1194 | "number": 2, 1195 | "started_at": "2020-01-20T09:42:41.000-08:00", 1196 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1197 | }, 1198 | { 1199 | "name": "Set up Ruby", 1200 | "status": "completed", 1201 | "conclusion": "success", 1202 | "number": 3, 1203 | "started_at": "2020-01-20T09:42:45.000-08:00", 1204 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1205 | }, 1206 | { 1207 | "name": "Run actions/cache@v2", 1208 | "status": "completed", 1209 | "conclusion": "success", 1210 | "number": 4, 1211 | "started_at": "2020-01-20T09:42:45.000-08:00", 1212 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1213 | }, 1214 | { 1215 | "name": "Install Bundler", 1216 | "status": "completed", 1217 | "conclusion": "success", 1218 | "number": 5, 1219 | "started_at": "2020-01-20T09:42:48.000-08:00", 1220 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1221 | }, 1222 | { 1223 | "name": "Install Gems", 1224 | "status": "completed", 1225 | "conclusion": "success", 1226 | "number": 6, 1227 | "started_at": "2020-01-20T09:42:52.000-08:00", 1228 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1229 | }, 1230 | { 1231 | "name": "Run Tests", 1232 | "status": "completed", 1233 | "conclusion": "success", 1234 | "number": 7, 1235 | "started_at": "2020-01-20T09:42:53.000-08:00", 1236 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1237 | }, 1238 | { 1239 | "name": "Deploy to Heroku", 1240 | "status": "completed", 1241 | "conclusion": "success", 1242 | "number": 8, 1243 | "started_at": "2020-01-20T09:42:59.000-08:00", 1244 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1245 | }, 1246 | { 1247 | "name": "Post actions/cache@v2", 1248 | "status": "completed", 1249 | "conclusion": "success", 1250 | "number": 16, 1251 | "started_at": "2020-01-20T09:44:39.000-08:00", 1252 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1253 | }, 1254 | { 1255 | "name": "Complete job", 1256 | "status": "completed", 1257 | "conclusion": "success", 1258 | "number": 17, 1259 | "started_at": "2020-01-20T09:44:39.000-08:00", 1260 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1261 | } 1262 | ], 1263 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444509" 1264 | }, 1265 | { 1266 | "id": 399444510, 1267 | "run_id": 29679449, 1268 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1269 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1270 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1271 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444510", 1272 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444510", 1273 | "status": "completed", 1274 | "conclusion": "success", 1275 | "started_at": "2020-01-20T17:42:40Z", 1276 | "completed_at": "2020-01-20T17:44:39Z", 1277 | "name": "test10", 1278 | "steps": [ 1279 | { 1280 | "name": "Set up job", 1281 | "status": "completed", 1282 | "conclusion": "success", 1283 | "number": 1, 1284 | "started_at": "2020-01-20T09:42:40.000-08:00", 1285 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1286 | }, 1287 | { 1288 | "name": "Run actions/checkout@v2", 1289 | "status": "completed", 1290 | "conclusion": "success", 1291 | "number": 2, 1292 | "started_at": "2020-01-20T09:42:41.000-08:00", 1293 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1294 | }, 1295 | { 1296 | "name": "Set up Ruby", 1297 | "status": "completed", 1298 | "conclusion": "success", 1299 | "number": 3, 1300 | "started_at": "2020-01-20T09:42:45.000-08:00", 1301 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1302 | }, 1303 | { 1304 | "name": "Run actions/cache@v2", 1305 | "status": "completed", 1306 | "conclusion": "success", 1307 | "number": 4, 1308 | "started_at": "2020-01-20T09:42:45.000-08:00", 1309 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1310 | }, 1311 | { 1312 | "name": "Install Bundler", 1313 | "status": "completed", 1314 | "conclusion": "success", 1315 | "number": 5, 1316 | "started_at": "2020-01-20T09:42:48.000-08:00", 1317 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1318 | }, 1319 | { 1320 | "name": "Install Gems", 1321 | "status": "completed", 1322 | "conclusion": "success", 1323 | "number": 6, 1324 | "started_at": "2020-01-20T09:42:52.000-08:00", 1325 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1326 | }, 1327 | { 1328 | "name": "Run Tests", 1329 | "status": "completed", 1330 | "conclusion": "success", 1331 | "number": 7, 1332 | "started_at": "2020-01-20T09:42:53.000-08:00", 1333 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1334 | }, 1335 | { 1336 | "name": "Deploy to Heroku", 1337 | "status": "completed", 1338 | "conclusion": "success", 1339 | "number": 8, 1340 | "started_at": "2020-01-20T09:42:59.000-08:00", 1341 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1342 | }, 1343 | { 1344 | "name": "Post actions/cache@v2", 1345 | "status": "completed", 1346 | "conclusion": "success", 1347 | "number": 16, 1348 | "started_at": "2020-01-20T09:44:39.000-08:00", 1349 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1350 | }, 1351 | { 1352 | "name": "Complete job", 1353 | "status": "completed", 1354 | "conclusion": "success", 1355 | "number": 17, 1356 | "started_at": "2020-01-20T09:44:39.000-08:00", 1357 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1358 | } 1359 | ], 1360 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444510" 1361 | }, 1362 | { 1363 | "id": 399444511, 1364 | "run_id": 29679449, 1365 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1366 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1367 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1368 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444511", 1369 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444511", 1370 | "status": "completed", 1371 | "conclusion": "success", 1372 | "started_at": "2020-01-20T17:42:40Z", 1373 | "completed_at": "2020-01-20T17:44:39Z", 1374 | "name": "test11", 1375 | "steps": [ 1376 | { 1377 | "name": "Set up job", 1378 | "status": "completed", 1379 | "conclusion": "success", 1380 | "number": 1, 1381 | "started_at": "2020-01-20T09:42:40.000-08:00", 1382 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1383 | }, 1384 | { 1385 | "name": "Run actions/checkout@v2", 1386 | "status": "completed", 1387 | "conclusion": "success", 1388 | "number": 2, 1389 | "started_at": "2020-01-20T09:42:41.000-08:00", 1390 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1391 | }, 1392 | { 1393 | "name": "Set up Ruby", 1394 | "status": "completed", 1395 | "conclusion": "success", 1396 | "number": 3, 1397 | "started_at": "2020-01-20T09:42:45.000-08:00", 1398 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1399 | }, 1400 | { 1401 | "name": "Run actions/cache@v2", 1402 | "status": "completed", 1403 | "conclusion": "success", 1404 | "number": 4, 1405 | "started_at": "2020-01-20T09:42:45.000-08:00", 1406 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1407 | }, 1408 | { 1409 | "name": "Install Bundler", 1410 | "status": "completed", 1411 | "conclusion": "success", 1412 | "number": 5, 1413 | "started_at": "2020-01-20T09:42:48.000-08:00", 1414 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1415 | }, 1416 | { 1417 | "name": "Install Gems", 1418 | "status": "completed", 1419 | "conclusion": "success", 1420 | "number": 6, 1421 | "started_at": "2020-01-20T09:42:52.000-08:00", 1422 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1423 | }, 1424 | { 1425 | "name": "Run Tests", 1426 | "status": "completed", 1427 | "conclusion": "success", 1428 | "number": 7, 1429 | "started_at": "2020-01-20T09:42:53.000-08:00", 1430 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1431 | }, 1432 | { 1433 | "name": "Deploy to Heroku", 1434 | "status": "completed", 1435 | "conclusion": "success", 1436 | "number": 8, 1437 | "started_at": "2020-01-20T09:42:59.000-08:00", 1438 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1439 | }, 1440 | { 1441 | "name": "Post actions/cache@v2", 1442 | "status": "completed", 1443 | "conclusion": "success", 1444 | "number": 16, 1445 | "started_at": "2020-01-20T09:44:39.000-08:00", 1446 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1447 | }, 1448 | { 1449 | "name": "Complete job", 1450 | "status": "completed", 1451 | "conclusion": "success", 1452 | "number": 17, 1453 | "started_at": "2020-01-20T09:44:39.000-08:00", 1454 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1455 | } 1456 | ], 1457 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444511" 1458 | }, 1459 | { 1460 | "id": 399444512, 1461 | "run_id": 29679449, 1462 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1463 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1464 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1465 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444512", 1466 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444512", 1467 | "status": "completed", 1468 | "conclusion": "success", 1469 | "started_at": "2020-01-20T17:42:40Z", 1470 | "completed_at": "2020-01-20T17:44:39Z", 1471 | "name": "test12", 1472 | "steps": [ 1473 | { 1474 | "name": "Set up job", 1475 | "status": "completed", 1476 | "conclusion": "success", 1477 | "number": 1, 1478 | "started_at": "2020-01-20T09:42:40.000-08:00", 1479 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1480 | }, 1481 | { 1482 | "name": "Run actions/checkout@v2", 1483 | "status": "completed", 1484 | "conclusion": "success", 1485 | "number": 2, 1486 | "started_at": "2020-01-20T09:42:41.000-08:00", 1487 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1488 | }, 1489 | { 1490 | "name": "Set up Ruby", 1491 | "status": "completed", 1492 | "conclusion": "success", 1493 | "number": 3, 1494 | "started_at": "2020-01-20T09:42:45.000-08:00", 1495 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1496 | }, 1497 | { 1498 | "name": "Run actions/cache@v2", 1499 | "status": "completed", 1500 | "conclusion": "success", 1501 | "number": 4, 1502 | "started_at": "2020-01-20T09:42:45.000-08:00", 1503 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1504 | }, 1505 | { 1506 | "name": "Install Bundler", 1507 | "status": "completed", 1508 | "conclusion": "success", 1509 | "number": 5, 1510 | "started_at": "2020-01-20T09:42:48.000-08:00", 1511 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1512 | }, 1513 | { 1514 | "name": "Install Gems", 1515 | "status": "completed", 1516 | "conclusion": "success", 1517 | "number": 6, 1518 | "started_at": "2020-01-20T09:42:52.000-08:00", 1519 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1520 | }, 1521 | { 1522 | "name": "Run Tests", 1523 | "status": "completed", 1524 | "conclusion": "success", 1525 | "number": 7, 1526 | "started_at": "2020-01-20T09:42:53.000-08:00", 1527 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1528 | }, 1529 | { 1530 | "name": "Deploy to Heroku", 1531 | "status": "completed", 1532 | "conclusion": "success", 1533 | "number": 8, 1534 | "started_at": "2020-01-20T09:42:59.000-08:00", 1535 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1536 | }, 1537 | { 1538 | "name": "Post actions/cache@v2", 1539 | "status": "completed", 1540 | "conclusion": "success", 1541 | "number": 16, 1542 | "started_at": "2020-01-20T09:44:39.000-08:00", 1543 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1544 | }, 1545 | { 1546 | "name": "Complete job", 1547 | "status": "completed", 1548 | "conclusion": "success", 1549 | "number": 17, 1550 | "started_at": "2020-01-20T09:44:39.000-08:00", 1551 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1552 | } 1553 | ], 1554 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444512" 1555 | }, 1556 | { 1557 | "id": 399444513, 1558 | "run_id": 29679449, 1559 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1560 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1561 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1562 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444513", 1563 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444513", 1564 | "status": "completed", 1565 | "conclusion": "success", 1566 | "started_at": "2020-01-20T17:42:40Z", 1567 | "completed_at": "2020-01-20T17:44:39Z", 1568 | "name": "test13", 1569 | "steps": [ 1570 | { 1571 | "name": "Set up job", 1572 | "status": "completed", 1573 | "conclusion": "success", 1574 | "number": 1, 1575 | "started_at": "2020-01-20T09:42:40.000-08:00", 1576 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1577 | }, 1578 | { 1579 | "name": "Run actions/checkout@v2", 1580 | "status": "completed", 1581 | "conclusion": "success", 1582 | "number": 2, 1583 | "started_at": "2020-01-20T09:42:41.000-08:00", 1584 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1585 | }, 1586 | { 1587 | "name": "Set up Ruby", 1588 | "status": "completed", 1589 | "conclusion": "success", 1590 | "number": 3, 1591 | "started_at": "2020-01-20T09:42:45.000-08:00", 1592 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1593 | }, 1594 | { 1595 | "name": "Run actions/cache@v2", 1596 | "status": "completed", 1597 | "conclusion": "success", 1598 | "number": 4, 1599 | "started_at": "2020-01-20T09:42:45.000-08:00", 1600 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1601 | }, 1602 | { 1603 | "name": "Install Bundler", 1604 | "status": "completed", 1605 | "conclusion": "success", 1606 | "number": 5, 1607 | "started_at": "2020-01-20T09:42:48.000-08:00", 1608 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1609 | }, 1610 | { 1611 | "name": "Install Gems", 1612 | "status": "completed", 1613 | "conclusion": "success", 1614 | "number": 6, 1615 | "started_at": "2020-01-20T09:42:52.000-08:00", 1616 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1617 | }, 1618 | { 1619 | "name": "Run Tests", 1620 | "status": "completed", 1621 | "conclusion": "success", 1622 | "number": 7, 1623 | "started_at": "2020-01-20T09:42:53.000-08:00", 1624 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1625 | }, 1626 | { 1627 | "name": "Deploy to Heroku", 1628 | "status": "completed", 1629 | "conclusion": "success", 1630 | "number": 8, 1631 | "started_at": "2020-01-20T09:42:59.000-08:00", 1632 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1633 | }, 1634 | { 1635 | "name": "Post actions/cache@v2", 1636 | "status": "completed", 1637 | "conclusion": "success", 1638 | "number": 16, 1639 | "started_at": "2020-01-20T09:44:39.000-08:00", 1640 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1641 | }, 1642 | { 1643 | "name": "Complete job", 1644 | "status": "completed", 1645 | "conclusion": "success", 1646 | "number": 17, 1647 | "started_at": "2020-01-20T09:44:39.000-08:00", 1648 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1649 | } 1650 | ], 1651 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444513" 1652 | }, 1653 | { 1654 | "id": 399444514, 1655 | "run_id": 29679449, 1656 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1657 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1658 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1659 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444514", 1660 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444514", 1661 | "status": "completed", 1662 | "conclusion": "success", 1663 | "started_at": "2020-01-20T17:42:40Z", 1664 | "completed_at": "2020-01-20T17:44:39Z", 1665 | "name": "test14", 1666 | "steps": [ 1667 | { 1668 | "name": "Set up job", 1669 | "status": "completed", 1670 | "conclusion": "success", 1671 | "number": 1, 1672 | "started_at": "2020-01-20T09:42:40.000-08:00", 1673 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1674 | }, 1675 | { 1676 | "name": "Run actions/checkout@v2", 1677 | "status": "completed", 1678 | "conclusion": "success", 1679 | "number": 2, 1680 | "started_at": "2020-01-20T09:42:41.000-08:00", 1681 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1682 | }, 1683 | { 1684 | "name": "Set up Ruby", 1685 | "status": "completed", 1686 | "conclusion": "success", 1687 | "number": 3, 1688 | "started_at": "2020-01-20T09:42:45.000-08:00", 1689 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1690 | }, 1691 | { 1692 | "name": "Run actions/cache@v2", 1693 | "status": "completed", 1694 | "conclusion": "success", 1695 | "number": 4, 1696 | "started_at": "2020-01-20T09:42:45.000-08:00", 1697 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1698 | }, 1699 | { 1700 | "name": "Install Bundler", 1701 | "status": "completed", 1702 | "conclusion": "success", 1703 | "number": 5, 1704 | "started_at": "2020-01-20T09:42:48.000-08:00", 1705 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1706 | }, 1707 | { 1708 | "name": "Install Gems", 1709 | "status": "completed", 1710 | "conclusion": "success", 1711 | "number": 6, 1712 | "started_at": "2020-01-20T09:42:52.000-08:00", 1713 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1714 | }, 1715 | { 1716 | "name": "Run Tests", 1717 | "status": "completed", 1718 | "conclusion": "success", 1719 | "number": 7, 1720 | "started_at": "2020-01-20T09:42:53.000-08:00", 1721 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1722 | }, 1723 | { 1724 | "name": "Deploy to Heroku", 1725 | "status": "completed", 1726 | "conclusion": "success", 1727 | "number": 8, 1728 | "started_at": "2020-01-20T09:42:59.000-08:00", 1729 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1730 | }, 1731 | { 1732 | "name": "Post actions/cache@v2", 1733 | "status": "completed", 1734 | "conclusion": "success", 1735 | "number": 16, 1736 | "started_at": "2020-01-20T09:44:39.000-08:00", 1737 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1738 | }, 1739 | { 1740 | "name": "Complete job", 1741 | "status": "completed", 1742 | "conclusion": "success", 1743 | "number": 17, 1744 | "started_at": "2020-01-20T09:44:39.000-08:00", 1745 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1746 | } 1747 | ], 1748 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444514" 1749 | }, 1750 | { 1751 | "id": 399444515, 1752 | "run_id": 29679449, 1753 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1754 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1755 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1756 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444515", 1757 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444515", 1758 | "status": "completed", 1759 | "conclusion": "success", 1760 | "started_at": "2020-01-20T17:42:40Z", 1761 | "completed_at": "2020-01-20T17:44:39Z", 1762 | "name": "test15", 1763 | "steps": [ 1764 | { 1765 | "name": "Set up job", 1766 | "status": "completed", 1767 | "conclusion": "success", 1768 | "number": 1, 1769 | "started_at": "2020-01-20T09:42:40.000-08:00", 1770 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1771 | }, 1772 | { 1773 | "name": "Run actions/checkout@v2", 1774 | "status": "completed", 1775 | "conclusion": "success", 1776 | "number": 2, 1777 | "started_at": "2020-01-20T09:42:41.000-08:00", 1778 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1779 | }, 1780 | { 1781 | "name": "Set up Ruby", 1782 | "status": "completed", 1783 | "conclusion": "success", 1784 | "number": 3, 1785 | "started_at": "2020-01-20T09:42:45.000-08:00", 1786 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1787 | }, 1788 | { 1789 | "name": "Run actions/cache@v2", 1790 | "status": "completed", 1791 | "conclusion": "success", 1792 | "number": 4, 1793 | "started_at": "2020-01-20T09:42:45.000-08:00", 1794 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1795 | }, 1796 | { 1797 | "name": "Install Bundler", 1798 | "status": "completed", 1799 | "conclusion": "success", 1800 | "number": 5, 1801 | "started_at": "2020-01-20T09:42:48.000-08:00", 1802 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1803 | }, 1804 | { 1805 | "name": "Install Gems", 1806 | "status": "completed", 1807 | "conclusion": "success", 1808 | "number": 6, 1809 | "started_at": "2020-01-20T09:42:52.000-08:00", 1810 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1811 | }, 1812 | { 1813 | "name": "Run Tests", 1814 | "status": "completed", 1815 | "conclusion": "success", 1816 | "number": 7, 1817 | "started_at": "2020-01-20T09:42:53.000-08:00", 1818 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1819 | }, 1820 | { 1821 | "name": "Deploy to Heroku", 1822 | "status": "completed", 1823 | "conclusion": "success", 1824 | "number": 8, 1825 | "started_at": "2020-01-20T09:42:59.000-08:00", 1826 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1827 | }, 1828 | { 1829 | "name": "Post actions/cache@v2", 1830 | "status": "completed", 1831 | "conclusion": "success", 1832 | "number": 16, 1833 | "started_at": "2020-01-20T09:44:39.000-08:00", 1834 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1835 | }, 1836 | { 1837 | "name": "Complete job", 1838 | "status": "completed", 1839 | "conclusion": "success", 1840 | "number": 17, 1841 | "started_at": "2020-01-20T09:44:39.000-08:00", 1842 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1843 | } 1844 | ], 1845 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444515" 1846 | }, 1847 | { 1848 | "id": 399444516, 1849 | "run_id": 29679449, 1850 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1851 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1852 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1853 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444516", 1854 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444516", 1855 | "status": "completed", 1856 | "conclusion": "success", 1857 | "started_at": "2020-01-20T17:42:40Z", 1858 | "completed_at": "2020-01-20T17:44:39Z", 1859 | "name": "test16", 1860 | "steps": [ 1861 | { 1862 | "name": "Set up job", 1863 | "status": "completed", 1864 | "conclusion": "success", 1865 | "number": 1, 1866 | "started_at": "2020-01-20T09:42:40.000-08:00", 1867 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1868 | }, 1869 | { 1870 | "name": "Run actions/checkout@v2", 1871 | "status": "completed", 1872 | "conclusion": "success", 1873 | "number": 2, 1874 | "started_at": "2020-01-20T09:42:41.000-08:00", 1875 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1876 | }, 1877 | { 1878 | "name": "Set up Ruby", 1879 | "status": "completed", 1880 | "conclusion": "success", 1881 | "number": 3, 1882 | "started_at": "2020-01-20T09:42:45.000-08:00", 1883 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1884 | }, 1885 | { 1886 | "name": "Run actions/cache@v2", 1887 | "status": "completed", 1888 | "conclusion": "success", 1889 | "number": 4, 1890 | "started_at": "2020-01-20T09:42:45.000-08:00", 1891 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1892 | }, 1893 | { 1894 | "name": "Install Bundler", 1895 | "status": "completed", 1896 | "conclusion": "success", 1897 | "number": 5, 1898 | "started_at": "2020-01-20T09:42:48.000-08:00", 1899 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1900 | }, 1901 | { 1902 | "name": "Install Gems", 1903 | "status": "completed", 1904 | "conclusion": "success", 1905 | "number": 6, 1906 | "started_at": "2020-01-20T09:42:52.000-08:00", 1907 | "completed_at": "2020-01-20T09:42:53.000-08:00" 1908 | }, 1909 | { 1910 | "name": "Run Tests", 1911 | "status": "completed", 1912 | "conclusion": "success", 1913 | "number": 7, 1914 | "started_at": "2020-01-20T09:42:53.000-08:00", 1915 | "completed_at": "2020-01-20T09:42:59.000-08:00" 1916 | }, 1917 | { 1918 | "name": "Deploy to Heroku", 1919 | "status": "completed", 1920 | "conclusion": "success", 1921 | "number": 8, 1922 | "started_at": "2020-01-20T09:42:59.000-08:00", 1923 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1924 | }, 1925 | { 1926 | "name": "Post actions/cache@v2", 1927 | "status": "completed", 1928 | "conclusion": "success", 1929 | "number": 16, 1930 | "started_at": "2020-01-20T09:44:39.000-08:00", 1931 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1932 | }, 1933 | { 1934 | "name": "Complete job", 1935 | "status": "completed", 1936 | "conclusion": "success", 1937 | "number": 17, 1938 | "started_at": "2020-01-20T09:44:39.000-08:00", 1939 | "completed_at": "2020-01-20T09:44:39.000-08:00" 1940 | } 1941 | ], 1942 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444516" 1943 | }, 1944 | { 1945 | "id": 399444517, 1946 | "run_id": 29679449, 1947 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 1948 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 1949 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 1950 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444517", 1951 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444517", 1952 | "status": "completed", 1953 | "conclusion": "success", 1954 | "started_at": "2020-01-20T17:42:40Z", 1955 | "completed_at": "2020-01-20T17:44:39Z", 1956 | "name": "test17", 1957 | "steps": [ 1958 | { 1959 | "name": "Set up job", 1960 | "status": "completed", 1961 | "conclusion": "success", 1962 | "number": 1, 1963 | "started_at": "2020-01-20T09:42:40.000-08:00", 1964 | "completed_at": "2020-01-20T09:42:41.000-08:00" 1965 | }, 1966 | { 1967 | "name": "Run actions/checkout@v2", 1968 | "status": "completed", 1969 | "conclusion": "success", 1970 | "number": 2, 1971 | "started_at": "2020-01-20T09:42:41.000-08:00", 1972 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1973 | }, 1974 | { 1975 | "name": "Set up Ruby", 1976 | "status": "completed", 1977 | "conclusion": "success", 1978 | "number": 3, 1979 | "started_at": "2020-01-20T09:42:45.000-08:00", 1980 | "completed_at": "2020-01-20T09:42:45.000-08:00" 1981 | }, 1982 | { 1983 | "name": "Run actions/cache@v2", 1984 | "status": "completed", 1985 | "conclusion": "success", 1986 | "number": 4, 1987 | "started_at": "2020-01-20T09:42:45.000-08:00", 1988 | "completed_at": "2020-01-20T09:42:48.000-08:00" 1989 | }, 1990 | { 1991 | "name": "Install Bundler", 1992 | "status": "completed", 1993 | "conclusion": "success", 1994 | "number": 5, 1995 | "started_at": "2020-01-20T09:42:48.000-08:00", 1996 | "completed_at": "2020-01-20T09:42:52.000-08:00" 1997 | }, 1998 | { 1999 | "name": "Install Gems", 2000 | "status": "completed", 2001 | "conclusion": "success", 2002 | "number": 6, 2003 | "started_at": "2020-01-20T09:42:52.000-08:00", 2004 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2005 | }, 2006 | { 2007 | "name": "Run Tests", 2008 | "status": "completed", 2009 | "conclusion": "success", 2010 | "number": 7, 2011 | "started_at": "2020-01-20T09:42:53.000-08:00", 2012 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2013 | }, 2014 | { 2015 | "name": "Deploy to Heroku", 2016 | "status": "completed", 2017 | "conclusion": "success", 2018 | "number": 8, 2019 | "started_at": "2020-01-20T09:42:59.000-08:00", 2020 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2021 | }, 2022 | { 2023 | "name": "Post actions/cache@v2", 2024 | "status": "completed", 2025 | "conclusion": "success", 2026 | "number": 16, 2027 | "started_at": "2020-01-20T09:44:39.000-08:00", 2028 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2029 | }, 2030 | { 2031 | "name": "Complete job", 2032 | "status": "completed", 2033 | "conclusion": "success", 2034 | "number": 17, 2035 | "started_at": "2020-01-20T09:44:39.000-08:00", 2036 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2037 | } 2038 | ], 2039 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444517" 2040 | }, 2041 | { 2042 | "id": 399444518, 2043 | "run_id": 29679449, 2044 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2045 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2046 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2047 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444518", 2048 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444518", 2049 | "status": "completed", 2050 | "conclusion": "success", 2051 | "started_at": "2020-01-20T17:42:40Z", 2052 | "completed_at": "2020-01-20T17:44:39Z", 2053 | "name": "test18", 2054 | "steps": [ 2055 | { 2056 | "name": "Set up job", 2057 | "status": "completed", 2058 | "conclusion": "success", 2059 | "number": 1, 2060 | "started_at": "2020-01-20T09:42:40.000-08:00", 2061 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2062 | }, 2063 | { 2064 | "name": "Run actions/checkout@v2", 2065 | "status": "completed", 2066 | "conclusion": "success", 2067 | "number": 2, 2068 | "started_at": "2020-01-20T09:42:41.000-08:00", 2069 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2070 | }, 2071 | { 2072 | "name": "Set up Ruby", 2073 | "status": "completed", 2074 | "conclusion": "success", 2075 | "number": 3, 2076 | "started_at": "2020-01-20T09:42:45.000-08:00", 2077 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2078 | }, 2079 | { 2080 | "name": "Run actions/cache@v2", 2081 | "status": "completed", 2082 | "conclusion": "success", 2083 | "number": 4, 2084 | "started_at": "2020-01-20T09:42:45.000-08:00", 2085 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2086 | }, 2087 | { 2088 | "name": "Install Bundler", 2089 | "status": "completed", 2090 | "conclusion": "success", 2091 | "number": 5, 2092 | "started_at": "2020-01-20T09:42:48.000-08:00", 2093 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2094 | }, 2095 | { 2096 | "name": "Install Gems", 2097 | "status": "completed", 2098 | "conclusion": "success", 2099 | "number": 6, 2100 | "started_at": "2020-01-20T09:42:52.000-08:00", 2101 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2102 | }, 2103 | { 2104 | "name": "Run Tests", 2105 | "status": "completed", 2106 | "conclusion": "success", 2107 | "number": 7, 2108 | "started_at": "2020-01-20T09:42:53.000-08:00", 2109 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2110 | }, 2111 | { 2112 | "name": "Deploy to Heroku", 2113 | "status": "completed", 2114 | "conclusion": "success", 2115 | "number": 8, 2116 | "started_at": "2020-01-20T09:42:59.000-08:00", 2117 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2118 | }, 2119 | { 2120 | "name": "Post actions/cache@v2", 2121 | "status": "completed", 2122 | "conclusion": "success", 2123 | "number": 16, 2124 | "started_at": "2020-01-20T09:44:39.000-08:00", 2125 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2126 | }, 2127 | { 2128 | "name": "Complete job", 2129 | "status": "completed", 2130 | "conclusion": "success", 2131 | "number": 17, 2132 | "started_at": "2020-01-20T09:44:39.000-08:00", 2133 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2134 | } 2135 | ], 2136 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444518" 2137 | }, 2138 | { 2139 | "id": 399444519, 2140 | "run_id": 29679449, 2141 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2142 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2143 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2144 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444519", 2145 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444519", 2146 | "status": "completed", 2147 | "conclusion": "success", 2148 | "started_at": "2020-01-20T17:42:40Z", 2149 | "completed_at": "2020-01-20T17:44:39Z", 2150 | "name": "test19", 2151 | "steps": [ 2152 | { 2153 | "name": "Set up job", 2154 | "status": "completed", 2155 | "conclusion": "success", 2156 | "number": 1, 2157 | "started_at": "2020-01-20T09:42:40.000-08:00", 2158 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2159 | }, 2160 | { 2161 | "name": "Run actions/checkout@v2", 2162 | "status": "completed", 2163 | "conclusion": "success", 2164 | "number": 2, 2165 | "started_at": "2020-01-20T09:42:41.000-08:00", 2166 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2167 | }, 2168 | { 2169 | "name": "Set up Ruby", 2170 | "status": "completed", 2171 | "conclusion": "success", 2172 | "number": 3, 2173 | "started_at": "2020-01-20T09:42:45.000-08:00", 2174 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2175 | }, 2176 | { 2177 | "name": "Run actions/cache@v2", 2178 | "status": "completed", 2179 | "conclusion": "success", 2180 | "number": 4, 2181 | "started_at": "2020-01-20T09:42:45.000-08:00", 2182 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2183 | }, 2184 | { 2185 | "name": "Install Bundler", 2186 | "status": "completed", 2187 | "conclusion": "success", 2188 | "number": 5, 2189 | "started_at": "2020-01-20T09:42:48.000-08:00", 2190 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2191 | }, 2192 | { 2193 | "name": "Install Gems", 2194 | "status": "completed", 2195 | "conclusion": "success", 2196 | "number": 6, 2197 | "started_at": "2020-01-20T09:42:52.000-08:00", 2198 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2199 | }, 2200 | { 2201 | "name": "Run Tests", 2202 | "status": "completed", 2203 | "conclusion": "success", 2204 | "number": 7, 2205 | "started_at": "2020-01-20T09:42:53.000-08:00", 2206 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2207 | }, 2208 | { 2209 | "name": "Deploy to Heroku", 2210 | "status": "completed", 2211 | "conclusion": "success", 2212 | "number": 8, 2213 | "started_at": "2020-01-20T09:42:59.000-08:00", 2214 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2215 | }, 2216 | { 2217 | "name": "Post actions/cache@v2", 2218 | "status": "completed", 2219 | "conclusion": "success", 2220 | "number": 16, 2221 | "started_at": "2020-01-20T09:44:39.000-08:00", 2222 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2223 | }, 2224 | { 2225 | "name": "Complete job", 2226 | "status": "completed", 2227 | "conclusion": "success", 2228 | "number": 17, 2229 | "started_at": "2020-01-20T09:44:39.000-08:00", 2230 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2231 | } 2232 | ], 2233 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444519" 2234 | }, 2235 | { 2236 | "id": 399444520, 2237 | "run_id": 29679449, 2238 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2239 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2240 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2241 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444520", 2242 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444520", 2243 | "status": "completed", 2244 | "conclusion": "success", 2245 | "started_at": "2020-01-20T17:42:40Z", 2246 | "completed_at": "2020-01-20T17:44:39Z", 2247 | "name": "test20", 2248 | "steps": [ 2249 | { 2250 | "name": "Set up job", 2251 | "status": "completed", 2252 | "conclusion": "success", 2253 | "number": 1, 2254 | "started_at": "2020-01-20T09:42:40.000-08:00", 2255 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2256 | }, 2257 | { 2258 | "name": "Run actions/checkout@v2", 2259 | "status": "completed", 2260 | "conclusion": "success", 2261 | "number": 2, 2262 | "started_at": "2020-01-20T09:42:41.000-08:00", 2263 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2264 | }, 2265 | { 2266 | "name": "Set up Ruby", 2267 | "status": "completed", 2268 | "conclusion": "success", 2269 | "number": 3, 2270 | "started_at": "2020-01-20T09:42:45.000-08:00", 2271 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2272 | }, 2273 | { 2274 | "name": "Run actions/cache@v2", 2275 | "status": "completed", 2276 | "conclusion": "success", 2277 | "number": 4, 2278 | "started_at": "2020-01-20T09:42:45.000-08:00", 2279 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2280 | }, 2281 | { 2282 | "name": "Install Bundler", 2283 | "status": "completed", 2284 | "conclusion": "success", 2285 | "number": 5, 2286 | "started_at": "2020-01-20T09:42:48.000-08:00", 2287 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2288 | }, 2289 | { 2290 | "name": "Install Gems", 2291 | "status": "completed", 2292 | "conclusion": "success", 2293 | "number": 6, 2294 | "started_at": "2020-01-20T09:42:52.000-08:00", 2295 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2296 | }, 2297 | { 2298 | "name": "Run Tests", 2299 | "status": "completed", 2300 | "conclusion": "success", 2301 | "number": 7, 2302 | "started_at": "2020-01-20T09:42:53.000-08:00", 2303 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2304 | }, 2305 | { 2306 | "name": "Deploy to Heroku", 2307 | "status": "completed", 2308 | "conclusion": "success", 2309 | "number": 8, 2310 | "started_at": "2020-01-20T09:42:59.000-08:00", 2311 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2312 | }, 2313 | { 2314 | "name": "Post actions/cache@v2", 2315 | "status": "completed", 2316 | "conclusion": "success", 2317 | "number": 16, 2318 | "started_at": "2020-01-20T09:44:39.000-08:00", 2319 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2320 | }, 2321 | { 2322 | "name": "Complete job", 2323 | "status": "completed", 2324 | "conclusion": "success", 2325 | "number": 17, 2326 | "started_at": "2020-01-20T09:44:39.000-08:00", 2327 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2328 | } 2329 | ], 2330 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444520" 2331 | }, 2332 | { 2333 | "id": 399444521, 2334 | "run_id": 29679449, 2335 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2336 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2337 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2338 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444521", 2339 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444521", 2340 | "status": "completed", 2341 | "conclusion": "success", 2342 | "started_at": "2020-01-20T17:42:40Z", 2343 | "completed_at": "2020-01-20T17:44:39Z", 2344 | "name": "test21", 2345 | "steps": [ 2346 | { 2347 | "name": "Set up job", 2348 | "status": "completed", 2349 | "conclusion": "success", 2350 | "number": 1, 2351 | "started_at": "2020-01-20T09:42:40.000-08:00", 2352 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2353 | }, 2354 | { 2355 | "name": "Run actions/checkout@v2", 2356 | "status": "completed", 2357 | "conclusion": "success", 2358 | "number": 2, 2359 | "started_at": "2020-01-20T09:42:41.000-08:00", 2360 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2361 | }, 2362 | { 2363 | "name": "Set up Ruby", 2364 | "status": "completed", 2365 | "conclusion": "success", 2366 | "number": 3, 2367 | "started_at": "2020-01-20T09:42:45.000-08:00", 2368 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2369 | }, 2370 | { 2371 | "name": "Run actions/cache@v2", 2372 | "status": "completed", 2373 | "conclusion": "success", 2374 | "number": 4, 2375 | "started_at": "2020-01-20T09:42:45.000-08:00", 2376 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2377 | }, 2378 | { 2379 | "name": "Install Bundler", 2380 | "status": "completed", 2381 | "conclusion": "success", 2382 | "number": 5, 2383 | "started_at": "2020-01-20T09:42:48.000-08:00", 2384 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2385 | }, 2386 | { 2387 | "name": "Install Gems", 2388 | "status": "completed", 2389 | "conclusion": "success", 2390 | "number": 6, 2391 | "started_at": "2020-01-20T09:42:52.000-08:00", 2392 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2393 | }, 2394 | { 2395 | "name": "Run Tests", 2396 | "status": "completed", 2397 | "conclusion": "success", 2398 | "number": 7, 2399 | "started_at": "2020-01-20T09:42:53.000-08:00", 2400 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2401 | }, 2402 | { 2403 | "name": "Deploy to Heroku", 2404 | "status": "completed", 2405 | "conclusion": "success", 2406 | "number": 8, 2407 | "started_at": "2020-01-20T09:42:59.000-08:00", 2408 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2409 | }, 2410 | { 2411 | "name": "Post actions/cache@v2", 2412 | "status": "completed", 2413 | "conclusion": "success", 2414 | "number": 16, 2415 | "started_at": "2020-01-20T09:44:39.000-08:00", 2416 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2417 | }, 2418 | { 2419 | "name": "Complete job", 2420 | "status": "completed", 2421 | "conclusion": "success", 2422 | "number": 17, 2423 | "started_at": "2020-01-20T09:44:39.000-08:00", 2424 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2425 | } 2426 | ], 2427 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444521" 2428 | }, 2429 | { 2430 | "id": 399444522, 2431 | "run_id": 29679449, 2432 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2433 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2434 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2435 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444522", 2436 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444522", 2437 | "status": "completed", 2438 | "conclusion": "success", 2439 | "started_at": "2020-01-20T17:42:40Z", 2440 | "completed_at": "2020-01-20T17:44:39Z", 2441 | "name": "test22", 2442 | "steps": [ 2443 | { 2444 | "name": "Set up job", 2445 | "status": "completed", 2446 | "conclusion": "success", 2447 | "number": 1, 2448 | "started_at": "2020-01-20T09:42:40.000-08:00", 2449 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2450 | }, 2451 | { 2452 | "name": "Run actions/checkout@v2", 2453 | "status": "completed", 2454 | "conclusion": "success", 2455 | "number": 2, 2456 | "started_at": "2020-01-20T09:42:41.000-08:00", 2457 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2458 | }, 2459 | { 2460 | "name": "Set up Ruby", 2461 | "status": "completed", 2462 | "conclusion": "success", 2463 | "number": 3, 2464 | "started_at": "2020-01-20T09:42:45.000-08:00", 2465 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2466 | }, 2467 | { 2468 | "name": "Run actions/cache@v2", 2469 | "status": "completed", 2470 | "conclusion": "success", 2471 | "number": 4, 2472 | "started_at": "2020-01-20T09:42:45.000-08:00", 2473 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2474 | }, 2475 | { 2476 | "name": "Install Bundler", 2477 | "status": "completed", 2478 | "conclusion": "success", 2479 | "number": 5, 2480 | "started_at": "2020-01-20T09:42:48.000-08:00", 2481 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2482 | }, 2483 | { 2484 | "name": "Install Gems", 2485 | "status": "completed", 2486 | "conclusion": "success", 2487 | "number": 6, 2488 | "started_at": "2020-01-20T09:42:52.000-08:00", 2489 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2490 | }, 2491 | { 2492 | "name": "Run Tests", 2493 | "status": "completed", 2494 | "conclusion": "success", 2495 | "number": 7, 2496 | "started_at": "2020-01-20T09:42:53.000-08:00", 2497 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2498 | }, 2499 | { 2500 | "name": "Deploy to Heroku", 2501 | "status": "completed", 2502 | "conclusion": "success", 2503 | "number": 8, 2504 | "started_at": "2020-01-20T09:42:59.000-08:00", 2505 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2506 | }, 2507 | { 2508 | "name": "Post actions/cache@v2", 2509 | "status": "completed", 2510 | "conclusion": "success", 2511 | "number": 16, 2512 | "started_at": "2020-01-20T09:44:39.000-08:00", 2513 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2514 | }, 2515 | { 2516 | "name": "Complete job", 2517 | "status": "completed", 2518 | "conclusion": "success", 2519 | "number": 17, 2520 | "started_at": "2020-01-20T09:44:39.000-08:00", 2521 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2522 | } 2523 | ], 2524 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444522" 2525 | }, 2526 | { 2527 | "id": 399444523, 2528 | "run_id": 29679449, 2529 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2530 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2531 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2532 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444523", 2533 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444523", 2534 | "status": "completed", 2535 | "conclusion": "success", 2536 | "started_at": "2020-01-20T17:42:40Z", 2537 | "completed_at": "2020-01-20T17:44:39Z", 2538 | "name": "test23", 2539 | "steps": [ 2540 | { 2541 | "name": "Set up job", 2542 | "status": "completed", 2543 | "conclusion": "success", 2544 | "number": 1, 2545 | "started_at": "2020-01-20T09:42:40.000-08:00", 2546 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2547 | }, 2548 | { 2549 | "name": "Run actions/checkout@v2", 2550 | "status": "completed", 2551 | "conclusion": "success", 2552 | "number": 2, 2553 | "started_at": "2020-01-20T09:42:41.000-08:00", 2554 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2555 | }, 2556 | { 2557 | "name": "Set up Ruby", 2558 | "status": "completed", 2559 | "conclusion": "success", 2560 | "number": 3, 2561 | "started_at": "2020-01-20T09:42:45.000-08:00", 2562 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2563 | }, 2564 | { 2565 | "name": "Run actions/cache@v2", 2566 | "status": "completed", 2567 | "conclusion": "success", 2568 | "number": 4, 2569 | "started_at": "2020-01-20T09:42:45.000-08:00", 2570 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2571 | }, 2572 | { 2573 | "name": "Install Bundler", 2574 | "status": "completed", 2575 | "conclusion": "success", 2576 | "number": 5, 2577 | "started_at": "2020-01-20T09:42:48.000-08:00", 2578 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2579 | }, 2580 | { 2581 | "name": "Install Gems", 2582 | "status": "completed", 2583 | "conclusion": "success", 2584 | "number": 6, 2585 | "started_at": "2020-01-20T09:42:52.000-08:00", 2586 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2587 | }, 2588 | { 2589 | "name": "Run Tests", 2590 | "status": "completed", 2591 | "conclusion": "success", 2592 | "number": 7, 2593 | "started_at": "2020-01-20T09:42:53.000-08:00", 2594 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2595 | }, 2596 | { 2597 | "name": "Deploy to Heroku", 2598 | "status": "completed", 2599 | "conclusion": "success", 2600 | "number": 8, 2601 | "started_at": "2020-01-20T09:42:59.000-08:00", 2602 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2603 | }, 2604 | { 2605 | "name": "Post actions/cache@v2", 2606 | "status": "completed", 2607 | "conclusion": "success", 2608 | "number": 16, 2609 | "started_at": "2020-01-20T09:44:39.000-08:00", 2610 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2611 | }, 2612 | { 2613 | "name": "Complete job", 2614 | "status": "completed", 2615 | "conclusion": "success", 2616 | "number": 17, 2617 | "started_at": "2020-01-20T09:44:39.000-08:00", 2618 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2619 | } 2620 | ], 2621 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444523" 2622 | }, 2623 | { 2624 | "id": 399444524, 2625 | "run_id": 29679449, 2626 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2627 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2628 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2629 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444524", 2630 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444524", 2631 | "status": "completed", 2632 | "conclusion": "success", 2633 | "started_at": "2020-01-20T17:42:40Z", 2634 | "completed_at": "2020-01-20T17:44:39Z", 2635 | "name": "test24", 2636 | "steps": [ 2637 | { 2638 | "name": "Set up job", 2639 | "status": "completed", 2640 | "conclusion": "success", 2641 | "number": 1, 2642 | "started_at": "2020-01-20T09:42:40.000-08:00", 2643 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2644 | }, 2645 | { 2646 | "name": "Run actions/checkout@v2", 2647 | "status": "completed", 2648 | "conclusion": "success", 2649 | "number": 2, 2650 | "started_at": "2020-01-20T09:42:41.000-08:00", 2651 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2652 | }, 2653 | { 2654 | "name": "Set up Ruby", 2655 | "status": "completed", 2656 | "conclusion": "success", 2657 | "number": 3, 2658 | "started_at": "2020-01-20T09:42:45.000-08:00", 2659 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2660 | }, 2661 | { 2662 | "name": "Run actions/cache@v2", 2663 | "status": "completed", 2664 | "conclusion": "success", 2665 | "number": 4, 2666 | "started_at": "2020-01-20T09:42:45.000-08:00", 2667 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2668 | }, 2669 | { 2670 | "name": "Install Bundler", 2671 | "status": "completed", 2672 | "conclusion": "success", 2673 | "number": 5, 2674 | "started_at": "2020-01-20T09:42:48.000-08:00", 2675 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2676 | }, 2677 | { 2678 | "name": "Install Gems", 2679 | "status": "completed", 2680 | "conclusion": "success", 2681 | "number": 6, 2682 | "started_at": "2020-01-20T09:42:52.000-08:00", 2683 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2684 | }, 2685 | { 2686 | "name": "Run Tests", 2687 | "status": "completed", 2688 | "conclusion": "success", 2689 | "number": 7, 2690 | "started_at": "2020-01-20T09:42:53.000-08:00", 2691 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2692 | }, 2693 | { 2694 | "name": "Deploy to Heroku", 2695 | "status": "completed", 2696 | "conclusion": "success", 2697 | "number": 8, 2698 | "started_at": "2020-01-20T09:42:59.000-08:00", 2699 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2700 | }, 2701 | { 2702 | "name": "Post actions/cache@v2", 2703 | "status": "completed", 2704 | "conclusion": "success", 2705 | "number": 16, 2706 | "started_at": "2020-01-20T09:44:39.000-08:00", 2707 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2708 | }, 2709 | { 2710 | "name": "Complete job", 2711 | "status": "completed", 2712 | "conclusion": "success", 2713 | "number": 17, 2714 | "started_at": "2020-01-20T09:44:39.000-08:00", 2715 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2716 | } 2717 | ], 2718 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444524" 2719 | }, 2720 | { 2721 | "id": 399444525, 2722 | "run_id": 29679449, 2723 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2724 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2725 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2726 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444525", 2727 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444525", 2728 | "status": "completed", 2729 | "conclusion": "success", 2730 | "started_at": "2020-01-20T17:42:40Z", 2731 | "completed_at": "2020-01-20T17:44:39Z", 2732 | "name": "test25", 2733 | "steps": [ 2734 | { 2735 | "name": "Set up job", 2736 | "status": "completed", 2737 | "conclusion": "success", 2738 | "number": 1, 2739 | "started_at": "2020-01-20T09:42:40.000-08:00", 2740 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2741 | }, 2742 | { 2743 | "name": "Run actions/checkout@v2", 2744 | "status": "completed", 2745 | "conclusion": "success", 2746 | "number": 2, 2747 | "started_at": "2020-01-20T09:42:41.000-08:00", 2748 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2749 | }, 2750 | { 2751 | "name": "Set up Ruby", 2752 | "status": "completed", 2753 | "conclusion": "success", 2754 | "number": 3, 2755 | "started_at": "2020-01-20T09:42:45.000-08:00", 2756 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2757 | }, 2758 | { 2759 | "name": "Run actions/cache@v2", 2760 | "status": "completed", 2761 | "conclusion": "success", 2762 | "number": 4, 2763 | "started_at": "2020-01-20T09:42:45.000-08:00", 2764 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2765 | }, 2766 | { 2767 | "name": "Install Bundler", 2768 | "status": "completed", 2769 | "conclusion": "success", 2770 | "number": 5, 2771 | "started_at": "2020-01-20T09:42:48.000-08:00", 2772 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2773 | }, 2774 | { 2775 | "name": "Install Gems", 2776 | "status": "completed", 2777 | "conclusion": "success", 2778 | "number": 6, 2779 | "started_at": "2020-01-20T09:42:52.000-08:00", 2780 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2781 | }, 2782 | { 2783 | "name": "Run Tests", 2784 | "status": "completed", 2785 | "conclusion": "success", 2786 | "number": 7, 2787 | "started_at": "2020-01-20T09:42:53.000-08:00", 2788 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2789 | }, 2790 | { 2791 | "name": "Deploy to Heroku", 2792 | "status": "completed", 2793 | "conclusion": "success", 2794 | "number": 8, 2795 | "started_at": "2020-01-20T09:42:59.000-08:00", 2796 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2797 | }, 2798 | { 2799 | "name": "Post actions/cache@v2", 2800 | "status": "completed", 2801 | "conclusion": "success", 2802 | "number": 16, 2803 | "started_at": "2020-01-20T09:44:39.000-08:00", 2804 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2805 | }, 2806 | { 2807 | "name": "Complete job", 2808 | "status": "completed", 2809 | "conclusion": "success", 2810 | "number": 17, 2811 | "started_at": "2020-01-20T09:44:39.000-08:00", 2812 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2813 | } 2814 | ], 2815 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444525" 2816 | }, 2817 | { 2818 | "id": 399444526, 2819 | "run_id": 29679449, 2820 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2821 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2822 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2823 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444526", 2824 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444526", 2825 | "status": "completed", 2826 | "conclusion": "success", 2827 | "started_at": "2020-01-20T17:42:40Z", 2828 | "completed_at": "2020-01-20T17:44:39Z", 2829 | "name": "test26", 2830 | "steps": [ 2831 | { 2832 | "name": "Set up job", 2833 | "status": "completed", 2834 | "conclusion": "success", 2835 | "number": 1, 2836 | "started_at": "2020-01-20T09:42:40.000-08:00", 2837 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2838 | }, 2839 | { 2840 | "name": "Run actions/checkout@v2", 2841 | "status": "completed", 2842 | "conclusion": "success", 2843 | "number": 2, 2844 | "started_at": "2020-01-20T09:42:41.000-08:00", 2845 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2846 | }, 2847 | { 2848 | "name": "Set up Ruby", 2849 | "status": "completed", 2850 | "conclusion": "success", 2851 | "number": 3, 2852 | "started_at": "2020-01-20T09:42:45.000-08:00", 2853 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2854 | }, 2855 | { 2856 | "name": "Run actions/cache@v2", 2857 | "status": "completed", 2858 | "conclusion": "success", 2859 | "number": 4, 2860 | "started_at": "2020-01-20T09:42:45.000-08:00", 2861 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2862 | }, 2863 | { 2864 | "name": "Install Bundler", 2865 | "status": "completed", 2866 | "conclusion": "success", 2867 | "number": 5, 2868 | "started_at": "2020-01-20T09:42:48.000-08:00", 2869 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2870 | }, 2871 | { 2872 | "name": "Install Gems", 2873 | "status": "completed", 2874 | "conclusion": "success", 2875 | "number": 6, 2876 | "started_at": "2020-01-20T09:42:52.000-08:00", 2877 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2878 | }, 2879 | { 2880 | "name": "Run Tests", 2881 | "status": "completed", 2882 | "conclusion": "success", 2883 | "number": 7, 2884 | "started_at": "2020-01-20T09:42:53.000-08:00", 2885 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2886 | }, 2887 | { 2888 | "name": "Deploy to Heroku", 2889 | "status": "completed", 2890 | "conclusion": "success", 2891 | "number": 8, 2892 | "started_at": "2020-01-20T09:42:59.000-08:00", 2893 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2894 | }, 2895 | { 2896 | "name": "Post actions/cache@v2", 2897 | "status": "completed", 2898 | "conclusion": "success", 2899 | "number": 16, 2900 | "started_at": "2020-01-20T09:44:39.000-08:00", 2901 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2902 | }, 2903 | { 2904 | "name": "Complete job", 2905 | "status": "completed", 2906 | "conclusion": "success", 2907 | "number": 17, 2908 | "started_at": "2020-01-20T09:44:39.000-08:00", 2909 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2910 | } 2911 | ], 2912 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444526" 2913 | }, 2914 | { 2915 | "id": 399444527, 2916 | "run_id": 29679449, 2917 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 2918 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 2919 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 2920 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444527", 2921 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444527", 2922 | "status": "completed", 2923 | "conclusion": "success", 2924 | "started_at": "2020-01-20T17:42:40Z", 2925 | "completed_at": "2020-01-20T17:44:39Z", 2926 | "name": "test27", 2927 | "steps": [ 2928 | { 2929 | "name": "Set up job", 2930 | "status": "completed", 2931 | "conclusion": "success", 2932 | "number": 1, 2933 | "started_at": "2020-01-20T09:42:40.000-08:00", 2934 | "completed_at": "2020-01-20T09:42:41.000-08:00" 2935 | }, 2936 | { 2937 | "name": "Run actions/checkout@v2", 2938 | "status": "completed", 2939 | "conclusion": "success", 2940 | "number": 2, 2941 | "started_at": "2020-01-20T09:42:41.000-08:00", 2942 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2943 | }, 2944 | { 2945 | "name": "Set up Ruby", 2946 | "status": "completed", 2947 | "conclusion": "success", 2948 | "number": 3, 2949 | "started_at": "2020-01-20T09:42:45.000-08:00", 2950 | "completed_at": "2020-01-20T09:42:45.000-08:00" 2951 | }, 2952 | { 2953 | "name": "Run actions/cache@v2", 2954 | "status": "completed", 2955 | "conclusion": "success", 2956 | "number": 4, 2957 | "started_at": "2020-01-20T09:42:45.000-08:00", 2958 | "completed_at": "2020-01-20T09:42:48.000-08:00" 2959 | }, 2960 | { 2961 | "name": "Install Bundler", 2962 | "status": "completed", 2963 | "conclusion": "success", 2964 | "number": 5, 2965 | "started_at": "2020-01-20T09:42:48.000-08:00", 2966 | "completed_at": "2020-01-20T09:42:52.000-08:00" 2967 | }, 2968 | { 2969 | "name": "Install Gems", 2970 | "status": "completed", 2971 | "conclusion": "success", 2972 | "number": 6, 2973 | "started_at": "2020-01-20T09:42:52.000-08:00", 2974 | "completed_at": "2020-01-20T09:42:53.000-08:00" 2975 | }, 2976 | { 2977 | "name": "Run Tests", 2978 | "status": "completed", 2979 | "conclusion": "success", 2980 | "number": 7, 2981 | "started_at": "2020-01-20T09:42:53.000-08:00", 2982 | "completed_at": "2020-01-20T09:42:59.000-08:00" 2983 | }, 2984 | { 2985 | "name": "Deploy to Heroku", 2986 | "status": "completed", 2987 | "conclusion": "success", 2988 | "number": 8, 2989 | "started_at": "2020-01-20T09:42:59.000-08:00", 2990 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2991 | }, 2992 | { 2993 | "name": "Post actions/cache@v2", 2994 | "status": "completed", 2995 | "conclusion": "success", 2996 | "number": 16, 2997 | "started_at": "2020-01-20T09:44:39.000-08:00", 2998 | "completed_at": "2020-01-20T09:44:39.000-08:00" 2999 | }, 3000 | { 3001 | "name": "Complete job", 3002 | "status": "completed", 3003 | "conclusion": "success", 3004 | "number": 17, 3005 | "started_at": "2020-01-20T09:44:39.000-08:00", 3006 | "completed_at": "2020-01-20T09:44:39.000-08:00" 3007 | } 3008 | ], 3009 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444527" 3010 | }, 3011 | { 3012 | "id": 399444528, 3013 | "run_id": 29679449, 3014 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 3015 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 3016 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 3017 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444528", 3018 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444528", 3019 | "status": "completed", 3020 | "conclusion": "success", 3021 | "started_at": "2020-01-20T17:42:40Z", 3022 | "completed_at": "2020-01-20T17:44:39Z", 3023 | "name": "test28", 3024 | "steps": [ 3025 | { 3026 | "name": "Set up job", 3027 | "status": "completed", 3028 | "conclusion": "success", 3029 | "number": 1, 3030 | "started_at": "2020-01-20T09:42:40.000-08:00", 3031 | "completed_at": "2020-01-20T09:42:41.000-08:00" 3032 | }, 3033 | { 3034 | "name": "Run actions/checkout@v2", 3035 | "status": "completed", 3036 | "conclusion": "success", 3037 | "number": 2, 3038 | "started_at": "2020-01-20T09:42:41.000-08:00", 3039 | "completed_at": "2020-01-20T09:42:45.000-08:00" 3040 | }, 3041 | { 3042 | "name": "Set up Ruby", 3043 | "status": "completed", 3044 | "conclusion": "success", 3045 | "number": 3, 3046 | "started_at": "2020-01-20T09:42:45.000-08:00", 3047 | "completed_at": "2020-01-20T09:42:45.000-08:00" 3048 | }, 3049 | { 3050 | "name": "Run actions/cache@v2", 3051 | "status": "completed", 3052 | "conclusion": "success", 3053 | "number": 4, 3054 | "started_at": "2020-01-20T09:42:45.000-08:00", 3055 | "completed_at": "2020-01-20T09:42:48.000-08:00" 3056 | }, 3057 | { 3058 | "name": "Install Bundler", 3059 | "status": "completed", 3060 | "conclusion": "success", 3061 | "number": 5, 3062 | "started_at": "2020-01-20T09:42:48.000-08:00", 3063 | "completed_at": "2020-01-20T09:42:52.000-08:00" 3064 | }, 3065 | { 3066 | "name": "Install Gems", 3067 | "status": "completed", 3068 | "conclusion": "success", 3069 | "number": 6, 3070 | "started_at": "2020-01-20T09:42:52.000-08:00", 3071 | "completed_at": "2020-01-20T09:42:53.000-08:00" 3072 | }, 3073 | { 3074 | "name": "Run Tests", 3075 | "status": "completed", 3076 | "conclusion": "success", 3077 | "number": 7, 3078 | "started_at": "2020-01-20T09:42:53.000-08:00", 3079 | "completed_at": "2020-01-20T09:42:59.000-08:00" 3080 | }, 3081 | { 3082 | "name": "Deploy to Heroku", 3083 | "status": "completed", 3084 | "conclusion": "success", 3085 | "number": 8, 3086 | "started_at": "2020-01-20T09:42:59.000-08:00", 3087 | "completed_at": "2020-01-20T09:44:39.000-08:00" 3088 | }, 3089 | { 3090 | "name": "Post actions/cache@v2", 3091 | "status": "completed", 3092 | "conclusion": "success", 3093 | "number": 16, 3094 | "started_at": "2020-01-20T09:44:39.000-08:00", 3095 | "completed_at": "2020-01-20T09:44:39.000-08:00" 3096 | }, 3097 | { 3098 | "name": "Complete job", 3099 | "status": "completed", 3100 | "conclusion": "success", 3101 | "number": 17, 3102 | "started_at": "2020-01-20T09:44:39.000-08:00", 3103 | "completed_at": "2020-01-20T09:44:39.000-08:00" 3104 | } 3105 | ], 3106 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444528" 3107 | }, 3108 | { 3109 | "id": 399444529, 3110 | "run_id": 29679449, 3111 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 3112 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 3113 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 3114 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444529", 3115 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444529", 3116 | "status": "completed", 3117 | "conclusion": "success", 3118 | "started_at": "2020-01-20T17:42:40Z", 3119 | "completed_at": "2020-01-20T17:44:39Z", 3120 | "name": "test29", 3121 | "steps": [ 3122 | { 3123 | "name": "Set up job", 3124 | "status": "completed", 3125 | "conclusion": "success", 3126 | "number": 1, 3127 | "started_at": "2020-01-20T09:42:40.000-08:00", 3128 | "completed_at": "2020-01-20T09:42:41.000-08:00" 3129 | }, 3130 | { 3131 | "name": "Run actions/checkout@v2", 3132 | "status": "completed", 3133 | "conclusion": "success", 3134 | "number": 2, 3135 | "started_at": "2020-01-20T09:42:41.000-08:00", 3136 | "completed_at": "2020-01-20T09:42:45.000-08:00" 3137 | }, 3138 | { 3139 | "name": "Set up Ruby", 3140 | "status": "completed", 3141 | "conclusion": "success", 3142 | "number": 3, 3143 | "started_at": "2020-01-20T09:42:45.000-08:00", 3144 | "completed_at": "2020-01-20T09:42:45.000-08:00" 3145 | }, 3146 | { 3147 | "name": "Run actions/cache@v2", 3148 | "status": "completed", 3149 | "conclusion": "success", 3150 | "number": 4, 3151 | "started_at": "2020-01-20T09:42:45.000-08:00", 3152 | "completed_at": "2020-01-20T09:42:48.000-08:00" 3153 | }, 3154 | { 3155 | "name": "Install Bundler", 3156 | "status": "completed", 3157 | "conclusion": "success", 3158 | "number": 5, 3159 | "started_at": "2020-01-20T09:42:48.000-08:00", 3160 | "completed_at": "2020-01-20T09:42:52.000-08:00" 3161 | }, 3162 | { 3163 | "name": "Install Gems", 3164 | "status": "completed", 3165 | "conclusion": "success", 3166 | "number": 6, 3167 | "started_at": "2020-01-20T09:42:52.000-08:00", 3168 | "completed_at": "2020-01-20T09:42:53.000-08:00" 3169 | }, 3170 | { 3171 | "name": "Run Tests", 3172 | "status": "completed", 3173 | "conclusion": "success", 3174 | "number": 7, 3175 | "started_at": "2020-01-20T09:42:53.000-08:00", 3176 | "completed_at": "2020-01-20T09:42:59.000-08:00" 3177 | }, 3178 | { 3179 | "name": "Deploy to Heroku", 3180 | "status": "completed", 3181 | "conclusion": "success", 3182 | "number": 8, 3183 | "started_at": "2020-01-20T09:42:59.000-08:00", 3184 | "completed_at": "2020-01-20T09:44:39.000-08:00" 3185 | }, 3186 | { 3187 | "name": "Post actions/cache@v2", 3188 | "status": "completed", 3189 | "conclusion": "success", 3190 | "number": 16, 3191 | "started_at": "2020-01-20T09:44:39.000-08:00", 3192 | "completed_at": "2020-01-20T09:44:39.000-08:00" 3193 | }, 3194 | { 3195 | "name": "Complete job", 3196 | "status": "completed", 3197 | "conclusion": "success", 3198 | "number": 17, 3199 | "started_at": "2020-01-20T09:44:39.000-08:00", 3200 | "completed_at": "2020-01-20T09:44:39.000-08:00" 3201 | } 3202 | ], 3203 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444529" 3204 | } 3205 | ] 3206 | } 3207 | -------------------------------------------------------------------------------- /src/fixtures/actions.list.jobs4.json: -------------------------------------------------------------------------------- 1 | { 2 | "total_count": 4, 3 | "jobs": [ 4 | { 5 | "id": 399444496, 6 | "run_id": 29679449, 7 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 8 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 9 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 10 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444496", 11 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444496", 12 | "status": "queued", 13 | "conclusion": "skipped", 14 | "started_at": "2020-01-20T17:42:40Z", 15 | "completed_at": "2020-01-20T17:44:39Z", 16 | "name": "build", 17 | "steps": [], 18 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444496" 19 | }, 20 | { 21 | "id": 399444497, 22 | "run_id": 29679449, 23 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 24 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 25 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 26 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444497", 27 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444497", 28 | "status": "queued", 29 | "conclusion": "skipped", 30 | "started_at": "2020-01-20T17:42:40Z", 31 | "completed_at": "2020-01-20T17:44:39Z", 32 | "name": "test", 33 | "steps": [], 34 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444497" 35 | }, 36 | { 37 | "id": 399444498, 38 | "run_id": 29679449, 39 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 40 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 41 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 42 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444498", 43 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444498", 44 | "status": "queued", 45 | "conclusion": "skipped", 46 | "started_at": "2020-01-20T17:42:40Z", 47 | "completed_at": "2020-01-20T17:44:39Z", 48 | "name": "build", 49 | "steps": [], 50 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444498" 51 | }, 52 | { 53 | "id": 399444499, 54 | "run_id": 29679449, 55 | "run_url": "https://api.github.com/repos/octo-org/octo-repo/actions/runs/29679449", 56 | "node_id": "MDEyOldvcmtmbG93IEpvYjM5OTQ0NDQ5Ng==", 57 | "head_sha": "f83a356604ae3c5d03e1b46ef4d1ca77d64a90b0", 58 | "url": "https://api.github.com/repos/octo-org/octo-repo/actions/jobs/399444499", 59 | "html_url": "https://github.com/octo-org/octo-repo/runs/399444499", 60 | "status": "queued", 61 | "conclusion": "skipped", 62 | "started_at": "2020-01-20T17:42:40Z", 63 | "completed_at": "2020-01-20T17:44:39Z", 64 | "name": "release", 65 | "steps": [], 66 | "check_run_url": "https://api.github.com/repos/octo-org/octo-repo/check-runs/399444499" 67 | } 68 | ] 69 | } 70 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from 'path'; 2 | import { setFailed } from '@actions/core'; 3 | import { Context } from '@actions/github/lib/context'; 4 | import { ContextHelper, Utils } from '@technote-space/github-action-helper'; 5 | import { Logger } from '@technote-space/github-action-log-helper'; 6 | import { execute } from './process'; 7 | 8 | const run = async(): Promise => { 9 | const logger = new Logger(); 10 | const context = new Context(); 11 | ContextHelper.showActionInfo(resolve(__dirname, '..'), logger, context); 12 | 13 | await execute(logger, Utils.getOctokit(), context); 14 | }; 15 | 16 | run().catch(error => { 17 | console.log(error); 18 | setFailed(error.message); 19 | }); 20 | -------------------------------------------------------------------------------- /src/process.test.ts: -------------------------------------------------------------------------------- 1 | import { resolve } from 'path'; 2 | import { Logger } from '@technote-space/github-action-log-helper'; 3 | import { 4 | testEnv, 5 | spyOnStdout, 6 | getOctokit, 7 | generateContext, 8 | getApiFixture, 9 | disableNetConnect, 10 | stdoutContains, 11 | getLogStdout, 12 | spyOnExportVariable, 13 | exportVariableCalledWith, 14 | spyOnSetOutput, 15 | setOutputCalledWith, 16 | } from '@technote-space/github-action-test-helper'; 17 | import nock from 'nock'; 18 | import { describe, expect, it } from 'vitest'; 19 | import { getJobs, getJobConclusions, getWorkflowConclusion, execute } from './process'; 20 | 21 | const rootDir = resolve(__dirname, '..'); 22 | const fixtureRootDir = resolve(__dirname, 'fixtures'); 23 | const context = generateContext({ owner: 'hello', repo: 'world' }, { 24 | runId: 123, 25 | }); 26 | const octokit = getOctokit(); 27 | const logger = new Logger(); 28 | 29 | describe('getJobs', () => { 30 | testEnv(rootDir); 31 | disableNetConnect(nock); 32 | 33 | it('should get jobs', async() => { 34 | nock('https://api.github.com') 35 | .persist() 36 | .get('/repos/hello/world/actions/runs/123/jobs') 37 | .reply(200, () => getApiFixture(fixtureRootDir, 'actions.list.jobs1')); 38 | 39 | const jobs = await getJobs(octokit, context); 40 | 41 | expect(jobs).toHaveLength(2); 42 | expect(jobs[0]).toHaveProperty('id'); 43 | expect(jobs[0]).toHaveProperty('status'); 44 | expect(jobs[0]).toHaveProperty('conclusion'); 45 | }); 46 | 47 | it('should get jobs with input run id', async() => { 48 | process.env.INPUT_TARGET_RUN_ID = '456'; 49 | nock('https://api.github.com') 50 | .persist() 51 | .get('/repos/hello/world/actions/runs/456/jobs') 52 | .reply(200, () => getApiFixture(fixtureRootDir, 'actions.list.jobs1')); 53 | 54 | const jobs = await getJobs(octokit, context); 55 | 56 | expect(jobs).toHaveLength(2); 57 | }); 58 | }); 59 | 60 | describe('getJobConclusions', () => { 61 | it('should get conclusions', () => { 62 | expect(getJobConclusions([ 63 | { conclusion: 'cancelled' }, 64 | { conclusion: null }, 65 | { conclusion: 'neutral' }, 66 | { conclusion: 'failure' }, 67 | { conclusion: 'success' }, 68 | { conclusion: 'failure' }, 69 | { conclusion: 'success' }, 70 | { conclusion: 'cancelled' }, 71 | { conclusion: 'skipped' }, 72 | { conclusion: 'test1' }, 73 | { conclusion: 'test2' }, 74 | { conclusion: 'test3' }, 75 | ])).toEqual([ 76 | 'cancelled', 77 | 'neutral', 78 | 'failure', 79 | 'success', 80 | 'skipped', 81 | 'test1', 82 | 'test2', 83 | 'test3', 84 | ]); 85 | }); 86 | }); 87 | 88 | describe('getWorkflowConclusion', () => { 89 | testEnv(rootDir); 90 | 91 | it('should get workflow conclusion', () => { 92 | expect(getWorkflowConclusion([])).toBe('skipped'); 93 | expect(getWorkflowConclusion(['test'])).toBe('skipped'); 94 | expect(getWorkflowConclusion([ 95 | 'neutral', 96 | 'cancelled', 97 | 'success', 98 | ])).toBe('cancelled'); 99 | expect(getWorkflowConclusion([ 100 | 'failure', 101 | 'cancelled', 102 | ])).toBe('failure'); 103 | }); 104 | 105 | it('should get specified fallback conclusion', () => { 106 | process.env.INPUT_FALLBACK_CONCLUSION = 'failure'; 107 | expect(getWorkflowConclusion([])).toBe('failure'); 108 | }); 109 | 110 | it('should get workflow conclusion (strict success)', () => { 111 | process.env.INPUT_STRICT_SUCCESS = 'true'; 112 | expect(getWorkflowConclusion(['success'])).toBe('success'); 113 | expect(getWorkflowConclusion(['success', 'success'])).toBe('success'); 114 | 115 | expect(getWorkflowConclusion(['skipped'])).toBe('failure'); 116 | expect(getWorkflowConclusion(['success', 'success', 'skipped'])).toBe('failure'); 117 | expect(getWorkflowConclusion([])).toBe('skipped'); 118 | 119 | process.env.INPUT_FALLBACK_CONCLUSION = 'failure'; 120 | expect(getWorkflowConclusion([])).toBe('failure'); 121 | }); 122 | }); 123 | 124 | describe('execute', () => { 125 | testEnv(rootDir); 126 | disableNetConnect(nock); 127 | 128 | it('should get payload 1', async() => { 129 | const mockStdout = spyOnStdout(); 130 | const mockEnv = spyOnExportVariable(); 131 | const mockOutput = spyOnSetOutput(); 132 | nock('https://api.github.com') 133 | .persist() 134 | .get('/repos/hello/world/actions/runs/123/jobs') 135 | .reply(200, () => getApiFixture(fixtureRootDir, 'actions.list.jobs1')); 136 | 137 | await execute(logger, octokit, context); 138 | 139 | stdoutContains(mockStdout, [ 140 | '::group::Jobs:', 141 | '::group::Conclusions:', 142 | getLogStdout(['skipped', 'success']), 143 | '::group::Conclusion:', 144 | '"success"', 145 | ]); 146 | exportVariableCalledWith(mockEnv, [ 147 | { name: 'WORKFLOW_CONCLUSION', val: 'success' }, 148 | ]); 149 | setOutputCalledWith(mockOutput, [ 150 | { name: 'conclusion', value: 'success' }, 151 | ]); 152 | }); 153 | 154 | it('should get payload 2', async() => { 155 | const mockStdout = spyOnStdout(); 156 | const mockEnv = spyOnExportVariable(); 157 | const mockOutput = spyOnSetOutput(); 158 | nock('https://api.github.com') 159 | .persist() 160 | .get('/repos/hello/world/actions/runs/123/jobs') 161 | .reply(200, () => getApiFixture(fixtureRootDir, 'actions.list.jobs2')); 162 | 163 | await execute(logger, octokit, context); 164 | 165 | stdoutContains(mockStdout, [ 166 | '::group::Jobs:', 167 | '::group::Conclusions:', 168 | getLogStdout(['cancelled', 'success', 'skipped']), 169 | '::group::Conclusion:', 170 | '"cancelled"', 171 | ]); 172 | exportVariableCalledWith(mockEnv, [ 173 | { name: 'WORKFLOW_CONCLUSION', val: 'cancelled' }, 174 | ]); 175 | setOutputCalledWith(mockOutput, [ 176 | { name: 'conclusion', value: 'cancelled' }, 177 | ]); 178 | }); 179 | 180 | it('should get payload 3', async() => { 181 | const mockStdout = spyOnStdout(); 182 | const mockEnv = spyOnExportVariable(); 183 | const mockOutput = spyOnSetOutput(); 184 | nock('https://api.github.com') 185 | .persist() 186 | .get('/repos/hello/world/actions/runs/123/jobs') 187 | .reply(200, () => getApiFixture(fixtureRootDir, 'actions.list.jobs3')); 188 | 189 | await execute(logger, octokit, context); 190 | 191 | stdoutContains(mockStdout, [ 192 | '::group::Jobs:', 193 | '::group::Conclusions:', 194 | getLogStdout(['failure', 'cancelled', 'success']), 195 | '::group::Conclusion:', 196 | '"failure"', 197 | ]); 198 | exportVariableCalledWith(mockEnv, [ 199 | { name: 'WORKFLOW_CONCLUSION', val: 'failure' }, 200 | ]); 201 | setOutputCalledWith(mockOutput, [ 202 | { name: 'conclusion', value: 'failure' }, 203 | ]); 204 | }); 205 | 206 | it('should get payload 4', async() => { 207 | const mockStdout = spyOnStdout(); 208 | const mockEnv = spyOnExportVariable(); 209 | const mockOutput = spyOnSetOutput(); 210 | nock('https://api.github.com') 211 | .persist() 212 | .get('/repos/hello/world/actions/runs/123/jobs') 213 | .reply(200, () => getApiFixture(fixtureRootDir, 'actions.list.jobs4')); 214 | 215 | await execute(logger, octokit, context); 216 | 217 | stdoutContains(mockStdout, [ 218 | '::group::Jobs:', 219 | '::group::Conclusions:', 220 | getLogStdout(['skipped']), 221 | '::group::Conclusion:', 222 | '"skipped"', 223 | ]); 224 | exportVariableCalledWith(mockEnv, [ 225 | { name: 'WORKFLOW_CONCLUSION', val: 'skipped' }, 226 | ]); 227 | setOutputCalledWith(mockOutput, [ 228 | { name: 'conclusion', value: 'skipped' }, 229 | ]); 230 | }); 231 | 232 | it('should get payload without env', async() => { 233 | process.env.INPUT_SET_ENV_NAME = ''; 234 | const mockStdout = spyOnStdout(); 235 | const mockOutput = spyOnSetOutput(); 236 | nock('https://api.github.com') 237 | .persist() 238 | .get('/repos/hello/world/actions/runs/123/jobs') 239 | .reply(200, () => getApiFixture(fixtureRootDir, 'actions.list.jobs1')); 240 | 241 | await execute(logger, octokit, context); 242 | 243 | stdoutContains(mockStdout, [ 244 | '::group::Jobs:', 245 | '::group::Conclusions:', 246 | getLogStdout(['skipped', 'success']), 247 | '::group::Conclusion:', 248 | '"success"', 249 | ]); 250 | setOutputCalledWith(mockOutput, [ 251 | { name: 'conclusion', value: 'success' }, 252 | ]); 253 | }); 254 | }); 255 | -------------------------------------------------------------------------------- /src/process.ts: -------------------------------------------------------------------------------- 1 | import type { Context } from '@actions/github/lib/context'; 2 | import type { components } from '@octokit/openapi-types'; 3 | import type { Octokit } from '@technote-space/github-action-helper/dist/types'; 4 | import type { Logger } from '@technote-space/github-action-log-helper'; 5 | import { setOutput, exportVariable, getInput } from '@actions/core'; 6 | import { Utils } from '@technote-space/github-action-helper'; 7 | import { CONCLUSIONS } from './constant'; 8 | 9 | type ActionsListJobsForWorkflowRunResponseData = components['schemas']['job']; 10 | 11 | export const getTargetRunId = (context: Context): number => /^\d+$/.test(getInput('TARGET_RUN_ID')) ? Number(getInput('TARGET_RUN_ID')) : context.runId; 12 | 13 | export const getJobs = async(octokit: Octokit, context: Context): Promise> => octokit.paginate( 14 | octokit.rest.actions.listJobsForWorkflowRun, 15 | { 16 | ...context.repo, 17 | 'run_id': getTargetRunId(context), 18 | }, 19 | ); 20 | 21 | export const getJobConclusions = (jobs: Array<{ conclusion: string | null }>): Array => Utils.uniqueArray( 22 | jobs 23 | .filter((job): job is { conclusion: string } => null !== job.conclusion) 24 | .map(job => job.conclusion), 25 | ); 26 | 27 | export const getWorkflowConclusion = (conclusions: Array): string => 28 | !conclusions.length ? getInput('FALLBACK_CONCLUSION') : 29 | Utils.getBoolValue(getInput('STRICT_SUCCESS')) ? 30 | conclusions.some(conclusion => conclusion !== 'success') ? 'failure' : 'success' : 31 | CONCLUSIONS.filter(conclusion => conclusions.includes(conclusion)).slice(-1)[0] ?? getInput('FALLBACK_CONCLUSION'); 32 | 33 | export const execute = async(logger: Logger, octokit: Octokit, context: Context): Promise => { 34 | const jobs = await getJobs(octokit, context); 35 | const conclusions = getJobConclusions(jobs); 36 | const conclusion = getWorkflowConclusion(conclusions); 37 | 38 | logger.startProcess('Jobs: '); 39 | console.log(jobs); 40 | 41 | logger.startProcess('Conclusions: '); 42 | console.log(conclusions); 43 | 44 | logger.startProcess('Conclusion: '); 45 | console.log(conclusion); 46 | 47 | setOutput('conclusion', conclusion); 48 | const envName = getInput('SET_ENV_NAME'); 49 | if (envName) { 50 | exportVariable(envName, conclusion); 51 | } 52 | }; 53 | -------------------------------------------------------------------------------- /src/setup.ts: -------------------------------------------------------------------------------- 1 | import { setupGlobal } from '@technote-space/github-action-test-helper'; 2 | 3 | setupGlobal(); 4 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@sindresorhus/tsconfig", 3 | "compilerOptions": { 4 | "outDir": "dist", 5 | "target": "ES2021", 6 | "module": "ES2020", 7 | "lib": [ 8 | "ES2021" 9 | ], 10 | "moduleResolution": "node", 11 | "noPropertyAccessFromIndexSignature": false, 12 | "noImplicitAny": false 13 | }, 14 | "include": [ 15 | "src" 16 | ] 17 | } -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | /// 2 | import { defineConfig } from 'vite'; 3 | 4 | // https://vitejs.dev/config/ 5 | export default defineConfig({ 6 | test: { 7 | setupFiles: './src/setup.ts', 8 | clearMocks: true, 9 | mockReset: true, 10 | restoreMocks: true, 11 | coverage: { 12 | reporter: ['html', 'lcov', 'text'], 13 | }, 14 | deps: { 15 | inline: [/github-action-test-helper/] 16 | }, 17 | }, 18 | }); 19 | --------------------------------------------------------------------------------