├── .eslintignore ├── .eslintrc.json ├── .gitattributes ├── .github ├── dependabot.yml └── workflows │ └── test.yml ├── .gitignore ├── .prettierignore ├── .prettierrc.json ├── CODEOWNERS ├── LICENSE ├── README.md ├── TestResultsMac.xcresult ├── Data │ ├── data.0~5FadZZXlYvj0VjInKZsTvlxFgyaSGSt5DyEipT3O_bRJc7tGa6slaHsZnCk1OEjc1TxUqIie9bIOHbSh-kM9jg== │ ├── data.0~5wEQVivJxSGk8aKypN_KpFjUOf5xubt46N6o6vbavZHW_1-JFihdwgigyOPvXdaT6xLZmGwBk6bnWarEtOcP0A== │ ├── data.0~ASKYyzT7GPXXLhCaIokwKqk-MHHZkMDz3OSrvkU97QP6eZwnSSZ-7jubpgOj-R-JIJIQyO_Zqdb-RLc9SLUwTQ== │ ├── data.0~O6d93Q9sUQJo1Ar44kA3MEd2rQaqAygT2O72wJa9STTIxpgk_251rmRGR5oQDaE8AGC3SPGkn73oXaB4l6OzcA== │ ├── data.0~OBOV7ByfZDl25mb1_0ZXS_IfOfJ6BT-NISgo-JvdhLhBWPHrYjYtKJt5GjdbkcuGjGuMMrTJ27wooXl9t9G4uA== │ ├── data.0~Ox3_UjznDxrWtgUYN4tf2WW0hlsC1_MEt3mxhze6RPRHLZIgU6VJBx7nral9cbKkWWzdpGBPKMKX4rnmF79k0Q== │ ├── data.0~WecU85Wj8Q8htKqPht0GFAIFI4RKBd6Hw7rPlPtuZRAgOy-ia-a5pBM-hrUZ1ymRRZlQ2sIUKvY6KvH8TDEGyw== │ ├── data.0~WerDoZ54B3g7-gQvVwhzdK7WtZAFwj3AEogPjFd8lJnIoW8e6ZkUhxz-FYOAhv0N8ZRK9Q5VFcV3J7jDc4vg1Q== │ ├── data.0~ZiD-VCMJigvvknjtlVLsqlu1VFc6L2V4hwS_zJ2-eXm2IEwUu9oJ1WQV4vaBY9WiVlgHkEhuEveJ60jqcwlwmw== │ ├── data.0~b4sjr-Aj3F2wX_2CrzPDw1OwfvwhAhFvc3kNFRsIJ7om8U9CKeWOlmxGfIxqksu4P87uR_29cHZW9_wXo6VlPA== │ ├── data.0~bwrQIYfFQ8wR5dmJP61W1XinuvmQPJr_sFH3pNDNe8A7A1waEJRPxJ8jsM15fDm-BMbMElkpwX0Cva6vdY8GYg== │ ├── data.0~cS2eiVQlJhPHruy_0KIczzcM7OUKi1wQsbiRWaMtRMGu2lGEs1FBjunuH7vHgBj5d7tHqwaSmldz-8YIywrE6g== │ ├── data.0~kPhNNKpH9EbihyPpup3po_S2O64OG3GnNMGhDx3wdCOwjq1NSiQHpWgofQjrV7n2ipKUILaAD3lg2Wz7xE1vfw== │ ├── data.0~qKNmO0Qh3yKHdWnDn6tIP15U3zvHMCvSzNL6ACKUUxIyQtrCaitTePTnx2dSb5zGJhp3CsNuYQTbp65m_dFFVg== │ ├── data.0~wNyADXK01DXmIxM2-JoBXpA2StKv0Ro8IA8g4esyzxragsUtUWjol_nx7dw_Dn24O0mkJb-zAoEmJTuEKfxy3g== │ ├── refs.0~5FadZZXlYvj0VjInKZsTvlxFgyaSGSt5DyEipT3O_bRJc7tGa6slaHsZnCk1OEjc1TxUqIie9bIOHbSh-kM9jg== │ ├── refs.0~5wEQVivJxSGk8aKypN_KpFjUOf5xubt46N6o6vbavZHW_1-JFihdwgigyOPvXdaT6xLZmGwBk6bnWarEtOcP0A== │ ├── refs.0~ASKYyzT7GPXXLhCaIokwKqk-MHHZkMDz3OSrvkU97QP6eZwnSSZ-7jubpgOj-R-JIJIQyO_Zqdb-RLc9SLUwTQ== │ ├── refs.0~O6d93Q9sUQJo1Ar44kA3MEd2rQaqAygT2O72wJa9STTIxpgk_251rmRGR5oQDaE8AGC3SPGkn73oXaB4l6OzcA== │ ├── refs.0~OBOV7ByfZDl25mb1_0ZXS_IfOfJ6BT-NISgo-JvdhLhBWPHrYjYtKJt5GjdbkcuGjGuMMrTJ27wooXl9t9G4uA== │ ├── refs.0~Ox3_UjznDxrWtgUYN4tf2WW0hlsC1_MEt3mxhze6RPRHLZIgU6VJBx7nral9cbKkWWzdpGBPKMKX4rnmF79k0Q== │ ├── refs.0~WecU85Wj8Q8htKqPht0GFAIFI4RKBd6Hw7rPlPtuZRAgOy-ia-a5pBM-hrUZ1ymRRZlQ2sIUKvY6KvH8TDEGyw== │ ├── refs.0~WerDoZ54B3g7-gQvVwhzdK7WtZAFwj3AEogPjFd8lJnIoW8e6ZkUhxz-FYOAhv0N8ZRK9Q5VFcV3J7jDc4vg1Q== │ ├── refs.0~ZiD-VCMJigvvknjtlVLsqlu1VFc6L2V4hwS_zJ2-eXm2IEwUu9oJ1WQV4vaBY9WiVlgHkEhuEveJ60jqcwlwmw== │ ├── refs.0~b4sjr-Aj3F2wX_2CrzPDw1OwfvwhAhFvc3kNFRsIJ7om8U9CKeWOlmxGfIxqksu4P87uR_29cHZW9_wXo6VlPA== │ ├── refs.0~bwrQIYfFQ8wR5dmJP61W1XinuvmQPJr_sFH3pNDNe8A7A1waEJRPxJ8jsM15fDm-BMbMElkpwX0Cva6vdY8GYg== │ ├── refs.0~cS2eiVQlJhPHruy_0KIczzcM7OUKi1wQsbiRWaMtRMGu2lGEs1FBjunuH7vHgBj5d7tHqwaSmldz-8YIywrE6g== │ ├── refs.0~kPhNNKpH9EbihyPpup3po_S2O64OG3GnNMGhDx3wdCOwjq1NSiQHpWgofQjrV7n2ipKUILaAD3lg2Wz7xE1vfw== │ ├── refs.0~qKNmO0Qh3yKHdWnDn6tIP15U3zvHMCvSzNL6ACKUUxIyQtrCaitTePTnx2dSb5zGJhp3CsNuYQTbp65m_dFFVg== │ └── refs.0~wNyADXK01DXmIxM2-JoBXpA2StKv0Ro8IA8g4esyzxragsUtUWjol_nx7dw_Dn24O0mkJb-zAoEmJTuEKfxy3g== └── Info.plist ├── TestResultsMacFailed.xcresult ├── Data │ ├── data.0~8V5x2T22G246TQGoQzr6XPAhD_cQrz4PgEju0k5rcMnQOohFm9JUcsZLyWa8atV56P4tFBDYvjJ0xh33XXN_tw== │ ├── data.0~9T2Rvtub3mfr-IVWLUuysUTxh7uV9K6TRyOiuq3tx55FCOCoCC3jiGZrkHYJH8Rx6eRlIp1-t06-I6uV9PG_uQ== │ ├── data.0~CiZ07rBANmrXZhkbjvjDRm9gngGMSs5AObBsyB3Ai3IrCZGJJenJDp_cN7lsYvsX0LtVqlPkUQYARAE6l2Ar8w== │ ├── data.0~DNkZJhdjwkEmJmPDaSzRUpBPFKh9U7jCjVB2hkGpVMb7ZBUZX_GneHHf84BgN6Q9SuT9qA1CiG_fWGOLS08QJQ== │ ├── data.0~E8TlLEbH8hLVxwDMWLtMHmDmjTs1q7zbRaL2W8FH2PTO3GnZ37YyH74wMSZK-rQvbvGrNYOUQ5oZJeA5Pj9qFg== │ ├── data.0~GBfVa9AsAEHzJ4rsSbIrrVErKeyln_KFeGPbUTJLLxIdchp2ZtIhpOyGZumkXBbU1flwsPIKvpvVu7g1ihxnVQ== │ ├── data.0~Qp1CZwQZtFj1-sHvkbB8q3qgzSQouPSnAqaB-T4r_rFGYy-RMtL3dRbrmMFUr104OucQlJIcz7FQhs6tPS9y4g== │ ├── data.0~XqEMT-Nw3AWqcPlB--wO0WbvT2uMRsa6VxHvVbJn5M77fNBPe5pUO-kEL1fLCRCI90gOh0w9skik9xvF1A9TKg== │ ├── data.0~ZngO-MliWNPydegtJbBytcQpG3EneP6IoWlbm1RyaEa_iDzDpnGr6vIldFJKNW4kn5mg-OLhfSGVWPOuYdgkVQ== │ ├── data.0~_0QWMWZHLIObYOnvW0ieWZbO8FkkFDG3UWcOUozLkuP4eE5PrM01NvqGjeZ0fBhBrnfldDrxMmyExNVBqIEFiA== │ ├── data.0~eHoCcEJ-3vS4aSZcR2JteDgYhkbNhv1FALatU4O8cdM5f6nw6wyibVVtD7ZHCjwgYSbea-8PNjJRK77BKmls1w== │ ├── data.0~kjTJkTlV4KhJqiNlpPluQ6SFHQGSW4Bco244E7kyFmjBRrsKfbTCYNzhA0s5SmUUf-F_RbIa7h7TzFqtn8Vp8w== │ ├── data.0~mhED0yHxUiBQS__dUS2ReveDZe5wEOR3I5acQnunm4u4Ajca0ooZqdSVSwimgaTjzQ8r8pnkKdUqlEZGEJDpDA== │ ├── data.0~qLkdI9vFdGKParNPGgKNee59voBx8hk25QWWgzr2-rhxQ7nWPryD1T87mxoybB0i1L_embEVQWXcBiGsAyTkWg== │ ├── data.0~upEExljiW_I5b_v5VOHtQADfeizE3jnd2xYKwqsLhCMMX-yAMG3tYHiVv55MAkHQUSwhXERs_H4Uv3XreW9Y8Q== │ ├── data.0~v9TsE5AEf5oZO_mS-NvvjEYJIQFnvumP-cbLz0wo-cc5yFCSGjfjDRuoYn0wjagvlXjEEpERSAKOOfEToU8cHQ== │ ├── refs.0~8V5x2T22G246TQGoQzr6XPAhD_cQrz4PgEju0k5rcMnQOohFm9JUcsZLyWa8atV56P4tFBDYvjJ0xh33XXN_tw== │ ├── refs.0~9T2Rvtub3mfr-IVWLUuysUTxh7uV9K6TRyOiuq3tx55FCOCoCC3jiGZrkHYJH8Rx6eRlIp1-t06-I6uV9PG_uQ== │ ├── refs.0~CiZ07rBANmrXZhkbjvjDRm9gngGMSs5AObBsyB3Ai3IrCZGJJenJDp_cN7lsYvsX0LtVqlPkUQYARAE6l2Ar8w== │ ├── refs.0~DNkZJhdjwkEmJmPDaSzRUpBPFKh9U7jCjVB2hkGpVMb7ZBUZX_GneHHf84BgN6Q9SuT9qA1CiG_fWGOLS08QJQ== │ ├── refs.0~E8TlLEbH8hLVxwDMWLtMHmDmjTs1q7zbRaL2W8FH2PTO3GnZ37YyH74wMSZK-rQvbvGrNYOUQ5oZJeA5Pj9qFg== │ ├── refs.0~GBfVa9AsAEHzJ4rsSbIrrVErKeyln_KFeGPbUTJLLxIdchp2ZtIhpOyGZumkXBbU1flwsPIKvpvVu7g1ihxnVQ== │ ├── refs.0~Qp1CZwQZtFj1-sHvkbB8q3qgzSQouPSnAqaB-T4r_rFGYy-RMtL3dRbrmMFUr104OucQlJIcz7FQhs6tPS9y4g== │ ├── refs.0~XqEMT-Nw3AWqcPlB--wO0WbvT2uMRsa6VxHvVbJn5M77fNBPe5pUO-kEL1fLCRCI90gOh0w9skik9xvF1A9TKg== │ ├── refs.0~ZngO-MliWNPydegtJbBytcQpG3EneP6IoWlbm1RyaEa_iDzDpnGr6vIldFJKNW4kn5mg-OLhfSGVWPOuYdgkVQ== │ ├── refs.0~_0QWMWZHLIObYOnvW0ieWZbO8FkkFDG3UWcOUozLkuP4eE5PrM01NvqGjeZ0fBhBrnfldDrxMmyExNVBqIEFiA== │ ├── refs.0~eHoCcEJ-3vS4aSZcR2JteDgYhkbNhv1FALatU4O8cdM5f6nw6wyibVVtD7ZHCjwgYSbea-8PNjJRK77BKmls1w== │ ├── refs.0~kjTJkTlV4KhJqiNlpPluQ6SFHQGSW4Bco244E7kyFmjBRrsKfbTCYNzhA0s5SmUUf-F_RbIa7h7TzFqtn8Vp8w== │ ├── refs.0~mhED0yHxUiBQS__dUS2ReveDZe5wEOR3I5acQnunm4u4Ajca0ooZqdSVSwimgaTjzQ8r8pnkKdUqlEZGEJDpDA== │ ├── refs.0~qLkdI9vFdGKParNPGgKNee59voBx8hk25QWWgzr2-rhxQ7nWPryD1T87mxoybB0i1L_embEVQWXcBiGsAyTkWg== │ ├── refs.0~upEExljiW_I5b_v5VOHtQADfeizE3jnd2xYKwqsLhCMMX-yAMG3tYHiVv55MAkHQUSwhXERs_H4Uv3XreW9Y8Q== │ └── refs.0~v9TsE5AEf5oZO_mS-NvvjEYJIQFnvumP-cbLz0wo-cc5yFCSGjfjDRuoYn0wjagvlXjEEpERSAKOOfEToU8cHQ== └── Info.plist ├── __tests__ └── main.test.ts ├── action.yml ├── dist ├── index.js ├── index.js.map ├── licenses.txt └── sourcemap-register.js ├── jest.config.js ├── package-lock.json ├── package.json ├── src ├── main.ts └── xcresulttool.ts └── tsconfig.json /.eslintignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | lib/ 3 | node_modules/ 4 | jest.config.js 5 | -------------------------------------------------------------------------------- /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "plugins": ["jest", "@typescript-eslint"], 3 | "extends": ["plugin:github/recommended"], 4 | "parser": "@typescript-eslint/parser", 5 | "parserOptions": { 6 | "ecmaVersion": 9, 7 | "sourceType": "module", 8 | "project": "./tsconfig.json" 9 | }, 10 | "rules": { 11 | "eslint-comments/no-use": "off", 12 | "import/no-namespace": "off", 13 | "no-unused-vars": "off", 14 | "@typescript-eslint/no-unused-vars": "error", 15 | "@typescript-eslint/explicit-member-accessibility": ["error", {"accessibility": "no-public"}], 16 | "@typescript-eslint/no-require-imports": "error", 17 | "@typescript-eslint/array-type": "error", 18 | "@typescript-eslint/await-thenable": "error", 19 | "@typescript-eslint/ban-ts-comment": "error", 20 | "camelcase": "off", 21 | "@typescript-eslint/consistent-type-assertions": "error", 22 | "@typescript-eslint/explicit-function-return-type": ["error", {"allowExpressions": true}], 23 | "@typescript-eslint/func-call-spacing": ["error", "never"], 24 | "@typescript-eslint/no-array-constructor": "error", 25 | "@typescript-eslint/no-empty-interface": "error", 26 | "@typescript-eslint/no-explicit-any": "error", 27 | "@typescript-eslint/no-extraneous-class": "error", 28 | "@typescript-eslint/no-for-in-array": "error", 29 | "@typescript-eslint/no-inferrable-types": "error", 30 | "@typescript-eslint/no-misused-new": "error", 31 | "@typescript-eslint/no-namespace": "error", 32 | "@typescript-eslint/no-non-null-assertion": "warn", 33 | "@typescript-eslint/no-unnecessary-qualifier": "error", 34 | "@typescript-eslint/no-unnecessary-type-assertion": "error", 35 | "@typescript-eslint/no-useless-constructor": "error", 36 | "@typescript-eslint/no-var-requires": "error", 37 | "@typescript-eslint/prefer-for-of": "warn", 38 | "@typescript-eslint/prefer-function-type": "warn", 39 | "@typescript-eslint/prefer-includes": "error", 40 | "@typescript-eslint/prefer-string-starts-ends-with": "error", 41 | "@typescript-eslint/promise-function-async": "error", 42 | "@typescript-eslint/require-array-sort-compare": "error", 43 | "@typescript-eslint/restrict-plus-operands": "error", 44 | "semi": "off", 45 | "@typescript-eslint/semi": ["error", "never"], 46 | "@typescript-eslint/type-annotation-spacing": "error", 47 | "@typescript-eslint/unbound-method": "error" 48 | }, 49 | "env": { 50 | "node": true, 51 | "es6": true, 52 | "jest/globals": true 53 | } 54 | } -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | dist/** -diff linguist-generated=true -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | # Enable version updates for npm 4 | - package-ecosystem: 'npm' 5 | # Look for `package.json` and `lock` files in the `root` directory 6 | directory: '/' 7 | # Check the npm registry for updates every day (weekdays) 8 | schedule: 9 | interval: 'daily' 10 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: 'build-test' 2 | on: # rebuild any PRs and main branch changes 3 | pull_request: 4 | push: 5 | branches: 6 | - main 7 | - 'releases/*' 8 | 9 | jobs: 10 | build: # make sure build/ci work properly 11 | runs-on: macos-latest 12 | steps: 13 | - uses: actions/checkout@v2 14 | - run: | 15 | npm install 16 | - run: | 17 | npm run all 18 | test: # make sure the action works on a clean machine without building 19 | runs-on: macos-latest 20 | steps: 21 | - uses: actions/checkout@v2 22 | - uses: ./ 23 | with: 24 | results: TestResultsMac.xcresult 25 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 26 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependency directory 2 | node_modules 3 | 4 | # Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore 5 | # Logs 6 | logs 7 | *.log 8 | npm-debug.log* 9 | yarn-debug.log* 10 | yarn-error.log* 11 | lerna-debug.log* 12 | 13 | # Diagnostic reports (https://nodejs.org/api/report.html) 14 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 15 | 16 | # Runtime data 17 | pids 18 | *.pid 19 | *.seed 20 | *.pid.lock 21 | 22 | # Directory for instrumented libs generated by jscoverage/JSCover 23 | lib-cov 24 | 25 | # Coverage directory used by tools like istanbul 26 | coverage 27 | *.lcov 28 | 29 | # nyc test coverage 30 | .nyc_output 31 | 32 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) 33 | .grunt 34 | 35 | # Bower dependency directory (https://bower.io/) 36 | bower_components 37 | 38 | # node-waf configuration 39 | .lock-wscript 40 | 41 | # Compiled binary addons (https://nodejs.org/api/addons.html) 42 | build/Release 43 | 44 | # Dependency directories 45 | jspm_packages/ 46 | 47 | # TypeScript v1 declaration files 48 | typings/ 49 | 50 | # TypeScript cache 51 | *.tsbuildinfo 52 | 53 | # Optional npm cache directory 54 | .npm 55 | 56 | # Optional eslint cache 57 | .eslintcache 58 | 59 | # Optional REPL history 60 | .node_repl_history 61 | 62 | # Output of 'npm pack' 63 | *.tgz 64 | 65 | # Yarn Integrity file 66 | .yarn-integrity 67 | 68 | # dotenv environment variables file 69 | .env 70 | .env.test 71 | 72 | # parcel-bundler cache (https://parceljs.org/) 73 | .cache 74 | 75 | # next.js build output 76 | .next 77 | 78 | # nuxt.js build output 79 | .nuxt 80 | 81 | # vuepress build output 82 | .vuepress/dist 83 | 84 | # Serverless directories 85 | .serverless/ 86 | 87 | # FuseBox cache 88 | .fusebox/ 89 | 90 | # DynamoDB Local files 91 | .dynamodb/ 92 | 93 | # OS metadata 94 | .DS_Store 95 | Thumbs.db 96 | 97 | # Ignore built ts files 98 | __tests__/runner/* 99 | lib/**/* -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | lib/ 3 | node_modules/ -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 80, 3 | "tabWidth": 2, 4 | "useTabs": false, 5 | "semi": false, 6 | "singleQuote": true, 7 | "trailingComma": "none", 8 | "bracketSpacing": false, 9 | "arrowParens": "avoid" 10 | } 11 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @actions/actions-runtime 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | 2 | The MIT License (MIT) 3 | 4 | Copyright (c) 2018 GitHub, Inc. and contributors 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in 14 | all copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 22 | THE SOFTWARE. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Analyze Xcode Build and Test Results 2 | 3 | This action adds GitHub checks for XCode results. 4 | 5 | ## Usage 6 | 7 | ### Pre-Requisites 8 | 9 | This action only works on macOS builders. 10 | 11 | By default `xcodebuild` only writes information to stdout, to use this action `xcodebuild` 12 | needs to generate `xcresult` bundle while building and testing. 13 | 14 | This can be done using the `-resultBundlePath` flag in XCode build. 15 | 16 | The following action uses a script action to invoke xcodebuild and store the results 17 | in `TestResults.xcresult` 18 | 19 | ```yaml 20 | - name: Run Tests 21 | run: | 22 | xcodebuild -scheme "MyFramework" -resultBundlePath TestResults test 23 | ``` 24 | 25 | ### Configuration 26 | | Option | Required | Default | Description | 27 | |:-------------|:---------|:--------|:------------| 28 | | `results` | Yes | | Path to the `.xcresult` bundle | 29 | | `GITHUB_TOKEN` | Yes | | GitHub token to create the GitHub check objects. ` ${{ secrets.GITHUB_TOKEN }}` is recommended | 30 | | `pathPrefix` | No | Path to the GitHub Workspace | Paths inside the xcode result build are absolute. For GitHub to find the corresponding file for annotations the paths need to be relative to the build directory. If your checkout is not into the GitHub workspace, this option can be used to configure a different prefix. | 31 | | `title` | No | Test Results | Title to show up as the check name | 32 | | `testSummaryTable` | No | `true` | Setting if a table with the test results should be included | 33 | | `testFailureAnnotations` | No | `true` | Setting if GitHub code annotations should be added in the check results | 34 | | `summary` | No | `true` | Setting if a summary section, with the number of warnings and test failures should be included | 35 | | `warningAnnotations` | No | `false` | Setting if warnings should be added as GitHub annotations| 36 | 37 | 38 | ### Example 39 | 40 | The following example builds and tests the "My Framework" scheme and analyzes the results. 41 | 42 | The result of this can be seen in this [test run](https://github.com/tbartelmess/action-test/pull/1/checks?check_run_id=2197833878) 43 | 44 | ```yaml 45 | --- 46 | name: Run Tests 47 | on: 48 | pull_request 49 | 50 | jobs: 51 | tests: 52 | name: Run Tests 53 | runs-on: macos-latest 54 | steps: 55 | - uses: actions/checkout@v2 56 | with: 57 | fetch-depth: 0 58 | - name: Setup Certificates 59 | uses: apple-actions/import-codesign-certs@v1 60 | with: 61 | p12-file-base64: ${{ secrets.CERTIFICATES_P12 }} 62 | p12-password: ${{ secrets.CERTIFICATES_P12_PASSWORD }} 63 | - name: Run Tests 64 | run: | 65 | xcodebuild -scheme "MyFramework" -resultBundlePath TestResults test 66 | - uses: tbartelmess/analyze-xcoderesults-action@0.1.0 67 | if: always() 68 | with: 69 | results: TestResults.xcresult 70 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 71 | ``` 72 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~5FadZZXlYvj0VjInKZsTvlxFgyaSGSt5DyEipT3O_bRJc7tGa6slaHsZnCk1OEjc1TxUqIie9bIOHbSh-kM9jg==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~5FadZZXlYvj0VjInKZsTvlxFgyaSGSt5DyEipT3O_bRJc7tGa6slaHsZnCk1OEjc1TxUqIie9bIOHbSh-kM9jg== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~5wEQVivJxSGk8aKypN_KpFjUOf5xubt46N6o6vbavZHW_1-JFihdwgigyOPvXdaT6xLZmGwBk6bnWarEtOcP0A==: -------------------------------------------------------------------------------- 1 | [{"name":"testmanagerd.log","type":1}] -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~ASKYyzT7GPXXLhCaIokwKqk-MHHZkMDz3OSrvkU97QP6eZwnSSZ-7jubpgOj-R-JIJIQyO_Zqdb-RLc9SLUwTQ==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~ASKYyzT7GPXXLhCaIokwKqk-MHHZkMDz3OSrvkU97QP6eZwnSSZ-7jubpgOj-R-JIJIQyO_Zqdb-RLc9SLUwTQ== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~O6d93Q9sUQJo1Ar44kA3MEd2rQaqAygT2O72wJa9STTIxpgk_251rmRGR5oQDaE8AGC3SPGkn73oXaB4l6OzcA==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~O6d93Q9sUQJo1Ar44kA3MEd2rQaqAygT2O72wJa9STTIxpgk_251rmRGR5oQDaE8AGC3SPGkn73oXaB4l6OzcA== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~OBOV7ByfZDl25mb1_0ZXS_IfOfJ6BT-NISgo-JvdhLhBWPHrYjYtKJt5GjdbkcuGjGuMMrTJ27wooXl9t9G4uA==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~OBOV7ByfZDl25mb1_0ZXS_IfOfJ6BT-NISgo-JvdhLhBWPHrYjYtKJt5GjdbkcuGjGuMMrTJ27wooXl9t9G4uA== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~Ox3_UjznDxrWtgUYN4tf2WW0hlsC1_MEt3mxhze6RPRHLZIgU6VJBx7nral9cbKkWWzdpGBPKMKX4rnmF79k0Q==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~Ox3_UjznDxrWtgUYN4tf2WW0hlsC1_MEt3mxhze6RPRHLZIgU6VJBx7nral9cbKkWWzdpGBPKMKX4rnmF79k0Q== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~WecU85Wj8Q8htKqPht0GFAIFI4RKBd6Hw7rPlPtuZRAgOy-ia-a5pBM-hrUZ1ymRRZlQ2sIUKvY6KvH8TDEGyw==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~WecU85Wj8Q8htKqPht0GFAIFI4RKBd6Hw7rPlPtuZRAgOy-ia-a5pBM-hrUZ1ymRRZlQ2sIUKvY6KvH8TDEGyw== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~WerDoZ54B3g7-gQvVwhzdK7WtZAFwj3AEogPjFd8lJnIoW8e6ZkUhxz-FYOAhv0N8ZRK9Q5VFcV3J7jDc4vg1Q==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~WerDoZ54B3g7-gQvVwhzdK7WtZAFwj3AEogPjFd8lJnIoW8e6ZkUhxz-FYOAhv0N8ZRK9Q5VFcV3J7jDc4vg1Q== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~ZiD-VCMJigvvknjtlVLsqlu1VFc6L2V4hwS_zJ2-eXm2IEwUu9oJ1WQV4vaBY9WiVlgHkEhuEveJ60jqcwlwmw==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~ZiD-VCMJigvvknjtlVLsqlu1VFc6L2V4hwS_zJ2-eXm2IEwUu9oJ1WQV4vaBY9WiVlgHkEhuEveJ60jqcwlwmw== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~b4sjr-Aj3F2wX_2CrzPDw1OwfvwhAhFvc3kNFRsIJ7om8U9CKeWOlmxGfIxqksu4P87uR_29cHZW9_wXo6VlPA==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~b4sjr-Aj3F2wX_2CrzPDw1OwfvwhAhFvc3kNFRsIJ7om8U9CKeWOlmxGfIxqksu4P87uR_29cHZW9_wXo6VlPA== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~bwrQIYfFQ8wR5dmJP61W1XinuvmQPJr_sFH3pNDNe8A7A1waEJRPxJ8jsM15fDm-BMbMElkpwX0Cva6vdY8GYg==: -------------------------------------------------------------------------------- 1 | [{"name":"MyFrameworkTests-C5FE3D77-A21B-46C6-A994-771A467CAE0E","type":2},{"name":"scheduling.log","type":1}] -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~cS2eiVQlJhPHruy_0KIczzcM7OUKi1wQsbiRWaMtRMGu2lGEs1FBjunuH7vHgBj5d7tHqwaSmldz-8YIywrE6g==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~cS2eiVQlJhPHruy_0KIczzcM7OUKi1wQsbiRWaMtRMGu2lGEs1FBjunuH7vHgBj5d7tHqwaSmldz-8YIywrE6g== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~kPhNNKpH9EbihyPpup3po_S2O64OG3GnNMGhDx3wdCOwjq1NSiQHpWgofQjrV7n2ipKUILaAD3lg2Wz7xE1vfw==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~kPhNNKpH9EbihyPpup3po_S2O64OG3GnNMGhDx3wdCOwjq1NSiQHpWgofQjrV7n2ipKUILaAD3lg2Wz7xE1vfw== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~qKNmO0Qh3yKHdWnDn6tIP15U3zvHMCvSzNL6ACKUUxIyQtrCaitTePTnx2dSb5zGJhp3CsNuYQTbp65m_dFFVg==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~qKNmO0Qh3yKHdWnDn6tIP15U3zvHMCvSzNL6ACKUUxIyQtrCaitTePTnx2dSb5zGJhp3CsNuYQTbp65m_dFFVg== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/data.0~wNyADXK01DXmIxM2-JoBXpA2StKv0Ro8IA8g4esyzxragsUtUWjol_nx7dw_Dn24O0mkJb-zAoEmJTuEKfxy3g==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/data.0~wNyADXK01DXmIxM2-JoBXpA2StKv0Ro8IA8g4esyzxragsUtUWjol_nx7dw_Dn24O0mkJb-zAoEmJTuEKfxy3g== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~5FadZZXlYvj0VjInKZsTvlxFgyaSGSt5DyEipT3O_bRJc7tGa6slaHsZnCk1OEjc1TxUqIie9bIOHbSh-kM9jg==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~5wEQVivJxSGk8aKypN_KpFjUOf5xubt46N6o6vbavZHW_1-JFihdwgigyOPvXdaT6xLZmGwBk6bnWarEtOcP0A==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/refs.0~5wEQVivJxSGk8aKypN_KpFjUOf5xubt46N6o6vbavZHW_1-JFihdwgigyOPvXdaT6xLZmGwBk6bnWarEtOcP0A== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~ASKYyzT7GPXXLhCaIokwKqk-MHHZkMDz3OSrvkU97QP6eZwnSSZ-7jubpgOj-R-JIJIQyO_Zqdb-RLc9SLUwTQ==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~O6d93Q9sUQJo1Ar44kA3MEd2rQaqAygT2O72wJa9STTIxpgk_251rmRGR5oQDaE8AGC3SPGkn73oXaB4l6OzcA==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/refs.0~O6d93Q9sUQJo1Ar44kA3MEd2rQaqAygT2O72wJa9STTIxpgk_251rmRGR5oQDaE8AGC3SPGkn73oXaB4l6OzcA== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~OBOV7ByfZDl25mb1_0ZXS_IfOfJ6BT-NISgo-JvdhLhBWPHrYjYtKJt5GjdbkcuGjGuMMrTJ27wooXl9t9G4uA==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~Ox3_UjznDxrWtgUYN4tf2WW0hlsC1_MEt3mxhze6RPRHLZIgU6VJBx7nral9cbKkWWzdpGBPKMKX4rnmF79k0Q==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~WecU85Wj8Q8htKqPht0GFAIFI4RKBd6Hw7rPlPtuZRAgOy-ia-a5pBM-hrUZ1ymRRZlQ2sIUKvY6KvH8TDEGyw==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~WerDoZ54B3g7-gQvVwhzdK7WtZAFwj3AEogPjFd8lJnIoW8e6ZkUhxz-FYOAhv0N8ZRK9Q5VFcV3J7jDc4vg1Q==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~ZiD-VCMJigvvknjtlVLsqlu1VFc6L2V4hwS_zJ2-eXm2IEwUu9oJ1WQV4vaBY9WiVlgHkEhuEveJ60jqcwlwmw==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~b4sjr-Aj3F2wX_2CrzPDw1OwfvwhAhFvc3kNFRsIJ7om8U9CKeWOlmxGfIxqksu4P87uR_29cHZW9_wXo6VlPA==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/refs.0~b4sjr-Aj3F2wX_2CrzPDw1OwfvwhAhFvc3kNFRsIJ7om8U9CKeWOlmxGfIxqksu4P87uR_29cHZW9_wXo6VlPA== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~bwrQIYfFQ8wR5dmJP61W1XinuvmQPJr_sFH3pNDNe8A7A1waEJRPxJ8jsM15fDm-BMbMElkpwX0Cva6vdY8GYg==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/refs.0~bwrQIYfFQ8wR5dmJP61W1XinuvmQPJr_sFH3pNDNe8A7A1waEJRPxJ8jsM15fDm-BMbMElkpwX0Cva6vdY8GYg== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~cS2eiVQlJhPHruy_0KIczzcM7OUKi1wQsbiRWaMtRMGu2lGEs1FBjunuH7vHgBj5d7tHqwaSmldz-8YIywrE6g==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/refs.0~cS2eiVQlJhPHruy_0KIczzcM7OUKi1wQsbiRWaMtRMGu2lGEs1FBjunuH7vHgBj5d7tHqwaSmldz-8YIywrE6g== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~kPhNNKpH9EbihyPpup3po_S2O64OG3GnNMGhDx3wdCOwjq1NSiQHpWgofQjrV7n2ipKUILaAD3lg2Wz7xE1vfw==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~qKNmO0Qh3yKHdWnDn6tIP15U3zvHMCvSzNL6ACKUUxIyQtrCaitTePTnx2dSb5zGJhp3CsNuYQTbp65m_dFFVg==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMac.xcresult/Data/refs.0~qKNmO0Qh3yKHdWnDn6tIP15U3zvHMCvSzNL6ACKUUxIyQtrCaitTePTnx2dSb5zGJhp3CsNuYQTbp65m_dFFVg== -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Data/refs.0~wNyADXK01DXmIxM2-JoBXpA2StKv0Ro8IA8g4esyzxragsUtUWjol_nx7dw_Dn24O0mkJb-zAoEmJTuEKfxy3g==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMac.xcresult/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | dateCreated 6 | 2021-03-29T02:38:53Z 7 | externalLocations 8 | 9 | rootId 10 | 11 | hash 12 | 0~b4sjr-Aj3F2wX_2CrzPDw1OwfvwhAhFvc3kNFRsIJ7om8U9CKeWOlmxGfIxqksu4P87uR_29cHZW9_wXo6VlPA== 13 | 14 | storage 15 | 16 | backend 17 | fileBacked2 18 | compression 19 | standard 20 | 21 | version 22 | 23 | major 24 | 3 25 | minor 26 | 26 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~8V5x2T22G246TQGoQzr6XPAhD_cQrz4PgEju0k5rcMnQOohFm9JUcsZLyWa8atV56P4tFBDYvjJ0xh33XXN_tw==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~8V5x2T22G246TQGoQzr6XPAhD_cQrz4PgEju0k5rcMnQOohFm9JUcsZLyWa8atV56P4tFBDYvjJ0xh33XXN_tw== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~9T2Rvtub3mfr-IVWLUuysUTxh7uV9K6TRyOiuq3tx55FCOCoCC3jiGZrkHYJH8Rx6eRlIp1-t06-I6uV9PG_uQ==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~9T2Rvtub3mfr-IVWLUuysUTxh7uV9K6TRyOiuq3tx55FCOCoCC3jiGZrkHYJH8Rx6eRlIp1-t06-I6uV9PG_uQ== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~CiZ07rBANmrXZhkbjvjDRm9gngGMSs5AObBsyB3Ai3IrCZGJJenJDp_cN7lsYvsX0LtVqlPkUQYARAE6l2Ar8w==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~CiZ07rBANmrXZhkbjvjDRm9gngGMSs5AObBsyB3Ai3IrCZGJJenJDp_cN7lsYvsX0LtVqlPkUQYARAE6l2Ar8w== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~DNkZJhdjwkEmJmPDaSzRUpBPFKh9U7jCjVB2hkGpVMb7ZBUZX_GneHHf84BgN6Q9SuT9qA1CiG_fWGOLS08QJQ==: -------------------------------------------------------------------------------- 1 | [{"name":"MyFrameworkTests-B37653ED-6F59-4E88-BABB-680B5FF43D35","type":2},{"name":"scheduling.log","type":1}] -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~E8TlLEbH8hLVxwDMWLtMHmDmjTs1q7zbRaL2W8FH2PTO3GnZ37YyH74wMSZK-rQvbvGrNYOUQ5oZJeA5Pj9qFg==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~E8TlLEbH8hLVxwDMWLtMHmDmjTs1q7zbRaL2W8FH2PTO3GnZ37YyH74wMSZK-rQvbvGrNYOUQ5oZJeA5Pj9qFg== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~GBfVa9AsAEHzJ4rsSbIrrVErKeyln_KFeGPbUTJLLxIdchp2ZtIhpOyGZumkXBbU1flwsPIKvpvVu7g1ihxnVQ==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~GBfVa9AsAEHzJ4rsSbIrrVErKeyln_KFeGPbUTJLLxIdchp2ZtIhpOyGZumkXBbU1flwsPIKvpvVu7g1ihxnVQ== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~Qp1CZwQZtFj1-sHvkbB8q3qgzSQouPSnAqaB-T4r_rFGYy-RMtL3dRbrmMFUr104OucQlJIcz7FQhs6tPS9y4g==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~Qp1CZwQZtFj1-sHvkbB8q3qgzSQouPSnAqaB-T4r_rFGYy-RMtL3dRbrmMFUr104OucQlJIcz7FQhs6tPS9y4g== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~XqEMT-Nw3AWqcPlB--wO0WbvT2uMRsa6VxHvVbJn5M77fNBPe5pUO-kEL1fLCRCI90gOh0w9skik9xvF1A9TKg==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~XqEMT-Nw3AWqcPlB--wO0WbvT2uMRsa6VxHvVbJn5M77fNBPe5pUO-kEL1fLCRCI90gOh0w9skik9xvF1A9TKg== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~ZngO-MliWNPydegtJbBytcQpG3EneP6IoWlbm1RyaEa_iDzDpnGr6vIldFJKNW4kn5mg-OLhfSGVWPOuYdgkVQ==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~ZngO-MliWNPydegtJbBytcQpG3EneP6IoWlbm1RyaEa_iDzDpnGr6vIldFJKNW4kn5mg-OLhfSGVWPOuYdgkVQ== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~_0QWMWZHLIObYOnvW0ieWZbO8FkkFDG3UWcOUozLkuP4eE5PrM01NvqGjeZ0fBhBrnfldDrxMmyExNVBqIEFiA==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~_0QWMWZHLIObYOnvW0ieWZbO8FkkFDG3UWcOUozLkuP4eE5PrM01NvqGjeZ0fBhBrnfldDrxMmyExNVBqIEFiA== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~eHoCcEJ-3vS4aSZcR2JteDgYhkbNhv1FALatU4O8cdM5f6nw6wyibVVtD7ZHCjwgYSbea-8PNjJRK77BKmls1w==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~eHoCcEJ-3vS4aSZcR2JteDgYhkbNhv1FALatU4O8cdM5f6nw6wyibVVtD7ZHCjwgYSbea-8PNjJRK77BKmls1w== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~kjTJkTlV4KhJqiNlpPluQ6SFHQGSW4Bco244E7kyFmjBRrsKfbTCYNzhA0s5SmUUf-F_RbIa7h7TzFqtn8Vp8w==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~kjTJkTlV4KhJqiNlpPluQ6SFHQGSW4Bco244E7kyFmjBRrsKfbTCYNzhA0s5SmUUf-F_RbIa7h7TzFqtn8Vp8w== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~mhED0yHxUiBQS__dUS2ReveDZe5wEOR3I5acQnunm4u4Ajca0ooZqdSVSwimgaTjzQ8r8pnkKdUqlEZGEJDpDA==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~mhED0yHxUiBQS__dUS2ReveDZe5wEOR3I5acQnunm4u4Ajca0ooZqdSVSwimgaTjzQ8r8pnkKdUqlEZGEJDpDA== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~qLkdI9vFdGKParNPGgKNee59voBx8hk25QWWgzr2-rhxQ7nWPryD1T87mxoybB0i1L_embEVQWXcBiGsAyTkWg==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~qLkdI9vFdGKParNPGgKNee59voBx8hk25QWWgzr2-rhxQ7nWPryD1T87mxoybB0i1L_embEVQWXcBiGsAyTkWg== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~upEExljiW_I5b_v5VOHtQADfeizE3jnd2xYKwqsLhCMMX-yAMG3tYHiVv55MAkHQUSwhXERs_H4Uv3XreW9Y8Q==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/data.0~upEExljiW_I5b_v5VOHtQADfeizE3jnd2xYKwqsLhCMMX-yAMG3tYHiVv55MAkHQUSwhXERs_H4Uv3XreW9Y8Q== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/data.0~v9TsE5AEf5oZO_mS-NvvjEYJIQFnvumP-cbLz0wo-cc5yFCSGjfjDRuoYn0wjagvlXjEEpERSAKOOfEToU8cHQ==: -------------------------------------------------------------------------------- 1 | [{"name":"testmanagerd.log","type":1}] -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~8V5x2T22G246TQGoQzr6XPAhD_cQrz4PgEju0k5rcMnQOohFm9JUcsZLyWa8atV56P4tFBDYvjJ0xh33XXN_tw==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/refs.0~8V5x2T22G246TQGoQzr6XPAhD_cQrz4PgEju0k5rcMnQOohFm9JUcsZLyWa8atV56P4tFBDYvjJ0xh33XXN_tw== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~9T2Rvtub3mfr-IVWLUuysUTxh7uV9K6TRyOiuq3tx55FCOCoCC3jiGZrkHYJH8Rx6eRlIp1-t06-I6uV9PG_uQ==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/refs.0~9T2Rvtub3mfr-IVWLUuysUTxh7uV9K6TRyOiuq3tx55FCOCoCC3jiGZrkHYJH8Rx6eRlIp1-t06-I6uV9PG_uQ== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~CiZ07rBANmrXZhkbjvjDRm9gngGMSs5AObBsyB3Ai3IrCZGJJenJDp_cN7lsYvsX0LtVqlPkUQYARAE6l2Ar8w==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~DNkZJhdjwkEmJmPDaSzRUpBPFKh9U7jCjVB2hkGpVMb7ZBUZX_GneHHf84BgN6Q9SuT9qA1CiG_fWGOLS08QJQ==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/refs.0~DNkZJhdjwkEmJmPDaSzRUpBPFKh9U7jCjVB2hkGpVMb7ZBUZX_GneHHf84BgN6Q9SuT9qA1CiG_fWGOLS08QJQ== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~E8TlLEbH8hLVxwDMWLtMHmDmjTs1q7zbRaL2W8FH2PTO3GnZ37YyH74wMSZK-rQvbvGrNYOUQ5oZJeA5Pj9qFg==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~GBfVa9AsAEHzJ4rsSbIrrVErKeyln_KFeGPbUTJLLxIdchp2ZtIhpOyGZumkXBbU1flwsPIKvpvVu7g1ihxnVQ==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~Qp1CZwQZtFj1-sHvkbB8q3qgzSQouPSnAqaB-T4r_rFGYy-RMtL3dRbrmMFUr104OucQlJIcz7FQhs6tPS9y4g==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~XqEMT-Nw3AWqcPlB--wO0WbvT2uMRsa6VxHvVbJn5M77fNBPe5pUO-kEL1fLCRCI90gOh0w9skik9xvF1A9TKg==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~ZngO-MliWNPydegtJbBytcQpG3EneP6IoWlbm1RyaEa_iDzDpnGr6vIldFJKNW4kn5mg-OLhfSGVWPOuYdgkVQ==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~_0QWMWZHLIObYOnvW0ieWZbO8FkkFDG3UWcOUozLkuP4eE5PrM01NvqGjeZ0fBhBrnfldDrxMmyExNVBqIEFiA==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/refs.0~_0QWMWZHLIObYOnvW0ieWZbO8FkkFDG3UWcOUozLkuP4eE5PrM01NvqGjeZ0fBhBrnfldDrxMmyExNVBqIEFiA== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~eHoCcEJ-3vS4aSZcR2JteDgYhkbNhv1FALatU4O8cdM5f6nw6wyibVVtD7ZHCjwgYSbea-8PNjJRK77BKmls1w==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~kjTJkTlV4KhJqiNlpPluQ6SFHQGSW4Bco244E7kyFmjBRrsKfbTCYNzhA0s5SmUUf-F_RbIa7h7TzFqtn8Vp8w==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~mhED0yHxUiBQS__dUS2ReveDZe5wEOR3I5acQnunm4u4Ajca0ooZqdSVSwimgaTjzQ8r8pnkKdUqlEZGEJDpDA==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/refs.0~mhED0yHxUiBQS__dUS2ReveDZe5wEOR3I5acQnunm4u4Ajca0ooZqdSVSwimgaTjzQ8r8pnkKdUqlEZGEJDpDA== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~qLkdI9vFdGKParNPGgKNee59voBx8hk25QWWgzr2-rhxQ7nWPryD1T87mxoybB0i1L_embEVQWXcBiGsAyTkWg==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~upEExljiW_I5b_v5VOHtQADfeizE3jnd2xYKwqsLhCMMX-yAMG3tYHiVv55MAkHQUSwhXERs_H4Uv3XreW9Y8Q==: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Data/refs.0~v9TsE5AEf5oZO_mS-NvvjEYJIQFnvumP-cbLz0wo-cc5yFCSGjfjDRuoYn0wjagvlXjEEpERSAKOOfEToU8cHQ==: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/tbartelmess/analyze-xcoderesults-action/88440e1eb4012ff0bd29639b13d78311afbef837/TestResultsMacFailed.xcresult/Data/refs.0~v9TsE5AEf5oZO_mS-NvvjEYJIQFnvumP-cbLz0wo-cc5yFCSGjfjDRuoYn0wjagvlXjEEpERSAKOOfEToU8cHQ== -------------------------------------------------------------------------------- /TestResultsMacFailed.xcresult/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | dateCreated 6 | 2021-03-25T06:32:39Z 7 | externalLocations 8 | 9 | rootId 10 | 11 | hash 12 | 0~mhED0yHxUiBQS__dUS2ReveDZe5wEOR3I5acQnunm4u4Ajca0ooZqdSVSwimgaTjzQ8r8pnkKdUqlEZGEJDpDA== 13 | 14 | storage 15 | 16 | backend 17 | fileBacked2 18 | compression 19 | standard 20 | 21 | version 22 | 23 | major 24 | 3 25 | minor 26 | 26 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /__tests__/main.test.ts: -------------------------------------------------------------------------------- 1 | import {wait} from '../src/wait' 2 | import * as process from 'process' 3 | import * as cp from 'child_process' 4 | import * as path from 'path' 5 | import * as xcresultool from '../src/xcresulttool' 6 | jest.setTimeout(10000) 7 | const FAILED_TEST_FILE = './TestResultsMacFailed.xcresult' 8 | const SUCCEEDED_TEST_FILE = './TestResultsMac.xcresult' 9 | beforeEach(() => { 10 | process.env['INPUT_PATHPREFIX'] = 11 | '/Users/thomasbartelmess/Developer/action-test/' 12 | }) 13 | 14 | test('wait 500 ms', async () => { 15 | await xcresultool.generateGitHubCheckOutput(new xcresultool.GenerationSettings(), FAILED_TEST_FILE) 16 | }) 17 | 18 | test('test summary generation', async () => { 19 | let summary = await xcresultool.convertResultsToJSON(FAILED_TEST_FILE) 20 | expect(summary).toBeDefined 21 | expect(summary.metrics).toBeDefined 22 | let markdown = xcresultool.testSummary(summary.metrics) 23 | expect(markdown.split('\n').length).toBe(7) 24 | expect(markdown.split('\n')[5]).toBe('| 1 | 1 | 2 |') 25 | }) 26 | 27 | test('test check output', async () => { 28 | let result = await xcresultool.generateGitHubCheckOutput(new xcresultool.GenerationSettings(),FAILED_TEST_FILE) 29 | let output = result.output 30 | expect(result.title).toBeDefined() 31 | expect(result.summary).toBeDefined() 32 | expect(result.annotations).toBeDefined() 33 | }) 34 | 35 | test('check failure outcome', async () => { 36 | let output = await xcresultool.generateGitHubOutcome(new xcresultool.GenerationSettings(),FAILED_TEST_FILE) 37 | expect(output).toBe('failure') 38 | }) 39 | 40 | test('check success outcome', async () => { 41 | let output = await xcresultool.generateGitHubOutcome(new xcresultool.GenerationSettings(),SUCCEEDED_TEST_FILE) 42 | expect(output).toBe('success') 43 | }) 44 | 45 | 46 | 47 | test('test generate warning annotations', async () => { 48 | process.env['SHOWWARNINGS'] = 'true' 49 | let output = await xcresultool.generateGitHubCheckOutput(new xcresultool.GenerationSettings(),FAILED_TEST_FILE) 50 | expect(output.annotations.length).toBe(2) 51 | }) 52 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: 'Analyze XCode Results' 2 | description: 'Display Xcode test results and build warnings as GitHub annotations' 3 | author: 'Thomas Bartelmess' 4 | inputs: 5 | results: 6 | required: true 7 | description: 'Path to a the xcresult bundle' 8 | pathPrefix: 9 | required: false 10 | description: 'Build Path Prefix' 11 | default: ${{ github.workspace }} 12 | GITHUB_TOKEN: 13 | required: true 14 | description: "GitHub token to create the check" 15 | title: 16 | required: true 17 | description: "Title for the check results" 18 | default: "Test Results" 19 | testSummaryTable: 20 | required: true 21 | description: "Include a table with the number of passed and failed tests" 22 | default: "true" 23 | testFailureAnnotations: 24 | required: true 25 | description: "Add annotations for each failed test" 26 | default: "true" 27 | summary: 28 | required: true 29 | description: "Include an summary with the number of failed tests and warnings" 30 | default: "true" 31 | warningAnnotations: 32 | require: true 33 | description: "Add annotations for all warnings" 34 | default: "false" 35 | showSDKInfo: 36 | required: true 37 | description: "Print the SDK Version" 38 | default: "true" 39 | timingSummary: 40 | required: true 41 | description: "Print a summary of all tasks" 42 | default: "true" 43 | runs: 44 | using: 'node12' 45 | main: 'dist/index.js' 46 | branding: 47 | icon: 'check-circle' 48 | color: 'orange' 49 | -------------------------------------------------------------------------------- /dist/licenses.txt: -------------------------------------------------------------------------------- 1 | @actions/core 2 | MIT 3 | The MIT License (MIT) 4 | 5 | Copyright 2019 GitHub 6 | 7 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 8 | 9 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 10 | 11 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 12 | 13 | @actions/exec 14 | MIT 15 | 16 | @actions/github 17 | MIT 18 | 19 | @actions/http-client 20 | MIT 21 | Actions Http Client for Node.js 22 | 23 | Copyright (c) GitHub, Inc. 24 | 25 | All rights reserved. 26 | 27 | MIT License 28 | 29 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 30 | associated documentation files (the "Software"), to deal in the Software without restriction, 31 | including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, 32 | and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, 33 | subject to the following conditions: 34 | 35 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 36 | 37 | THE SOFTWARE IS PROVIDED *AS IS*, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 38 | LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN 39 | NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, 40 | WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE 41 | SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 42 | 43 | 44 | @actions/io 45 | MIT 46 | 47 | @octokit/action 48 | MIT 49 | MIT License 50 | 51 | Copyright (c) 2019 Octokit contributors 52 | 53 | Permission is hereby granted, free of charge, to any person obtaining a copy 54 | of this software and associated documentation files (the "Software"), to deal 55 | in the Software without restriction, including without limitation the rights 56 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 57 | copies of the Software, and to permit persons to whom the Software is 58 | furnished to do so, subject to the following conditions: 59 | 60 | The above copyright notice and this permission notice shall be included in all 61 | copies or substantial portions of the Software. 62 | 63 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 64 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 65 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 66 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 67 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 68 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 69 | SOFTWARE. 70 | 71 | 72 | @octokit/auth-action 73 | MIT 74 | The MIT License 75 | 76 | Copyright (c) 2019 Octokit contributors 77 | 78 | Permission is hereby granted, free of charge, to any person obtaining a copy 79 | of this software and associated documentation files (the "Software"), to deal 80 | in the Software without restriction, including without limitation the rights 81 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 82 | copies of the Software, and to permit persons to whom the Software is 83 | furnished to do so, subject to the following conditions: 84 | 85 | The above copyright notice and this permission notice shall be included in 86 | all copies or substantial portions of the Software. 87 | 88 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 89 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 90 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 91 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 92 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 93 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 94 | THE SOFTWARE. 95 | 96 | 97 | @octokit/auth-token 98 | MIT 99 | The MIT License 100 | 101 | Copyright (c) 2019 Octokit contributors 102 | 103 | Permission is hereby granted, free of charge, to any person obtaining a copy 104 | of this software and associated documentation files (the "Software"), to deal 105 | in the Software without restriction, including without limitation the rights 106 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 107 | copies of the Software, and to permit persons to whom the Software is 108 | furnished to do so, subject to the following conditions: 109 | 110 | The above copyright notice and this permission notice shall be included in 111 | all copies or substantial portions of the Software. 112 | 113 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 114 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 115 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 116 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 117 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 118 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 119 | THE SOFTWARE. 120 | 121 | 122 | @octokit/core 123 | MIT 124 | The MIT License 125 | 126 | Copyright (c) 2019 Octokit contributors 127 | 128 | Permission is hereby granted, free of charge, to any person obtaining a copy 129 | of this software and associated documentation files (the "Software"), to deal 130 | in the Software without restriction, including without limitation the rights 131 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 132 | copies of the Software, and to permit persons to whom the Software is 133 | furnished to do so, subject to the following conditions: 134 | 135 | The above copyright notice and this permission notice shall be included in 136 | all copies or substantial portions of the Software. 137 | 138 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 139 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 140 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 141 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 142 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 143 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 144 | THE SOFTWARE. 145 | 146 | 147 | @octokit/endpoint 148 | MIT 149 | The MIT License 150 | 151 | Copyright (c) 2018 Octokit contributors 152 | 153 | Permission is hereby granted, free of charge, to any person obtaining a copy 154 | of this software and associated documentation files (the "Software"), to deal 155 | in the Software without restriction, including without limitation the rights 156 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 157 | copies of the Software, and to permit persons to whom the Software is 158 | furnished to do so, subject to the following conditions: 159 | 160 | The above copyright notice and this permission notice shall be included in 161 | all copies or substantial portions of the Software. 162 | 163 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 164 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 165 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 166 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 167 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 168 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 169 | THE SOFTWARE. 170 | 171 | 172 | @octokit/graphql 173 | MIT 174 | The MIT License 175 | 176 | Copyright (c) 2018 Octokit contributors 177 | 178 | Permission is hereby granted, free of charge, to any person obtaining a copy 179 | of this software and associated documentation files (the "Software"), to deal 180 | in the Software without restriction, including without limitation the rights 181 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 182 | copies of the Software, and to permit persons to whom the Software is 183 | furnished to do so, subject to the following conditions: 184 | 185 | The above copyright notice and this permission notice shall be included in 186 | all copies or substantial portions of the Software. 187 | 188 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 189 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 190 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 191 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 192 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 193 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 194 | THE SOFTWARE. 195 | 196 | 197 | @octokit/plugin-paginate-rest 198 | MIT 199 | MIT License Copyright (c) 2019 Octokit contributors 200 | 201 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 202 | 203 | The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. 204 | 205 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 206 | 207 | 208 | @octokit/plugin-rest-endpoint-methods 209 | MIT 210 | MIT License Copyright (c) 2019 Octokit contributors 211 | 212 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 213 | 214 | The above copyright notice and this permission notice (including the next paragraph) shall be included in all copies or substantial portions of the Software. 215 | 216 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 217 | 218 | 219 | @octokit/request 220 | MIT 221 | The MIT License 222 | 223 | Copyright (c) 2018 Octokit contributors 224 | 225 | Permission is hereby granted, free of charge, to any person obtaining a copy 226 | of this software and associated documentation files (the "Software"), to deal 227 | in the Software without restriction, including without limitation the rights 228 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 229 | copies of the Software, and to permit persons to whom the Software is 230 | furnished to do so, subject to the following conditions: 231 | 232 | The above copyright notice and this permission notice shall be included in 233 | all copies or substantial portions of the Software. 234 | 235 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 236 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 237 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 238 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 239 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 240 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 241 | THE SOFTWARE. 242 | 243 | 244 | @octokit/request-error 245 | MIT 246 | The MIT License 247 | 248 | Copyright (c) 2019 Octokit contributors 249 | 250 | Permission is hereby granted, free of charge, to any person obtaining a copy 251 | of this software and associated documentation files (the "Software"), to deal 252 | in the Software without restriction, including without limitation the rights 253 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 254 | copies of the Software, and to permit persons to whom the Software is 255 | furnished to do so, subject to the following conditions: 256 | 257 | The above copyright notice and this permission notice shall be included in 258 | all copies or substantial portions of the Software. 259 | 260 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 261 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 262 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 263 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 264 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 265 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 266 | THE SOFTWARE. 267 | 268 | 269 | @vercel/ncc 270 | MIT 271 | Copyright 2018 ZEIT, Inc. 272 | 273 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 274 | 275 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 276 | 277 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 278 | 279 | before-after-hook 280 | Apache-2.0 281 | Apache License 282 | Version 2.0, January 2004 283 | http://www.apache.org/licenses/ 284 | 285 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 286 | 287 | 1. Definitions. 288 | 289 | "License" shall mean the terms and conditions for use, reproduction, 290 | and distribution as defined by Sections 1 through 9 of this document. 291 | 292 | "Licensor" shall mean the copyright owner or entity authorized by 293 | the copyright owner that is granting the License. 294 | 295 | "Legal Entity" shall mean the union of the acting entity and all 296 | other entities that control, are controlled by, or are under common 297 | control with that entity. For the purposes of this definition, 298 | "control" means (i) the power, direct or indirect, to cause the 299 | direction or management of such entity, whether by contract or 300 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 301 | outstanding shares, or (iii) beneficial ownership of such entity. 302 | 303 | "You" (or "Your") shall mean an individual or Legal Entity 304 | exercising permissions granted by this License. 305 | 306 | "Source" form shall mean the preferred form for making modifications, 307 | including but not limited to software source code, documentation 308 | source, and configuration files. 309 | 310 | "Object" form shall mean any form resulting from mechanical 311 | transformation or translation of a Source form, including but 312 | not limited to compiled object code, generated documentation, 313 | and conversions to other media types. 314 | 315 | "Work" shall mean the work of authorship, whether in Source or 316 | Object form, made available under the License, as indicated by a 317 | copyright notice that is included in or attached to the work 318 | (an example is provided in the Appendix below). 319 | 320 | "Derivative Works" shall mean any work, whether in Source or Object 321 | form, that is based on (or derived from) the Work and for which the 322 | editorial revisions, annotations, elaborations, or other modifications 323 | represent, as a whole, an original work of authorship. For the purposes 324 | of this License, Derivative Works shall not include works that remain 325 | separable from, or merely link (or bind by name) to the interfaces of, 326 | the Work and Derivative Works thereof. 327 | 328 | "Contribution" shall mean any work of authorship, including 329 | the original version of the Work and any modifications or additions 330 | to that Work or Derivative Works thereof, that is intentionally 331 | submitted to Licensor for inclusion in the Work by the copyright owner 332 | or by an individual or Legal Entity authorized to submit on behalf of 333 | the copyright owner. For the purposes of this definition, "submitted" 334 | means any form of electronic, verbal, or written communication sent 335 | to the Licensor or its representatives, including but not limited to 336 | communication on electronic mailing lists, source code control systems, 337 | and issue tracking systems that are managed by, or on behalf of, the 338 | Licensor for the purpose of discussing and improving the Work, but 339 | excluding communication that is conspicuously marked or otherwise 340 | designated in writing by the copyright owner as "Not a Contribution." 341 | 342 | "Contributor" shall mean Licensor and any individual or Legal Entity 343 | on behalf of whom a Contribution has been received by Licensor and 344 | subsequently incorporated within the Work. 345 | 346 | 2. Grant of Copyright License. Subject to the terms and conditions of 347 | this License, each Contributor hereby grants to You a perpetual, 348 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 349 | copyright license to reproduce, prepare Derivative Works of, 350 | publicly display, publicly perform, sublicense, and distribute the 351 | Work and such Derivative Works in Source or Object form. 352 | 353 | 3. Grant of Patent License. Subject to the terms and conditions of 354 | this License, each Contributor hereby grants to You a perpetual, 355 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 356 | (except as stated in this section) patent license to make, have made, 357 | use, offer to sell, sell, import, and otherwise transfer the Work, 358 | where such license applies only to those patent claims licensable 359 | by such Contributor that are necessarily infringed by their 360 | Contribution(s) alone or by combination of their Contribution(s) 361 | with the Work to which such Contribution(s) was submitted. If You 362 | institute patent litigation against any entity (including a 363 | cross-claim or counterclaim in a lawsuit) alleging that the Work 364 | or a Contribution incorporated within the Work constitutes direct 365 | or contributory patent infringement, then any patent licenses 366 | granted to You under this License for that Work shall terminate 367 | as of the date such litigation is filed. 368 | 369 | 4. Redistribution. You may reproduce and distribute copies of the 370 | Work or Derivative Works thereof in any medium, with or without 371 | modifications, and in Source or Object form, provided that You 372 | meet the following conditions: 373 | 374 | (a) You must give any other recipients of the Work or 375 | Derivative Works a copy of this License; and 376 | 377 | (b) You must cause any modified files to carry prominent notices 378 | stating that You changed the files; and 379 | 380 | (c) You must retain, in the Source form of any Derivative Works 381 | that You distribute, all copyright, patent, trademark, and 382 | attribution notices from the Source form of the Work, 383 | excluding those notices that do not pertain to any part of 384 | the Derivative Works; and 385 | 386 | (d) If the Work includes a "NOTICE" text file as part of its 387 | distribution, then any Derivative Works that You distribute must 388 | include a readable copy of the attribution notices contained 389 | within such NOTICE file, excluding those notices that do not 390 | pertain to any part of the Derivative Works, in at least one 391 | of the following places: within a NOTICE text file distributed 392 | as part of the Derivative Works; within the Source form or 393 | documentation, if provided along with the Derivative Works; or, 394 | within a display generated by the Derivative Works, if and 395 | wherever such third-party notices normally appear. The contents 396 | of the NOTICE file are for informational purposes only and 397 | do not modify the License. You may add Your own attribution 398 | notices within Derivative Works that You distribute, alongside 399 | or as an addendum to the NOTICE text from the Work, provided 400 | that such additional attribution notices cannot be construed 401 | as modifying the License. 402 | 403 | You may add Your own copyright statement to Your modifications and 404 | may provide additional or different license terms and conditions 405 | for use, reproduction, or distribution of Your modifications, or 406 | for any such Derivative Works as a whole, provided Your use, 407 | reproduction, and distribution of the Work otherwise complies with 408 | the conditions stated in this License. 409 | 410 | 5. Submission of Contributions. Unless You explicitly state otherwise, 411 | any Contribution intentionally submitted for inclusion in the Work 412 | by You to the Licensor shall be under the terms and conditions of 413 | this License, without any additional terms or conditions. 414 | Notwithstanding the above, nothing herein shall supersede or modify 415 | the terms of any separate license agreement you may have executed 416 | with Licensor regarding such Contributions. 417 | 418 | 6. Trademarks. This License does not grant permission to use the trade 419 | names, trademarks, service marks, or product names of the Licensor, 420 | except as required for reasonable and customary use in describing the 421 | origin of the Work and reproducing the content of the NOTICE file. 422 | 423 | 7. Disclaimer of Warranty. Unless required by applicable law or 424 | agreed to in writing, Licensor provides the Work (and each 425 | Contributor provides its Contributions) on an "AS IS" BASIS, 426 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 427 | implied, including, without limitation, any warranties or conditions 428 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 429 | PARTICULAR PURPOSE. You are solely responsible for determining the 430 | appropriateness of using or redistributing the Work and assume any 431 | risks associated with Your exercise of permissions under this License. 432 | 433 | 8. Limitation of Liability. In no event and under no legal theory, 434 | whether in tort (including negligence), contract, or otherwise, 435 | unless required by applicable law (such as deliberate and grossly 436 | negligent acts) or agreed to in writing, shall any Contributor be 437 | liable to You for damages, including any direct, indirect, special, 438 | incidental, or consequential damages of any character arising as a 439 | result of this License or out of the use or inability to use the 440 | Work (including but not limited to damages for loss of goodwill, 441 | work stoppage, computer failure or malfunction, or any and all 442 | other commercial damages or losses), even if such Contributor 443 | has been advised of the possibility of such damages. 444 | 445 | 9. Accepting Warranty or Additional Liability. While redistributing 446 | the Work or Derivative Works thereof, You may choose to offer, 447 | and charge a fee for, acceptance of support, warranty, indemnity, 448 | or other liability obligations and/or rights consistent with this 449 | License. However, in accepting such obligations, You may act only 450 | on Your own behalf and on Your sole responsibility, not on behalf 451 | of any other Contributor, and only if You agree to indemnify, 452 | defend, and hold each Contributor harmless for any liability 453 | incurred by, or claims asserted against, such Contributor by reason 454 | of your accepting any such warranty or additional liability. 455 | 456 | END OF TERMS AND CONDITIONS 457 | 458 | APPENDIX: How to apply the Apache License to your work. 459 | 460 | To apply the Apache License to your work, attach the following 461 | boilerplate notice, with the fields enclosed by brackets "{}" 462 | replaced with your own identifying information. (Don't include 463 | the brackets!) The text should be enclosed in the appropriate 464 | comment syntax for the file format. We also recommend that a 465 | file or class name and description of purpose be included on the 466 | same "printed page" as the copyright notice for easier 467 | identification within third-party archives. 468 | 469 | Copyright 2018 Gregor Martynus and other contributors. 470 | 471 | Licensed under the Apache License, Version 2.0 (the "License"); 472 | you may not use this file except in compliance with the License. 473 | You may obtain a copy of the License at 474 | 475 | http://www.apache.org/licenses/LICENSE-2.0 476 | 477 | Unless required by applicable law or agreed to in writing, software 478 | distributed under the License is distributed on an "AS IS" BASIS, 479 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 480 | See the License for the specific language governing permissions and 481 | limitations under the License. 482 | 483 | 484 | deprecation 485 | ISC 486 | The ISC License 487 | 488 | Copyright (c) Gregor Martynus and contributors 489 | 490 | Permission to use, copy, modify, and/or distribute this software for any 491 | purpose with or without fee is hereby granted, provided that the above 492 | copyright notice and this permission notice appear in all copies. 493 | 494 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 495 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 496 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 497 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 498 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 499 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 500 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 501 | 502 | 503 | is-plain-object 504 | MIT 505 | The MIT License (MIT) 506 | 507 | Copyright (c) 2014-2017, Jon Schlinkert. 508 | 509 | Permission is hereby granted, free of charge, to any person obtaining a copy 510 | of this software and associated documentation files (the "Software"), to deal 511 | in the Software without restriction, including without limitation the rights 512 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 513 | copies of the Software, and to permit persons to whom the Software is 514 | furnished to do so, subject to the following conditions: 515 | 516 | The above copyright notice and this permission notice shall be included in 517 | all copies or substantial portions of the Software. 518 | 519 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 520 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 521 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 522 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 523 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 524 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 525 | THE SOFTWARE. 526 | 527 | 528 | node-fetch 529 | MIT 530 | The MIT License (MIT) 531 | 532 | Copyright (c) 2016 David Frank 533 | 534 | Permission is hereby granted, free of charge, to any person obtaining a copy 535 | of this software and associated documentation files (the "Software"), to deal 536 | in the Software without restriction, including without limitation the rights 537 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 538 | copies of the Software, and to permit persons to whom the Software is 539 | furnished to do so, subject to the following conditions: 540 | 541 | The above copyright notice and this permission notice shall be included in all 542 | copies or substantial portions of the Software. 543 | 544 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 545 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 546 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 547 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 548 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 549 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 550 | SOFTWARE. 551 | 552 | 553 | 554 | once 555 | ISC 556 | The ISC License 557 | 558 | Copyright (c) Isaac Z. Schlueter and Contributors 559 | 560 | Permission to use, copy, modify, and/or distribute this software for any 561 | purpose with or without fee is hereby granted, provided that the above 562 | copyright notice and this permission notice appear in all copies. 563 | 564 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 565 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 566 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 567 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 568 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 569 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 570 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 571 | 572 | 573 | tunnel 574 | MIT 575 | The MIT License (MIT) 576 | 577 | Copyright (c) 2012 Koichi Kobayashi 578 | 579 | Permission is hereby granted, free of charge, to any person obtaining a copy 580 | of this software and associated documentation files (the "Software"), to deal 581 | in the Software without restriction, including without limitation the rights 582 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 583 | copies of the Software, and to permit persons to whom the Software is 584 | furnished to do so, subject to the following conditions: 585 | 586 | The above copyright notice and this permission notice shall be included in 587 | all copies or substantial portions of the Software. 588 | 589 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 590 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 591 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 592 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 593 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 594 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN 595 | THE SOFTWARE. 596 | 597 | 598 | universal-user-agent 599 | ISC 600 | # [ISC License](https://spdx.org/licenses/ISC) 601 | 602 | Copyright (c) 2018, Gregor Martynus (https://github.com/gr2m) 603 | 604 | Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above copyright notice and this permission notice appear in all copies. 605 | 606 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 607 | 608 | 609 | wrappy 610 | ISC 611 | The ISC License 612 | 613 | Copyright (c) Isaac Z. Schlueter and Contributors 614 | 615 | Permission to use, copy, modify, and/or distribute this software for any 616 | purpose with or without fee is hereby granted, provided that the above 617 | copyright notice and this permission notice appear in all copies. 618 | 619 | THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 620 | WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 621 | MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 622 | ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 623 | WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 624 | ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR 625 | IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 626 | -------------------------------------------------------------------------------- /jest.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | clearMocks: true, 3 | moduleFileExtensions: ['js', 'ts'], 4 | testEnvironment: 'node', 5 | testMatch: ['**/*.test.ts'], 6 | testRunner: 'jest-circus/runner', 7 | transform: { 8 | '^.+\\.ts$': 'ts-jest' 9 | }, 10 | verbose: true 11 | } -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "analyze-xcoderesults-action", 3 | "version": "0.1.5", 4 | "private": true, 5 | "description": "Action to show details of an XCode result bundle as GitHub check result", 6 | "main": "lib/main.js", 7 | "scripts": { 8 | "build": "tsc", 9 | "format": "prettier --write **/*.ts", 10 | "format-check": "prettier --check **/*.ts", 11 | "lint": "eslint src/**/*.ts", 12 | "package": "ncc build --source-map --license licenses.txt", 13 | "test": "jest", 14 | "all": "npm run build && npm run format && npm run package && npm test" 15 | }, 16 | "repository": { 17 | "type": "git", 18 | "url": "git+https://github.com/tbartelmess/analyze-xcoderesults-action.git" 19 | }, 20 | "keywords": [ 21 | "actions", 22 | "node", 23 | "setup" 24 | ], 25 | "author": "Thomas Bartelmess", 26 | "license": "MIT", 27 | "dependencies": { 28 | "@actions/core": "^1.2.6", 29 | "@actions/exec": "^1.0.4", 30 | "@actions/github": "^4.0.0", 31 | "@actions/http-client": "^1.0.11", 32 | "@octokit/action": "^3.8.0", 33 | "@octokit/plugin-rest-endpoint-methods": "^5.0.0", 34 | "@octokit/rest": "^18.5.2", 35 | "@octokit/types": "^6.13.0" 36 | }, 37 | "devDependencies": { 38 | "@types/jest": "^26.0.22", 39 | "@types/node": "^14.14.37", 40 | "@typescript-eslint/parser": "^4.20.0", 41 | "@vercel/ncc": "^0.27.0", 42 | "eslint": "^7.25.0", 43 | "eslint-plugin-github": "^4.1.2", 44 | "eslint-plugin-jest": "^24.3.4", 45 | "jest": "^26.6.3", 46 | "jest-circus": "^26.6.3", 47 | "js-yaml": "^4.1.0", 48 | "prettier": "2.2.1", 49 | "ts-jest": "^26.5.4", 50 | "typescript": "^4.2.3" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core' 2 | import * as xcresulttool from './xcresulttool' 3 | import * as github from '@actions/github' 4 | import {RestEndpointMethodTypes} from '@octokit/rest' 5 | import * as ok from '@octokit/action' 6 | type PullRequest = RestEndpointMethodTypes['pulls']['get']['response']['data'] 7 | type CheckCreate = RestEndpointMethodTypes['checks']['create']['parameters'] 8 | const prEvents = [ 9 | 'pull_request', 10 | 'pull_request_review', 11 | 'pull_request_review_comment' 12 | ] 13 | 14 | function getSHA(): string { 15 | let sha = github.context.sha 16 | if (prEvents.includes(github.context.eventName)) { 17 | const pull = github.context.payload.pull_request as PullRequest 18 | if (pull?.head.sha) { 19 | sha = pull?.head.sha 20 | } 21 | } 22 | return sha 23 | } 24 | 25 | type Ownership = { 26 | owner: string 27 | repo: string 28 | } 29 | 30 | const formatDate = (): string => { 31 | return new Date().toISOString() 32 | } 33 | 34 | async function run(): Promise { 35 | try { 36 | const ownership = { 37 | owner: github.context.repo.owner, 38 | repo: github.context.repo.repo 39 | } 40 | const sha = getSHA() 41 | 42 | const inputFile: string = core.getInput('results') 43 | core.info(`Analyzing ${inputFile} ...`) 44 | 45 | let settings = new xcresulttool.GenerationSettings() 46 | settings.readActionSettings() 47 | let output = await xcresulttool.generateGitHubCheckOutput(settings, inputFile) 48 | let conclusion = await xcresulttool.generateGitHubOutcome(settings, inputFile) 49 | core.debug( 50 | `Creating a new Run on ${ownership.owner}/${ownership.repo}@${sha}` 51 | ) 52 | 53 | let octokit = new ok.Octokit() 54 | 55 | let checkInfo: CheckCreate = { 56 | owner: github.context.repo.owner, 57 | repo: github.context.repo.repo, 58 | name: core.getInput('title'), 59 | status: 'completed', 60 | conclusion: conclusion, 61 | head_sha: sha, 62 | output: output 63 | } 64 | await octokit.checks.create(checkInfo) 65 | core.debug(`Done`) 66 | } catch (error) { 67 | core.setFailed(error.message) 68 | } 69 | } 70 | 71 | run() 72 | -------------------------------------------------------------------------------- /src/xcresulttool.ts: -------------------------------------------------------------------------------- 1 | import * as core from '@actions/core' 2 | import * as exec from '@actions/exec' 3 | import {ExecOptions} from '@actions/exec/lib/interfaces' 4 | import {RestEndpointMethodTypes} from '@octokit/rest' 5 | 6 | export type Annotations = NonNullable< 7 | NonNullable< 8 | RestEndpointMethodTypes['checks']['create']['parameters']['output'] 9 | >['annotations'] 10 | > 11 | 12 | interface ResultSummary { 13 | actions: TypedArray 14 | issues: ResultIssueSummaries 15 | metrics: ResultMetrics 16 | } 17 | 18 | interface TypeInfo { 19 | _name: string 20 | _supertype?: TypeInfo 21 | } 22 | 23 | interface TypedDictionary { 24 | _type: TypeInfo 25 | _value: T 26 | } 27 | 28 | interface TypedArray { 29 | _type: TypeInfo 30 | _values: [T] 31 | } 32 | 33 | interface TypedValue { 34 | _type: TypeInfo 35 | _value: T 36 | } 37 | 38 | interface ResultIssueSummaries { 39 | _type: TypeInfo 40 | testFailureSummaries: TypedArray 41 | warningSummaries: TypedArray 42 | } 43 | 44 | interface URL { 45 | _type: TypeInfo 46 | _value: string 47 | } 48 | 49 | interface DocumentLocation { 50 | _type: TypeInfo 51 | url: URL 52 | } 53 | 54 | interface IssueSummary { 55 | documentLocationInCreatingWorkspace: DocumentLocation 56 | message: TypedValue 57 | issueType: TypedValue 58 | } 59 | 60 | interface TestFailureIssueSummary extends IssueSummary { 61 | productingTarget: TypedValue 62 | testCaseName: TypedValue 63 | } 64 | 65 | interface LocationInfo { 66 | file: string 67 | startLine?: number 68 | endLine?: number 69 | } 70 | 71 | interface TestFailureInfo { 72 | location: LocationInfo 73 | } 74 | 75 | interface ResultMetrics { 76 | _type: TypeInfo 77 | testsCount?: TypedValue 78 | testsFailedCount?: TypedValue 79 | warningCount?: TypedValue 80 | } 81 | 82 | interface ActionSDKRecord { 83 | _type: TypeInfo 84 | identifier: TypedValue 85 | name: TypedValue 86 | operatingSystemVersion: TypedValue 87 | } 88 | 89 | interface ActionResult { 90 | _type: TypeInfo 91 | status: TypedValue 92 | } 93 | 94 | interface ActionRecord { 95 | _type: TypeInfo 96 | actionResult: ActionResult 97 | title: TypedValue 98 | startedTime: TypedValue 99 | endedTime: TypedValue 100 | actionStatus: TypedValue 101 | } 102 | 103 | interface ActionRunDestinationRecord { 104 | _type: TypeInfo 105 | displayName: TypedValue 106 | localComputerRecord: ActionDeviceRecord 107 | targetArchitecture: TypedValue 108 | targetDeviceRecord: ActionDeviceRecord 109 | targetSDKRecord: ActionSDKRecord 110 | } 111 | 112 | interface ActionPlatformRecord { 113 | _type: TypeInfo 114 | identifier: TypedValue 115 | userDescription: TypedValue 116 | } 117 | 118 | interface ActionDeviceRecord { 119 | _type: TypeInfo 120 | busSpeedInMHz: TypedValue 121 | cpuCount: TypedValue 122 | cpuKind: TypedValue 123 | cpuSpeedInMHz: TypedValue 124 | identifier: TypedValue 125 | isConcreteDevice: TypedValue 126 | logicalCPUCoresPerPackage: TypedValue 127 | modelCode: TypedValue 128 | modelName: TypedValue 129 | modelUTI: TypedValue 130 | name: TypedValue 131 | nativeArchitecture: TypedValue 132 | operatingSystemVersion: TypedValue 133 | operatingSystemVersionWithBuildNumber: TypedValue 134 | physicalCPUCoresPerPackage: TypedValue 135 | platformRecord: TypedValue 136 | ramSizeInMegabytes: TypedValue 137 | } 138 | 139 | enum AnnotationLevel { 140 | notice = 'notice', 141 | warning = 'warning', 142 | failure = 'failure' 143 | } 144 | 145 | interface GitHubAnnotation { 146 | path: string 147 | start_line: number 148 | end_line: number 149 | start_column?: number 150 | end_column?: number 151 | annotation_level: AnnotationLevel 152 | message: string 153 | title: string 154 | raw_details?: string 155 | } 156 | 157 | 158 | export class GenerationSettings { 159 | testSummaryTable: boolean = true; 160 | testFailureAnnotations: boolean = true; 161 | summary: boolean = true; 162 | warningAnnotations: boolean = true; 163 | showSDKInfo: boolean = true; 164 | timingSummary: boolean = true; 165 | 166 | readActionSettings() { 167 | this.testSummaryTable = (core.getInput('testSummaryTable') === "true") 168 | this.testFailureAnnotations = (core.getInput('testFailureAnnotations') === "true") 169 | this.summary = (core.getInput('summary') === "true") 170 | this.warningAnnotations = (core.getInput('warningAnnotations') === "true") 171 | this.showSDKInfo = (core.getInput('showSDKInfo') === "true") 172 | this.timingSummary = (core.getInput('timingSummary') === "true") 173 | 174 | } 175 | } 176 | 177 | export async function generateGitHubOutcome(settings: GenerationSettings, file: string): Promise { 178 | 179 | let summary: ResultSummary = await convertResultsToJSON(file) 180 | let success = true 181 | summary.actions?._values.forEach(action => { 182 | success = (success && action.actionResult.status._value != "failed"); 183 | }); 184 | return success ? "success" : "failure"; 185 | } 186 | 187 | export async function generateGitHubCheckOutput(settings: GenerationSettings, file: string): Promise { 188 | let summary: ResultSummary = await convertResultsToJSON(file) 189 | let annotations: GitHubAnnotation[] = [] 190 | 191 | if (settings.testSummaryTable) { 192 | summary.issues.testFailureSummaries?._values.forEach(failure => { 193 | let annotation = testFailureToGitHubAnnotation(failure) 194 | annotations.push(annotation) 195 | }) 196 | } 197 | 198 | if (settings.warningAnnotations) { 199 | let warningAnnotations = summary.issues.warningSummaries?._values.forEach(warning => { 200 | let annotation = warningsToGitHubAnnotation(warning) 201 | if (annotation) { 202 | annotations.push(annotation) 203 | } 204 | }) 205 | } 206 | // Github only support 50 annotations 207 | annotations = annotations.slice(0,49); 208 | 209 | let summaryMd = "" 210 | 211 | if (settings.summary) { 212 | summaryMd += buildSummary(summary.metrics) 213 | } 214 | 215 | if (settings.testSummaryTable) { 216 | summaryMd += testSummary(summary.metrics) 217 | } 218 | 219 | return { 220 | summary: summaryMd, 221 | title: core.getInput('title'), 222 | annotations: annotations 223 | } 224 | } 225 | 226 | /** 227 | * Wrapper around the xcresultool 228 | * to transform xcresult files to JSON. 229 | * 230 | * @argument file: path to the xcresult bundle 231 | * @argument object: name of the object to export, if null, the root object will be returned 232 | */ 233 | export async function convertResultsToJSON( 234 | file: string, 235 | object: string|null = null 236 | ): Promise { 237 | let output = '' 238 | const options: ExecOptions = {} 239 | options.listeners = { 240 | stdout: (data: Buffer) => { 241 | output += data.toString() 242 | } 243 | } 244 | options.silent = true 245 | let args: string[] = [ 246 | 'xcresulttool', 247 | 'get', 248 | '--path', 249 | file, 250 | '--format', 251 | 'json' 252 | ] 253 | 254 | if (object != null) { 255 | args.push("--id") 256 | args.push(object) 257 | } 258 | 259 | await exec.exec('xcrun', args, options) 260 | return JSON.parse(output) as ResultSummary 261 | } 262 | 263 | 264 | export function testSummary(metrics: ResultMetrics): string { 265 | let testCount = metrics?.testsCount?._value ?? 0 266 | let failed = metrics?.testsFailedCount?._value ?? 0 267 | let passed = testCount - failed 268 | return ` 269 | 270 | ## Tests 271 | |Tests Passed ✅ | Tests Failed ⛔️ | Tests Total | 272 | |:---------------|:----------------|:------------| 273 | | ${passed} | ${failed} | ${testCount} | 274 | ` 275 | } 276 | 277 | 278 | 279 | 280 | /** 281 | * Generates a bit of mark down that is shown at the top of the 282 | * check page 283 | */ 284 | export function buildSummary(metrics: ResultMetrics) { 285 | let testCount = metrics?.testsCount?._value ?? 0 286 | let failed = metrics?.testsFailedCount?._value ?? 0 287 | let passed = testCount - failed 288 | let warnings = metrics?.warningCount?._value ?? 0 289 | return ` 290 | ## Summary 291 | 🧪 ${passed}/${testCount} tests passed 292 | ⚠️ Build finished with **${warnings}** Warnings 293 | ` 294 | } 295 | 296 | export function parseURLToLocation(urlString: string): LocationInfo { 297 | let url = new URL(urlString) 298 | let path = url.pathname.replace(core.getInput('pathPrefix') + '/', '') 299 | let locations = url.hash.substring(1).split('&') as [string] 300 | 301 | let info: LocationInfo = { 302 | file: path 303 | } 304 | 305 | locations.forEach(location => { 306 | let pair = location.split('=') 307 | if (pair.length == 2) { 308 | let value = parseInt(pair[1]) 309 | switch (pair[0]) { 310 | case 'StartingLineNumber': { 311 | info.startLine = value 312 | break 313 | } 314 | case 'EndingLineNumber': { 315 | info.endLine = value 316 | break 317 | } 318 | default: 319 | break 320 | } 321 | } 322 | }) 323 | return info 324 | } 325 | 326 | /** 327 | * Generate GitHub annotations from an IssueSummary Object 328 | */ 329 | export function warningsToGitHubAnnotation(issue: IssueSummary): GitHubAnnotation | null { 330 | let location = issue.documentLocationInCreatingWorkspace; 331 | if (location == undefined) { 332 | return null; 333 | } 334 | let info = parseURLToLocation(issue.documentLocationInCreatingWorkspace.url._value) 335 | let annotation: GitHubAnnotation = { 336 | path: info.file, 337 | start_line: info.startLine ?? 0, 338 | end_line: info.endLine ?? info.startLine ?? 0, 339 | annotation_level: AnnotationLevel.warning, 340 | title: issue.message._value, 341 | message: issue.message._value 342 | } 343 | return annotation 344 | } 345 | 346 | /** 347 | * Generate GitHub annotations from TestFailureIssueSummary objects 348 | * 349 | * GitHub requires start_line and end_line to be non-null so when xcode does 350 | * not include source information we are pretending it's line zero. 351 | */ 352 | export function testFailureToGitHubAnnotation( 353 | issue: TestFailureIssueSummary 354 | ): GitHubAnnotation { 355 | let info = parseURLToLocation(issue.documentLocationInCreatingWorkspace.url._value) 356 | let annotation: GitHubAnnotation = { 357 | path: info.file, 358 | start_line: info.startLine ?? 0, 359 | end_line: info.endLine ?? info.startLine ?? 0, 360 | annotation_level: AnnotationLevel.failure, 361 | title: `${issue.testCaseName._value} failed`, 362 | message: issue.message._value 363 | } 364 | return annotation 365 | } 366 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */ 4 | "module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */ 5 | "outDir": "./lib", /* Redirect output structure to the directory. */ 6 | "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ 7 | "strict": true, /* Enable all strict type-checking options. */ 8 | "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ 9 | "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */ 10 | }, 11 | "exclude": ["node_modules", "**/*.test.ts"] 12 | } 13 | --------------------------------------------------------------------------------