From 2f7f8896e59ebcb4ca2f8679975f0c7478319ba0 Mon Sep 17 00:00:00 2001 From: Nick Schonning Date: Fri, 31 Dec 2021 13:35:39 -0500 Subject: [PATCH] chore: upgrade Prettier to v2 and run on full repo --- .editorconfig | 12 ++ .eslintrc.json | 10 +- .gitattributes | 1 + .github/workflows/codeql-analysis.yml | 38 ++--- .github/workflows/licensed.yml | 2 +- .github/workflows/test.yml | 4 +- .github/workflows/update-main-version.yml | 22 +-- .licensed.yml | 2 +- .prettierignore | 3 +- .prettierrc.json | 5 +- CHANGELOG.md | 4 +- README.md | 3 +- __test__/git-auth-helper.test.ts | 8 +- __test__/ref-helper.test.ts | 4 +- __test__/retry-helper.test.ts | 2 +- action.yml | 160 +++++++++++----------- adrs/0153-checkout-v2.md | 127 +++++++++-------- jest.config.js | 2 +- package-lock.json | 6 +- package.json | 6 +- src/fs-helper.ts | 15 +- src/git-auth-helper.ts | 2 +- src/input-helper.ts | 5 +- src/misc/generate-docs.ts | 4 +- src/ref-helper.ts | 2 +- src/workflow-context-helper.ts | 5 +- tsconfig.json | 4 +- 27 files changed, 247 insertions(+), 211 deletions(-) create mode 100644 .editorconfig diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5d47c21 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# EditorConfig is awesome: https://EditorConfig.org + +# top-most EditorConfig file +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true diff --git a/.eslintrc.json b/.eslintrc.json index 14c084e..191d79b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,12 +12,18 @@ "import/no-namespace": "off", "no-unused-vars": "off", "@typescript-eslint/no-unused-vars": "error", - "@typescript-eslint/explicit-member-accessibility": ["error", {"accessibility": "no-public"}], + "@typescript-eslint/explicit-member-accessibility": [ + "error", + {"accessibility": "no-public"} + ], "@typescript-eslint/no-require-imports": "error", "@typescript-eslint/array-type": "error", "@typescript-eslint/await-thenable": "error", "camelcase": "off", - "@typescript-eslint/explicit-function-return-type": ["error", {"allowExpressions": true}], + "@typescript-eslint/explicit-function-return-type": [ + "error", + {"allowExpressions": true} + ], "@typescript-eslint/func-call-spacing": ["error", "never"], "@typescript-eslint/no-array-constructor": "error", "@typescript-eslint/no-empty-interface": "error", diff --git a/.gitattributes b/.gitattributes index 541fd55..693f0bc 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,2 @@ +* text=auto eol=lf .licenses/** -diff linguist-generated=true \ No newline at end of file diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index a771bc0..ad4a01e 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -9,14 +9,14 @@ # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # -name: "CodeQL" +name: 'CodeQL' on: push: - branches: [ main ] + branches: [main] pull_request: # The branches below must be a subset of the branches above - branches: [ main ] + branches: [main] schedule: - cron: '28 9 * * 0' @@ -32,27 +32,27 @@ jobs: strategy: fail-fast: false matrix: - language: [ 'javascript' ] + language: ['javascript'] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ] # Learn more: # https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed steps: - - name: Checkout repository - uses: actions/checkout@v3 + - name: Checkout repository + uses: actions/checkout@v3 - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main - - run: npm ci - - run: npm run build - - run: rm -rf dist # We want code scanning to analyze lib instead (individual .js files) + - run: npm ci + - run: npm run build + - run: rm -rf dist # We want code scanning to analyze lib instead (individual .js files) - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/licensed.yml b/.github/workflows/licensed.yml index 72ce2db..8de3498 100644 --- a/.github/workflows/licensed.yml +++ b/.github/workflows/licensed.yml @@ -11,4 +11,4 @@ jobs: steps: - uses: actions/checkout@v3 - run: npm ci - - run: npm run licensed-check \ No newline at end of file + - run: npm run licensed-check diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 0e77c57..e488854 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -205,7 +205,7 @@ jobs: path: basic - name: Verify basic run: __test__/verify-basic.sh --archive - + test-git-container: runs-on: ubuntu-latest container: bitnami/git:latest @@ -242,4 +242,4 @@ jobs: - name: Fix Checkout v3 uses: actions/checkout@v3 with: - path: v3 \ No newline at end of file + path: v3 diff --git a/.github/workflows/update-main-version.yml b/.github/workflows/update-main-version.yml index c1e046a..e955de8 100644 --- a/.github/workflows/update-main-version.yml +++ b/.github/workflows/update-main-version.yml @@ -17,14 +17,14 @@ jobs: tag: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 - with: - fetch-depth: 0 - - name: Git config - run: | - git config user.name github-actions - git config user.email github-actions@github.com - - name: Tag new target - run: git tag -f ${{ github.event.inputs.main_version }} ${{ github.event.inputs.target }} - - name: Push new tag - run: git push origin ${{ github.event.inputs.main_version }} --force + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - name: Git config + run: | + git config user.name github-actions + git config user.email github-actions@github.com + - name: Tag new target + run: git tag -f ${{ github.event.inputs.main_version }} ${{ github.event.inputs.target }} + - name: Push new tag + run: git push origin ${{ github.event.inputs.main_version }} --force diff --git a/.licensed.yml b/.licensed.yml index 15f6198..4e473ae 100644 --- a/.licensed.yml +++ b/.licensed.yml @@ -11,4 +11,4 @@ allowed: - unlicense reviewed: - npm: \ No newline at end of file + npm: diff --git a/.prettierignore b/.prettierignore index 2186947..154f191 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,4 @@ dist/ lib/ -node_modules/ \ No newline at end of file +node_modules/ +.licenses/ diff --git a/.prettierrc.json b/.prettierrc.json index 386485a..c34bafc 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -6,6 +6,5 @@ "singleQuote": true, "trailingComma": "none", "bracketSpacing": false, - "arrowParens": "avoid", - "parser": "typescript" -} \ No newline at end of file + "arrowParens": "avoid" +} diff --git a/CHANGELOG.md b/CHANGELOG.md index 035b61d..afa46ab 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,13 +1,16 @@ # Changelog ## v3.1.0 + - [Use @actions/core `saveState` and `getState`](https://github.com/actions/checkout/pull/939) - [Add `github-server-url` input](https://github.com/actions/checkout/pull/922) ## v3.0.2 + - [Add input `set-safe-directory`](https://github.com/actions/checkout/pull/770) ## v3.0.1 + - [Fixed an issue where checkout failed to run in container jobs due to the new git setting `safe.directory`](https://github.com/actions/checkout/pull/762) - [Bumped various npm package versions](https://github.com/actions/checkout/pull/744) @@ -66,7 +69,6 @@ - Aligns better with container actions, where `github.workspace` gets mapped in - Removed input `submodules` - ## v1 Refer [here](https://github.com/actions/checkout/blob/v1/CHANGELOG.md) for the V1 changelog diff --git a/README.md b/README.md index ddfc7ee..f22baf6 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl # Usage + ```yaml - uses: actions/checkout@v3 with: @@ -102,6 +103,7 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl # https://my-ghes-server.example.com github-server-url: '' ``` + # Scenarios @@ -187,7 +189,6 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl > - `${{ github.token }}` is scoped to the current repository, so if you want to checkout a different repository that is private you will need to provide your own [PAT](https://help.github.com/en/github/authenticating-to-github/creating-a-personal-access-token-for-the-command-line). - ## Checkout pull request HEAD commit instead of merge commit ```yaml diff --git a/__test__/git-auth-helper.test.ts b/__test__/git-auth-helper.test.ts index 2acec38..82b85b7 100644 --- a/__test__/git-auth-helper.test.ts +++ b/__test__/git-auth-helper.test.ts @@ -169,8 +169,9 @@ describe('git-auth-helper tests', () => { // Mock fs.promises.readFile const realReadFile = fs.promises.readFile - jest.spyOn(fs.promises, 'readFile').mockImplementation( - async (file: any, options: any): Promise => { + jest + .spyOn(fs.promises, 'readFile') + .mockImplementation(async (file: any, options: any): Promise => { const userKnownHostsPath = path.join( os.homedir(), '.ssh', @@ -181,8 +182,7 @@ describe('git-auth-helper tests', () => { } return await realReadFile(file, options) - } - ) + }) // Act const authHelper = gitAuthHelper.createAuthHelper(git, settings) diff --git a/__test__/ref-helper.test.ts b/__test__/ref-helper.test.ts index 0801532..8a8302a 100644 --- a/__test__/ref-helper.test.ts +++ b/__test__/ref-helper.test.ts @@ -7,11 +7,11 @@ let git: IGitCommandManager describe('ref-helper tests', () => { beforeEach(() => { - git = ({} as unknown) as IGitCommandManager + git = {} as unknown as IGitCommandManager }) it('getCheckoutInfo requires git', async () => { - const git = (null as unknown) as IGitCommandManager + const git = null as unknown as IGitCommandManager try { await refHelper.getCheckoutInfo(git, 'refs/heads/my/branch', commit) throw new Error('Should not reach here') diff --git a/__test__/retry-helper.test.ts b/__test__/retry-helper.test.ts index b4cb999..a5d3f79 100644 --- a/__test__/retry-helper.test.ts +++ b/__test__/retry-helper.test.ts @@ -68,7 +68,7 @@ describe('retry-helper tests', () => { it('all attempts fail succeeds', async () => { let attempts = 0 - let error: Error = (null as unknown) as Error + let error: Error = null as unknown as Error try { await retryHelper.execute(() => { throw new Error(`some error ${++attempts}`) diff --git a/action.yml b/action.yml index cab09eb..3ed7344 100644 --- a/action.yml +++ b/action.yml @@ -1,80 +1,80 @@ -name: 'Checkout' -description: 'Checkout a Git repository at a particular version' -inputs: - repository: - description: 'Repository name with owner. For example, actions/checkout' - default: ${{ github.repository }} - ref: - description: > - The branch, tag or SHA to checkout. When checking out the repository that - triggered a workflow, this defaults to the reference or SHA for that - event. Otherwise, uses the default branch. - token: - description: > - Personal access token (PAT) used to fetch the repository. The PAT is configured - with the local git config, which enables your scripts to run authenticated git - commands. The post-job step removes the PAT. - - - We recommend using a service account with the least permissions necessary. - Also when generating a new PAT, select the least scopes necessary. - - - [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) - default: ${{ github.token }} - ssh-key: - description: > - SSH key used to fetch the repository. The SSH key is configured with the local - git config, which enables your scripts to run authenticated git commands. - The post-job step removes the SSH key. - - - We recommend using a service account with the least permissions necessary. - - - [Learn more about creating and using - encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) - ssh-known-hosts: - description: > - Known hosts in addition to the user and global host key database. The public - SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example, - `ssh-keyscan github.com`. The public key for github.com is always implicitly added. - ssh-strict: - description: > - Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes` - and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to - configure additional hosts. - default: true - persist-credentials: - description: 'Whether to configure the token or SSH key with the local git config' - default: true - path: - description: 'Relative path under $GITHUB_WORKSPACE to place the repository' - clean: - description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching' - default: true - fetch-depth: - description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.' - default: 1 - lfs: - description: 'Whether to download Git-LFS files' - default: false - submodules: - description: > - Whether to checkout submodules: `true` to checkout submodules or `recursive` to - recursively checkout submodules. - - - When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are - converted to HTTPS. - default: false - set-safe-directory: - description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory ` - default: true - github-server-url: - description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com - required: false -runs: - using: node16 - main: dist/index.js - post: dist/index.js +name: 'Checkout' +description: 'Checkout a Git repository at a particular version' +inputs: + repository: + description: 'Repository name with owner. For example, actions/checkout' + default: ${{ github.repository }} + ref: + description: > + The branch, tag or SHA to checkout. When checking out the repository that + triggered a workflow, this defaults to the reference or SHA for that + event. Otherwise, uses the default branch. + token: + description: > + Personal access token (PAT) used to fetch the repository. The PAT is configured + with the local git config, which enables your scripts to run authenticated git + commands. The post-job step removes the PAT. + + + We recommend using a service account with the least permissions necessary. + Also when generating a new PAT, select the least scopes necessary. + + + [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) + default: ${{ github.token }} + ssh-key: + description: > + SSH key used to fetch the repository. The SSH key is configured with the local + git config, which enables your scripts to run authenticated git commands. + The post-job step removes the SSH key. + + + We recommend using a service account with the least permissions necessary. + + + [Learn more about creating and using + encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) + ssh-known-hosts: + description: > + Known hosts in addition to the user and global host key database. The public + SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example, + `ssh-keyscan github.com`. The public key for github.com is always implicitly added. + ssh-strict: + description: > + Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes` + and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to + configure additional hosts. + default: true + persist-credentials: + description: 'Whether to configure the token or SSH key with the local git config' + default: true + path: + description: 'Relative path under $GITHUB_WORKSPACE to place the repository' + clean: + description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching' + default: true + fetch-depth: + description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.' + default: 1 + lfs: + description: 'Whether to download Git-LFS files' + default: false + submodules: + description: > + Whether to checkout submodules: `true` to checkout submodules or `recursive` to + recursively checkout submodules. + + + When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are + converted to HTTPS. + default: false + set-safe-directory: + description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory ` + default: true + github-server-url: + description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com + required: false +runs: + using: node16 + main: dist/index.js + post: dist/index.js diff --git a/adrs/0153-checkout-v2.md b/adrs/0153-checkout-v2.md index 74730c7..3ac2c27 100644 --- a/adrs/0153-checkout-v2.md +++ b/adrs/0153-checkout-v2.md @@ -17,76 +17,77 @@ We want to take this opportunity to make behavioral changes, from v1. This docum ### Inputs ```yaml - repository: - description: 'Repository name with owner. For example, actions/checkout' - default: ${{ github.repository }} - ref: - description: > - The branch, tag or SHA to checkout. When checking out the repository that - triggered a workflow, this defaults to the reference or SHA for that - event. Otherwise, uses the default branch. - token: - description: > - Personal access token (PAT) used to fetch the repository. The PAT is configured - with the local git config, which enables your scripts to run authenticated git - commands. The post-job step removes the PAT. +repository: + description: 'Repository name with owner. For example, actions/checkout' + default: ${{ github.repository }} +ref: + description: > + The branch, tag or SHA to checkout. When checking out the repository that + triggered a workflow, this defaults to the reference or SHA for that + event. Otherwise, uses the default branch. +token: + description: > + Personal access token (PAT) used to fetch the repository. The PAT is configured + with the local git config, which enables your scripts to run authenticated git + commands. The post-job step removes the PAT. - We recommend using a service account with the least permissions necessary. - Also when generating a new PAT, select the least scopes necessary. + We recommend using a service account with the least permissions necessary. + Also when generating a new PAT, select the least scopes necessary. - [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) - default: ${{ github.token }} - ssh-key: - description: > - SSH key used to fetch the repository. The SSH key is configured with the local - git config, which enables your scripts to run authenticated git commands. - The post-job step removes the SSH key. + [Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) + default: ${{ github.token }} +ssh-key: + description: > + SSH key used to fetch the repository. The SSH key is configured with the local + git config, which enables your scripts to run authenticated git commands. + The post-job step removes the SSH key. - We recommend using a service account with the least permissions necessary. + We recommend using a service account with the least permissions necessary. - [Learn more about creating and using - encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) - ssh-known-hosts: - description: > - Known hosts in addition to the user and global host key database. The public - SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example, - `ssh-keyscan github.com`. The public key for github.com is always implicitly added. - ssh-strict: - description: > - Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes` - and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to - configure additional hosts. - default: true - persist-credentials: - description: 'Whether to configure the token or SSH key with the local git config' - default: true - path: - description: 'Relative path under $GITHUB_WORKSPACE to place the repository' - clean: - description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching' - default: true - fetch-depth: - description: 'Number of commits to fetch. 0 indicates all history for all tags and branches.' - default: 1 - lfs: - description: 'Whether to download Git-LFS files' - default: false - submodules: - description: > - Whether to checkout submodules: `true` to checkout submodules or `recursive` to - recursively checkout submodules. + [Learn more about creating and using + encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets) +ssh-known-hosts: + description: > + Known hosts in addition to the user and global host key database. The public + SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example, + `ssh-keyscan github.com`. The public key for github.com is always implicitly added. +ssh-strict: + description: > + Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes` + and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to + configure additional hosts. + default: true +persist-credentials: + description: 'Whether to configure the token or SSH key with the local git config' + default: true +path: + description: 'Relative path under $GITHUB_WORKSPACE to place the repository' +clean: + description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching' + default: true +fetch-depth: + description: 'Number of commits to fetch. 0 indicates all history for all tags and branches.' + default: 1 +lfs: + description: 'Whether to download Git-LFS files' + default: false +submodules: + description: > + Whether to checkout submodules: `true` to checkout submodules or `recursive` to + recursively checkout submodules. - When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are - converted to HTTPS. - default: false + When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are + converted to HTTPS. + default: false ``` Note: + - SSH support is new - `persist-credentials` is new - `path` behavior is different (refer [below](#path) for details) @@ -96,6 +97,7 @@ Note: When a sufficient version of git is not in the PATH, fallback to the [web API](https://developer.github.com/v3/repos/contents/#get-archive-link) to download a tarball/zipball. Note: + - LFS files are not included in the archive. Therefore fail if LFS is set to true. - Submodules are also not included in the archive. @@ -108,6 +110,7 @@ A post script will remove the credentials (cleanup for self-hosted). Users may opt-out by specifying `persist-credentials: false` Note: + - Users scripting `git commit` may need to set the username and email. The service does not provide any reasonable default value. Users can add `git config user.name ` and `git config user.email `. We will document this guidance. #### PAT @@ -115,6 +118,7 @@ Note: When using the `${{github.token}}` or a PAT, the token will be persisted in the local git config. The config key `http.https://github.com/.extraheader` enables an auth header to be specified on all authenticated commands `AUTHORIZATION: basic `. Note: + - The auth header is scoped to all of github `http.https://github.com/.extraheader` - Additional public remotes also just work. - If users want to authenticate to an additional private remote, they should provide the `token` input. @@ -140,6 +144,7 @@ git config core.sshCommand 'ssh -i "$RUNNER_TEMP/path-to-ssh-key" -o StrictHostK When the input `ssh-strict` is set to `false`, the options `CheckHostIP` and `StrictHostKeyChecking` will not be overridden. Note: + - When `ssh-strict` is set to `true` (default), the SSH option `CheckHostIP` can safely be disabled. Strict host checking verifies the server's public key. Therefore, IP verification is unnecessary and noisy. For example: @@ -158,6 +163,7 @@ If a SHA isn't available (e.g. multi repo), then fetch only the specified ref wi The input `fetch-depth` can be used to control the depth. Note: + - Fetching a single commit is supported by Git wire protocol version 2. The git client uses protocol version 0 by default. The desired protocol version can be overridden in the git config or on the fetch command line invocation (`-c protocol.version=2`). We will override on the fetch command line, for transparency. - Git client version 2.18+ (released June 2018) is required for wire protocol version 2. @@ -168,6 +174,7 @@ For CI, checkout will create a local ref with the upstream set. This allows user For PR, continue to checkout detached head. The PR branch is special - the branch and merge commit are created by the server. It doesn't match a users' local workflow. Note: + - Consider deleting all local refs during cleanup if that helps avoid collisions. More testing required. ### Path @@ -192,6 +199,7 @@ These behavioral changes align better with container actions. The [documented fi - `/github/workflow` Note: + - The tracking config will not be updated to reflect the path of the workflow repo. - Any existing workflow repo will not be moved when the checkout path changes. In fact some customers want to checkout the workflow repo twice, side by side against different branches. - Actions that need to operate only against the root of the self repo, should expose a `path` input. @@ -205,6 +213,7 @@ This default fits the mainline scenario well: single checkout For multi-checkout, users must specify the `path` input for at least one of the repositories. Note: + - An alternative is for the self repo to default to `./` and other repos default to ``. However nested layout is an atypical git layout and therefore is not a good default. Users should supply the path info. #### Example - Nested layout @@ -265,6 +274,7 @@ Credentials will be persisted in the submodules local git config too. ### Port to typescript The checkout action should be a typescript action on the GitHub graph, for the following reasons: + - Enables customers to fork the checkout repo and modify - Serves as an example for customers - Demystifies the checkout action manifest @@ -272,6 +282,7 @@ The checkout action should be a typescript action on the GitHub graph, for the f - Reduce the amount of runner code to port (if we ever do) Note: + - This means job-container images will need git in the PATH, for checkout. ### Branching strategy and release tags @@ -287,4 +298,4 @@ Note: - Update samples to consume `actions/checkout@v2` - Job containers now require git in the PATH for checkout, otherwise fallback to REST API - Minimum git version 2.18 -- Update problem matcher logic regarding source file verification (runner) \ No newline at end of file +- Update problem matcher logic regarding source file verification (runner) diff --git a/jest.config.js b/jest.config.js index 563d4cc..14e44f9 100644 --- a/jest.config.js +++ b/jest.config.js @@ -8,4 +8,4 @@ module.exports = { '^.+\\.ts$': 'ts-jest' }, verbose: true -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index 2870934..af9841c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -16160,9 +16160,9 @@ "dev": true }, "prettier": { - "version": "1.19.1", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", - "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.7.1.tgz", + "integrity": "sha512-ujppO+MkdPqoVINuDFDRLClm7D78qbDt0/NR+wp5FqEZOoTNAjPHWj17QRhu7geIHJfcNhRk1XVQmF8Bp3ye+g==", "dev": true }, "prettier-linter-helpers": { diff --git a/package.json b/package.json index d305679..9dcd1b4 100644 --- a/package.json +++ b/package.json @@ -5,8 +5,8 @@ "main": "lib/main.js", "scripts": { "build": "tsc && ncc build && node lib/misc/generate-docs.js", - "format": "prettier --write '**/*.ts'", - "format-check": "prettier --check '**/*.ts'", + "format": "prettier --write .", + "format-check": "prettier --check .", "lint": "eslint src/**/*.ts", "test": "jest", "licensed-check": "src/misc/licensed-check.sh", @@ -47,7 +47,7 @@ "jest": "^27.3.0", "jest-circus": "^27.3.0", "js-yaml": "^3.13.1", - "prettier": "^1.19.1", + "prettier": "^2.7.1", "ts-jest": "^27.0.7", "typescript": "^4.4.4" } diff --git a/src/fs-helper.ts b/src/fs-helper.ts index 3741d35..00ad941 100644 --- a/src/fs-helper.ts +++ b/src/fs-helper.ts @@ -18,8 +18,9 @@ export function directoryExistsSync(path: string, required?: boolean): boolean { } throw new Error( - `Encountered an error when checking whether path '${path}' exists: ${(error as any) - ?.message ?? error}` + `Encountered an error when checking whether path '${path}' exists: ${ + (error as any)?.message ?? error + }` ) } @@ -45,8 +46,9 @@ export function existsSync(path: string): boolean { } throw new Error( - `Encountered an error when checking whether path '${path}' exists: ${(error as any) - ?.message ?? error}` + `Encountered an error when checking whether path '${path}' exists: ${ + (error as any)?.message ?? error + }` ) } @@ -67,8 +69,9 @@ export function fileExistsSync(path: string): boolean { } throw new Error( - `Encountered an error when checking whether path '${path}' exists: ${(error as any) - ?.message ?? error}` + `Encountered an error when checking whether path '${path}' exists: ${ + (error as any)?.message ?? error + }` ) } diff --git a/src/git-auth-helper.ts b/src/git-auth-helper.ts index 3c6db8e..4124dad 100644 --- a/src/git-auth-helper.ts +++ b/src/git-auth-helper.ts @@ -49,7 +49,7 @@ class GitAuthHelper { gitSourceSettings: IGitSourceSettings | undefined ) { this.git = gitCommandManager - this.settings = gitSourceSettings || (({} as unknown) as IGitSourceSettings) + this.settings = gitSourceSettings || ({} as unknown as IGitSourceSettings) // Token auth header const serverUrl = urlHelper.getServerUrl(this.settings.githubServerUrl) diff --git a/src/input-helper.ts b/src/input-helper.ts index 237b06a..c2c182e 100644 --- a/src/input-helper.ts +++ b/src/input-helper.ts @@ -6,7 +6,7 @@ import * as workflowContextHelper from './workflow-context-helper' import {IGitSourceSettings} from './git-source-settings' export async function getInputs(): Promise { - const result = ({} as unknown) as IGitSourceSettings + const result = {} as unknown as IGitSourceSettings // GitHub workspace let githubWorkspacePath = process.env['GITHUB_WORKSPACE'] @@ -120,7 +120,8 @@ export async function getInputs(): Promise { (core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE' // Workflow organization ID - result.workflowOrganizationId = await workflowContextHelper.getOrganizationId() + result.workflowOrganizationId = + await workflowContextHelper.getOrganizationId() // Set safe.directory in git global config. result.setSafeDirectory = diff --git a/src/misc/generate-docs.ts b/src/misc/generate-docs.ts index 57d2888..a9729b2 100644 --- a/src/misc/generate-docs.ts +++ b/src/misc/generate-docs.ts @@ -12,8 +12,8 @@ function updateUsage( actionReference: string, actionYamlPath = 'action.yml', readmePath = 'README.md', - startToken = '', - endToken = '' + startToken = '\n', + endToken = '\n' ): void { if (!actionReference) { throw new Error('Parameter actionReference must not be empty') diff --git a/src/ref-helper.ts b/src/ref-helper.ts index ce875fc..f1fc379 100644 --- a/src/ref-helper.ts +++ b/src/ref-helper.ts @@ -24,7 +24,7 @@ export async function getCheckoutInfo( throw new Error('Args ref and commit cannot both be empty') } - const result = ({} as unknown) as ICheckoutInfo + const result = {} as unknown as ICheckoutInfo const upperRef = (ref || '').toUpperCase() // SHA only diff --git a/src/workflow-context-helper.ts b/src/workflow-context-helper.ts index c7d7918..5b342e6 100644 --- a/src/workflow-context-helper.ts +++ b/src/workflow-context-helper.ts @@ -23,8 +23,9 @@ export async function getOrganizationId(): Promise { return id as number } catch (err) { core.debug( - `Unable to load organization ID from GITHUB_EVENT_PATH: ${(err as any) - .message || err}` + `Unable to load organization ID from GITHUB_EVENT_PATH: ${ + (err as any).message || err + }` ) } } diff --git a/tsconfig.json b/tsconfig.json index b0ff5f7..d171df9 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,9 +2,7 @@ "compilerOptions": { "target": "es6", "module": "commonjs", - "lib": [ - "es6" - ], + "lib": ["es6"], "outDir": "./lib", "rootDir": "./src", "declaration": true,