Compare commits
7 Commits
main
...
releases/v
Author | SHA1 | Date | |
---|---|---|---|
|
ee0669bd1c | ||
|
dc323e67f1 | ||
|
e2f20e631a | ||
|
b2eb13baee | ||
|
7884fcad6b | ||
|
f67ee5d622 | ||
|
f25a3a9f25 |
20
.github/dependabot.yml
vendored
20
.github/dependabot.yml
vendored
@ -1,20 +0,0 @@
|
|||||||
---
|
|
||||||
version: 2
|
|
||||||
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: "npm"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
groups:
|
|
||||||
minor-npm-dependencies:
|
|
||||||
# NPM: Only group minor and patch updates (we want to carefully review major updates)
|
|
||||||
update-types: [minor, patch]
|
|
||||||
- package-ecosystem: "github-actions"
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: "weekly"
|
|
||||||
groups:
|
|
||||||
minor-actions-dependencies:
|
|
||||||
# GitHub Actions: Only group minor and patch updates (we want to carefully review major updates)
|
|
||||||
update-types: [minor, patch]
|
|
10
.github/workflows/check-dist.yml
vendored
10
.github/workflows/check-dist.yml
vendored
@ -22,12 +22,12 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Set Node.js 20.x
|
- name: Set Node.js 12.x
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 20.x
|
node-version: 12.x
|
||||||
|
|
||||||
- name: Install dependencies
|
- name: Install dependencies
|
||||||
run: npm ci
|
run: npm ci
|
||||||
@ -44,7 +44,7 @@ jobs:
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# If dist/ was different than expected, upload the expected version as an artifact
|
# If dist/ was different than expected, upload the expected version as an artifact
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v2
|
||||||
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
|
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
|
||||||
with:
|
with:
|
||||||
name: dist
|
name: dist
|
||||||
|
6
.github/workflows/codeql-analysis.yml
vendored
6
.github/workflows/codeql-analysis.yml
vendored
@ -39,10 +39,10 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Initialize CodeQL
|
- name: Initialize CodeQL
|
||||||
uses: github/codeql-action/init@v3
|
uses: github/codeql-action/init@v1
|
||||||
with:
|
with:
|
||||||
languages: ${{ matrix.language }}
|
languages: ${{ matrix.language }}
|
||||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||||
@ -55,4 +55,4 @@ jobs:
|
|||||||
- run: rm -rf dist # We want code scanning to analyze lib instead (individual .js files)
|
- run: rm -rf dist # We want code scanning to analyze lib instead (individual .js files)
|
||||||
|
|
||||||
- name: Perform CodeQL Analysis
|
- name: Perform CodeQL Analysis
|
||||||
uses: github/codeql-action/analyze@v3
|
uses: github/codeql-action/analyze@v1
|
||||||
|
2
.github/workflows/licensed.yml
vendored
2
.github/workflows/licensed.yml
vendored
@ -9,6 +9,6 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: Check licenses
|
name: Check licenses
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v2
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm run licensed-check
|
- run: npm run licensed-check
|
70
.github/workflows/test.yml
vendored
70
.github/workflows/test.yml
vendored
@ -7,19 +7,14 @@ on:
|
|||||||
- main
|
- main
|
||||||
- releases/*
|
- releases/*
|
||||||
|
|
||||||
|
|
||||||
# Note that when you see patterns like "ref: test-data/v2/basic" within this workflow,
|
|
||||||
# these refer to "test-data" branches on this actions/checkout repo.
|
|
||||||
# (For example, test-data/v2/basic -> https://github.com/actions/checkout/tree/test-data/v2/basic)
|
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/setup-node@v4
|
- uses: actions/setup-node@v1
|
||||||
with:
|
with:
|
||||||
node-version: 20.x
|
node-version: 12.x
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v2
|
||||||
- run: npm ci
|
- run: npm ci
|
||||||
- run: npm run build
|
- run: npm run build
|
||||||
- run: npm run format-check
|
- run: npm run format-check
|
||||||
@ -37,7 +32,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
# Clone this repo
|
# Clone this repo
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4.1.1
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Basic checkout
|
# Basic checkout
|
||||||
- name: Checkout basic
|
- name: Checkout basic
|
||||||
@ -77,53 +72,6 @@ jobs:
|
|||||||
shell: bash
|
shell: bash
|
||||||
run: __test__/verify-side-by-side.sh
|
run: __test__/verify-side-by-side.sh
|
||||||
|
|
||||||
# Filter
|
|
||||||
- name: Fetch filter
|
|
||||||
uses: ./
|
|
||||||
with:
|
|
||||||
filter: 'blob:none'
|
|
||||||
path: fetch-filter
|
|
||||||
|
|
||||||
- name: Verify fetch filter
|
|
||||||
run: __test__/verify-fetch-filter.sh
|
|
||||||
|
|
||||||
# Sparse checkout
|
|
||||||
- name: Sparse checkout
|
|
||||||
uses: ./
|
|
||||||
with:
|
|
||||||
sparse-checkout: |
|
|
||||||
__test__
|
|
||||||
.github
|
|
||||||
dist
|
|
||||||
path: sparse-checkout
|
|
||||||
|
|
||||||
- name: Verify sparse checkout
|
|
||||||
run: __test__/verify-sparse-checkout.sh
|
|
||||||
|
|
||||||
# Disabled sparse checkout in existing checkout
|
|
||||||
- name: Disabled sparse checkout
|
|
||||||
uses: ./
|
|
||||||
with:
|
|
||||||
path: sparse-checkout
|
|
||||||
|
|
||||||
- name: Verify disabled sparse checkout
|
|
||||||
shell: bash
|
|
||||||
run: set -x && ls -l sparse-checkout/src/git-command-manager.ts
|
|
||||||
|
|
||||||
# Sparse checkout (non-cone mode)
|
|
||||||
- name: Sparse checkout (non-cone mode)
|
|
||||||
uses: ./
|
|
||||||
with:
|
|
||||||
sparse-checkout: |
|
|
||||||
/__test__/
|
|
||||||
/.github/
|
|
||||||
/dist/
|
|
||||||
sparse-checkout-cone-mode: false
|
|
||||||
path: sparse-checkout-non-cone-mode
|
|
||||||
|
|
||||||
- name: Verify sparse checkout (non-cone mode)
|
|
||||||
run: __test__/verify-sparse-checkout-non-cone-mode.sh
|
|
||||||
|
|
||||||
# LFS
|
# LFS
|
||||||
- name: Checkout LFS
|
- name: Checkout LFS
|
||||||
uses: ./
|
uses: ./
|
||||||
@ -190,7 +138,7 @@ jobs:
|
|||||||
test-proxy:
|
test-proxy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: ghcr.io/actions/test-ubuntu-git:main.20240221.114913.703z
|
image: alpine/git:latest
|
||||||
options: --dns 127.0.0.1
|
options: --dns 127.0.0.1
|
||||||
services:
|
services:
|
||||||
squid-proxy:
|
squid-proxy:
|
||||||
@ -202,7 +150,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
# Clone this repo
|
# Clone this repo
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Basic checkout using git
|
# Basic checkout using git
|
||||||
- name: Checkout basic
|
- name: Checkout basic
|
||||||
@ -234,7 +182,7 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
# Clone this repo
|
# Clone this repo
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
# Basic checkout using git
|
# Basic checkout using git
|
||||||
- name: Checkout basic
|
- name: Checkout basic
|
||||||
@ -257,7 +205,7 @@ jobs:
|
|||||||
path: basic
|
path: basic
|
||||||
- name: Verify basic
|
- name: Verify basic
|
||||||
run: __test__/verify-basic.sh --archive
|
run: __test__/verify-basic.sh --archive
|
||||||
|
|
||||||
test-git-container:
|
test-git-container:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container: bitnami/git:latest
|
container: bitnami/git:latest
|
||||||
@ -294,4 +242,4 @@ jobs:
|
|||||||
- name: Fix Checkout v3
|
- name: Fix Checkout v3
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
path: v3
|
path: v3
|
35
.github/workflows/update-main-version.yml
vendored
35
.github/workflows/update-main-version.yml
vendored
@ -1,35 +0,0 @@
|
|||||||
name: Update Main Version
|
|
||||||
run-name: Move ${{ github.event.inputs.major_version }} to ${{ github.event.inputs.target }}
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
target:
|
|
||||||
description: The tag or reference to use
|
|
||||||
required: true
|
|
||||||
major_version:
|
|
||||||
type: choice
|
|
||||||
description: The major version to update
|
|
||||||
options:
|
|
||||||
- v4
|
|
||||||
- v3
|
|
||||||
- v2
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
tag:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
# Note this update workflow can also be used as a rollback tool.
|
|
||||||
# For that reason, it's best to pin `actions/checkout` to a known, stable version
|
|
||||||
# (typically, about two releases back).
|
|
||||||
- uses: actions/checkout@v4.1.1
|
|
||||||
with:
|
|
||||||
fetch-depth: 0
|
|
||||||
- name: Git config
|
|
||||||
run: |
|
|
||||||
git config user.name "github-actions[bot]"
|
|
||||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
||||||
- name: Tag new target
|
|
||||||
run: git tag -f ${{ github.event.inputs.major_version }} ${{ github.event.inputs.target }}
|
|
||||||
- name: Push new tag
|
|
||||||
run: git push origin ${{ github.event.inputs.major_version }} --force
|
|
59
.github/workflows/update-test-ubuntu-git.yml
vendored
59
.github/workflows/update-test-ubuntu-git.yml
vendored
@ -1,59 +0,0 @@
|
|||||||
name: Publish test-ubuntu-git Container
|
|
||||||
|
|
||||||
on:
|
|
||||||
# Use an on demand workflow trigger.
|
|
||||||
# (Forked copies of actions/checkout won't have permission to update GHCR.io/actions,
|
|
||||||
# so avoid trigger events that run automatically.)
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
publish:
|
|
||||||
description: 'Publish to ghcr.io? (main branch only)'
|
|
||||||
type: boolean
|
|
||||||
required: true
|
|
||||||
default: false
|
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY: ghcr.io
|
|
||||||
IMAGE_NAME: actions/test-ubuntu-git
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build-and-push-image:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
# Sets the permissions granted to the `GITHUB_TOKEN` for the actions in this job.
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Checkout repository
|
|
||||||
uses: actions/checkout@v4
|
|
||||||
|
|
||||||
# Use `docker/login-action` to log in to GHCR.io.
|
|
||||||
# Once published, the packages are scoped to the account defined here.
|
|
||||||
- name: Log in to the ghcr.io container registry
|
|
||||||
uses: docker/login-action@v3.1.0
|
|
||||||
with:
|
|
||||||
registry: ${{ env.REGISTRY }}
|
|
||||||
username: ${{ github.actor }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Format Timestamp
|
|
||||||
id: timestamp
|
|
||||||
# Use `date` with a custom format to achieve the key=value format GITHUB_OUTPUT expects.
|
|
||||||
run: date -u "+now=%Y%m%d.%H%M%S.%3NZ" >> "$GITHUB_OUTPUT"
|
|
||||||
|
|
||||||
- name: Issue Image Publish Warning
|
|
||||||
if: ${{ inputs.publish && github.ref_name != 'main' }}
|
|
||||||
run: echo "::warning::test-ubuntu-git images can only be published from the actions/checkout 'main' branch. Workflow will continue with push/publish disabled."
|
|
||||||
|
|
||||||
# Use `docker/build-push-action` to build (and optionally publish) the image.
|
|
||||||
- name: Build Docker Image (with optional Push)
|
|
||||||
uses: docker/build-push-action@v5.3.0
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
file: images/test-ubuntu-git.Dockerfile
|
|
||||||
# For now, attempts to push to ghcr.io must target the `main` branch.
|
|
||||||
# In the future, consider also allowing attempts from `releases/*` branches.
|
|
||||||
push: ${{ inputs.publish && github.ref_name == 'main' }}
|
|
||||||
tags: |
|
|
||||||
${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ github.ref_name }}.${{ steps.timestamp.outputs.now }}
|
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -1,5 +1,4 @@
|
|||||||
__test__/_temp
|
__test__/_temp
|
||||||
_temp/
|
_temp/
|
||||||
lib/
|
lib/
|
||||||
node_modules/
|
node_modules/
|
||||||
.vscode/
|
|
BIN
.licenses/npm/@actions/core.dep.yml
generated
BIN
.licenses/npm/@actions/core.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@actions/exec.dep.yml
generated
BIN
.licenses/npm/@actions/exec.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@actions/github.dep.yml
generated
BIN
.licenses/npm/@actions/github.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@actions/http-client-1.0.8.dep.yml
generated
Normal file
BIN
.licenses/npm/@actions/http-client-1.0.8.dep.yml
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/@actions/io.dep.yml
generated
BIN
.licenses/npm/@actions/io.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@actions/tool-cache.dep.yml
generated
BIN
.licenses/npm/@actions/tool-cache.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@fastify/busboy.dep.yml
generated
BIN
.licenses/npm/@fastify/busboy.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@octokit/auth-token.dep.yml
generated
BIN
.licenses/npm/@octokit/auth-token.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@octokit/endpoint.dep.yml
generated
BIN
.licenses/npm/@octokit/endpoint.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@octokit/graphql.dep.yml
generated
BIN
.licenses/npm/@octokit/graphql.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@octokit/plugin-paginate-rest.dep.yml
generated
BIN
.licenses/npm/@octokit/plugin-paginate-rest.dep.yml
generated
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/@octokit/request.dep.yml
generated
BIN
.licenses/npm/@octokit/request.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/@octokit/rest.dep.yml
generated
Normal file
BIN
.licenses/npm/@octokit/rest.dep.yml
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/@types/node.dep.yml
generated
Normal file
BIN
.licenses/npm/@types/node.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/atob-lite.dep.yml
generated
Normal file
BIN
.licenses/npm/atob-lite.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/before-after-hook.dep.yml
generated
BIN
.licenses/npm/before-after-hook.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/btoa-lite.dep.yml
generated
Normal file
BIN
.licenses/npm/btoa-lite.dep.yml
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/cross-spawn.dep.yml
generated
Normal file
BIN
.licenses/npm/cross-spawn.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/end-of-stream.dep.yml
generated
Normal file
BIN
.licenses/npm/end-of-stream.dep.yml
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/function-bind.dep.yml
generated
Normal file
BIN
.licenses/npm/function-bind.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/get-intrinsic.dep.yml
generated
Normal file
BIN
.licenses/npm/get-intrinsic.dep.yml
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/has-symbols.dep.yml
generated
Normal file
BIN
.licenses/npm/has-symbols.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/has.dep.yml
generated
Normal file
BIN
.licenses/npm/has.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/is-plain-object.dep.yml
generated
Normal file
BIN
.licenses/npm/is-plain-object.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/is-stream.dep.yml
generated
Normal file
BIN
.licenses/npm/is-stream.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/isexe.dep.yml
generated
Normal file
BIN
.licenses/npm/isexe.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/isobject.dep.yml
generated
Normal file
BIN
.licenses/npm/isobject.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/lodash.get.dep.yml
generated
Normal file
BIN
.licenses/npm/lodash.get.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/lodash.set.dep.yml
generated
Normal file
BIN
.licenses/npm/lodash.set.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/lodash.uniq.dep.yml
generated
Normal file
BIN
.licenses/npm/lodash.uniq.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/macos-release.dep.yml
generated
Normal file
BIN
.licenses/npm/macos-release.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/nice-try.dep.yml
generated
Normal file
BIN
.licenses/npm/nice-try.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/node-fetch.dep.yml
generated
Normal file
BIN
.licenses/npm/node-fetch.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/npm-run-path.dep.yml
generated
Normal file
BIN
.licenses/npm/npm-run-path.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/object-inspect.dep.yml
generated
Normal file
BIN
.licenses/npm/object-inspect.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/octokit-pagination-methods.dep.yml
generated
Normal file
BIN
.licenses/npm/octokit-pagination-methods.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/os-name.dep.yml
generated
Normal file
BIN
.licenses/npm/os-name.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/p-finally.dep.yml
generated
Normal file
BIN
.licenses/npm/p-finally.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/path-key.dep.yml
generated
Normal file
BIN
.licenses/npm/path-key.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/pump.dep.yml
generated
Normal file
BIN
.licenses/npm/pump.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/qs.dep.yml
generated
Normal file
BIN
.licenses/npm/qs.dep.yml
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/semver-6.3.0.dep.yml
generated
Normal file
BIN
.licenses/npm/semver-6.3.0.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/shebang-command.dep.yml
generated
Normal file
BIN
.licenses/npm/shebang-command.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/shebang-regex.dep.yml
generated
Normal file
BIN
.licenses/npm/shebang-regex.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/side-channel.dep.yml
generated
Normal file
BIN
.licenses/npm/side-channel.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/signal-exit.dep.yml
generated
Normal file
BIN
.licenses/npm/signal-exit.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/strip-eof.dep.yml
generated
Normal file
BIN
.licenses/npm/strip-eof.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/tr46.dep.yml
generated
Normal file
BIN
.licenses/npm/tr46.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/typed-rest-client.dep.yml
generated
Normal file
BIN
.licenses/npm/typed-rest-client.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/underscore.dep.yml
generated
Normal file
BIN
.licenses/npm/underscore.dep.yml
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/universal-user-agent-5.0.0.dep.yml
generated
Normal file
BIN
.licenses/npm/universal-user-agent-5.0.0.dep.yml
generated
Normal file
Binary file not shown.
Binary file not shown.
BIN
.licenses/npm/uuid-8.3.2.dep.yml
generated
BIN
.licenses/npm/uuid-8.3.2.dep.yml
generated
Binary file not shown.
BIN
.licenses/npm/webidl-conversions.dep.yml
generated
Normal file
BIN
.licenses/npm/webidl-conversions.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/whatwg-url.dep.yml
generated
Normal file
BIN
.licenses/npm/whatwg-url.dep.yml
generated
Normal file
Binary file not shown.
BIN
.licenses/npm/which.dep.yml
generated
Normal file
BIN
.licenses/npm/which.dep.yml
generated
Normal file
Binary file not shown.
Binary file not shown.
80
CHANGELOG.md
80
CHANGELOG.md
@ -1,85 +1,19 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
## v4.1.4
|
## v2.5.0
|
||||||
- Disable `extensions.worktreeConfig` when disabling `sparse-checkout` by @jww3 in https://github.com/actions/checkout/pull/1692
|
- [Bump @actions/core to v1.10.0](https://github.com/actions/checkout/pull/962)
|
||||||
- Add dependabot config by @cory-miller in https://github.com/actions/checkout/pull/1688
|
|
||||||
- Bump the minor-actions-dependencies group with 2 updates by @dependabot in https://github.com/actions/checkout/pull/1693
|
|
||||||
- Bump word-wrap from 1.2.3 to 1.2.5 by @dependabot in https://github.com/actions/checkout/pull/1643
|
|
||||||
|
|
||||||
## v4.1.3
|
## v2.4.2
|
||||||
- Check git version before attempting to disable `sparse-checkout` by @jww3 in https://github.com/actions/checkout/pull/1656
|
- [Add input `set-safe-directory`](https://github.com/actions/checkout/pull/776)
|
||||||
- Add SSH user parameter by @cory-miller in https://github.com/actions/checkout/pull/1685
|
|
||||||
- Update `actions/checkout` version in `update-main-version.yml` by @jww3 in https://github.com/actions/checkout/pull/1650
|
|
||||||
|
|
||||||
## v4.1.2
|
## v2.4.1
|
||||||
- Fix: Disable sparse checkout whenever `sparse-checkout` option is not present @dscho in https://github.com/actions/checkout/pull/1598
|
- [Set the safe directory option on git to prevent git commands failing when running in containers](https://github.com/actions/checkout/pull/762)
|
||||||
|
|
||||||
## v4.1.1
|
|
||||||
- Correct link to GitHub Docs by @peterbe in https://github.com/actions/checkout/pull/1511
|
|
||||||
- Link to release page from what's new section by @cory-miller in https://github.com/actions/checkout/pull/1514
|
|
||||||
|
|
||||||
## v4.1.0
|
|
||||||
- [Add support for partial checkout filters](https://github.com/actions/checkout/pull/1396)
|
|
||||||
|
|
||||||
## v4.0.0
|
|
||||||
- [Support fetching without the --progress option](https://github.com/actions/checkout/pull/1067)
|
|
||||||
- [Update to node20](https://github.com/actions/checkout/pull/1436)
|
|
||||||
|
|
||||||
## v3.6.0
|
|
||||||
- [Fix: Mark test scripts with Bash'isms to be run via Bash](https://github.com/actions/checkout/pull/1377)
|
|
||||||
- [Add option to fetch tags even if fetch-depth > 0](https://github.com/actions/checkout/pull/579)
|
|
||||||
|
|
||||||
## v3.5.3
|
|
||||||
- [Fix: Checkout fail in self-hosted runners when faulty submodule are checked-in](https://github.com/actions/checkout/pull/1196)
|
|
||||||
- [Fix typos found by codespell](https://github.com/actions/checkout/pull/1287)
|
|
||||||
- [Add support for sparse checkouts](https://github.com/actions/checkout/pull/1369)
|
|
||||||
|
|
||||||
## v3.5.2
|
|
||||||
- [Fix api endpoint for GHES](https://github.com/actions/checkout/pull/1289)
|
|
||||||
|
|
||||||
## v3.5.1
|
|
||||||
- [Fix slow checkout on Windows](https://github.com/actions/checkout/pull/1246)
|
|
||||||
|
|
||||||
## v3.5.0
|
|
||||||
* [Add new public key for known_hosts](https://github.com/actions/checkout/pull/1237)
|
|
||||||
|
|
||||||
## v3.4.0
|
|
||||||
- [Upgrade codeql actions to v2](https://github.com/actions/checkout/pull/1209)
|
|
||||||
- [Upgrade dependencies](https://github.com/actions/checkout/pull/1210)
|
|
||||||
- [Upgrade @actions/io](https://github.com/actions/checkout/pull/1225)
|
|
||||||
|
|
||||||
## v3.3.0
|
|
||||||
- [Implement branch list using callbacks from exec function](https://github.com/actions/checkout/pull/1045)
|
|
||||||
- [Add in explicit reference to private checkout options](https://github.com/actions/checkout/pull/1050)
|
|
||||||
- [Fix comment typos (that got added in #770)](https://github.com/actions/checkout/pull/1057)
|
|
||||||
|
|
||||||
## v3.2.0
|
|
||||||
- [Add GitHub Action to perform release](https://github.com/actions/checkout/pull/942)
|
|
||||||
- [Fix status badge](https://github.com/actions/checkout/pull/967)
|
|
||||||
- [Replace datadog/squid with ubuntu/squid Docker image](https://github.com/actions/checkout/pull/1002)
|
|
||||||
- [Wrap pipeline commands for submoduleForeach in quotes](https://github.com/actions/checkout/pull/964)
|
|
||||||
- [Update @actions/io to 1.1.2](https://github.com/actions/checkout/pull/1029)
|
|
||||||
- [Upgrading version to 3.2.0](https://github.com/actions/checkout/pull/1039)
|
|
||||||
|
|
||||||
## 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)
|
|
||||||
|
|
||||||
## v3.0.0
|
|
||||||
|
|
||||||
- [Update to node 16](https://github.com/actions/checkout/pull/689)
|
|
||||||
|
|
||||||
## v2.3.1
|
## v2.3.1
|
||||||
|
|
||||||
- [Fix default branch resolution for .wiki and when using SSH](https://github.com/actions/checkout/pull/284)
|
- [Fix default branch resolution for .wiki and when using SSH](https://github.com/actions/checkout/pull/284)
|
||||||
|
|
||||||
|
|
||||||
## v2.3.0
|
## v2.3.0
|
||||||
|
|
||||||
- [Fallback to the default branch](https://github.com/actions/checkout/pull/278)
|
- [Fallback to the default branch](https://github.com/actions/checkout/pull/278)
|
||||||
|
@ -1 +1 @@
|
|||||||
* @actions/actions-launch
|
* @actions/actions-runtime
|
||||||
|
@ -1,28 +0,0 @@
|
|||||||
# Contributing
|
|
||||||
|
|
||||||
## Submitting a pull request
|
|
||||||
|
|
||||||
1. Fork and clone the repository
|
|
||||||
1. Configure and install the dependencies: `npm install`
|
|
||||||
1. Create a new branch: `git checkout -b my-branch-name`
|
|
||||||
1. Make your change, add tests, and make sure the tests still pass: `npm run test`
|
|
||||||
1. Make sure your code is correctly formatted: `npm run format`
|
|
||||||
1. Update `dist/index.js` using `npm run build`. This creates a single javascript file that is used as an entrypoint for the action
|
|
||||||
1. Push to your fork and submit a pull request
|
|
||||||
1. Pat yourself on the back and wait for your pull request to be reviewed and merged
|
|
||||||
|
|
||||||
Here are a few things you can do that will increase the likelihood of your pull request being accepted:
|
|
||||||
|
|
||||||
- Write tests.
|
|
||||||
- Keep your change as focused as possible. If there are multiple changes you would like to make that are not dependent upon each other, consider submitting them as separate pull requests.
|
|
||||||
|
|
||||||
## Resources
|
|
||||||
|
|
||||||
- [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/)
|
|
||||||
- [Using Pull Requests](https://help.github.com/articles/about-pull-requests/)
|
|
||||||
- [GitHub Help](https://help.github.com)
|
|
||||||
- [Writing good commit messages](http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html)
|
|
||||||
|
|
||||||
Thanks! :heart: :heart: :heart:
|
|
||||||
|
|
||||||
GitHub Actions Team :octocat:
|
|
120
README.md
120
README.md
@ -1,10 +1,12 @@
|
|||||||
[![Build and Test](https://github.com/actions/checkout/actions/workflows/test.yml/badge.svg)](https://github.com/actions/checkout/actions/workflows/test.yml)
|
<p align="center">
|
||||||
|
<a href="https://github.com/actions/checkout"><img alt="GitHub Actions status" src="https://github.com/actions/checkout/workflows/test-local/badge.svg"></a>
|
||||||
|
</p>
|
||||||
|
|
||||||
# Checkout V4
|
# Checkout V2
|
||||||
|
|
||||||
This action checks-out your repository under `$GITHUB_WORKSPACE`, so your workflow can access it.
|
This action checks-out your repository under `$GITHUB_WORKSPACE`, so your workflow can access it.
|
||||||
|
|
||||||
Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set `fetch-depth: 0` to fetch all history for all branches and tags. Refer [here](https://docs.github.com/actions/using-workflows/events-that-trigger-workflows) to learn which commit `$GITHUB_SHA` points to for different events.
|
Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set `fetch-depth: 0` to fetch all history for all branches and tags. Refer [here](https://help.github.com/en/articles/events-that-trigger-workflows) to learn which commit `$GITHUB_SHA` points to for different events.
|
||||||
|
|
||||||
The auth token is persisted in the local git config. This enables your scripts to run authenticated git commands. The token is removed during post-job cleanup. Set `persist-credentials: false` to opt-out.
|
The auth token is persisted in the local git config. This enables your scripts to run authenticated git commands. The token is removed during post-job cleanup. Set `persist-credentials: false` to opt-out.
|
||||||
|
|
||||||
@ -12,13 +14,27 @@ When Git 2.18 or higher is not in your PATH, falls back to the REST API to downl
|
|||||||
|
|
||||||
# What's new
|
# What's new
|
||||||
|
|
||||||
Please refer to the [release page](https://github.com/actions/checkout/releases/latest) for the latest release notes.
|
- Improved performance
|
||||||
|
- Fetches only a single commit by default
|
||||||
|
- Script authenticated git commands
|
||||||
|
- Auth token persisted in the local git config
|
||||||
|
- Supports SSH
|
||||||
|
- Creates a local branch
|
||||||
|
- No longer detached HEAD when checking out a branch
|
||||||
|
- Improved layout
|
||||||
|
- The input `path` is always relative to $GITHUB_WORKSPACE
|
||||||
|
- Aligns better with container actions, where $GITHUB_WORKSPACE gets mapped in
|
||||||
|
- Fallback to REST API download
|
||||||
|
- When Git 2.18 or higher is not in the PATH, the REST API will be used to download the files
|
||||||
|
- When using a job container, the container's PATH is used
|
||||||
|
|
||||||
|
Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous versions.
|
||||||
|
|
||||||
# Usage
|
# Usage
|
||||||
|
|
||||||
<!-- start usage -->
|
<!-- start usage -->
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
# Repository name with owner. For example, actions/checkout
|
# Repository name with owner. For example, actions/checkout
|
||||||
# Default: ${{ github.repository }}
|
# Default: ${{ github.repository }}
|
||||||
@ -62,11 +78,6 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
# Default: true
|
# Default: true
|
||||||
ssh-strict: ''
|
ssh-strict: ''
|
||||||
|
|
||||||
# The user to use when connecting to the remote SSH host. By default 'git' is
|
|
||||||
# used.
|
|
||||||
# Default: git
|
|
||||||
ssh-user: ''
|
|
||||||
|
|
||||||
# Whether to configure the token or SSH key with the local git config
|
# Whether to configure the token or SSH key with the local git config
|
||||||
# Default: true
|
# Default: true
|
||||||
persist-credentials: ''
|
persist-credentials: ''
|
||||||
@ -78,31 +89,10 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
# Default: true
|
# Default: true
|
||||||
clean: ''
|
clean: ''
|
||||||
|
|
||||||
# Partially clone against a given filter. Overrides sparse-checkout if set.
|
|
||||||
# Default: null
|
|
||||||
filter: ''
|
|
||||||
|
|
||||||
# Do a sparse checkout on given patterns. Each pattern should be separated with
|
|
||||||
# new lines.
|
|
||||||
# Default: null
|
|
||||||
sparse-checkout: ''
|
|
||||||
|
|
||||||
# Specifies whether to use cone-mode when doing a sparse checkout.
|
|
||||||
# Default: true
|
|
||||||
sparse-checkout-cone-mode: ''
|
|
||||||
|
|
||||||
# Number of commits to fetch. 0 indicates all history for all branches and tags.
|
# Number of commits to fetch. 0 indicates all history for all branches and tags.
|
||||||
# Default: 1
|
# Default: 1
|
||||||
fetch-depth: ''
|
fetch-depth: ''
|
||||||
|
|
||||||
# Whether to fetch tags, even if fetch-depth > 0.
|
|
||||||
# Default: false
|
|
||||||
fetch-tags: ''
|
|
||||||
|
|
||||||
# Whether to show progress status output when fetching.
|
|
||||||
# Default: true
|
|
||||||
show-progress: ''
|
|
||||||
|
|
||||||
# Whether to download Git-LFS files
|
# Whether to download Git-LFS files
|
||||||
# Default: false
|
# Default: false
|
||||||
lfs: ''
|
lfs: ''
|
||||||
@ -120,20 +110,11 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
# config --global --add safe.directory <path>`
|
# config --global --add safe.directory <path>`
|
||||||
# Default: true
|
# Default: true
|
||||||
set-safe-directory: ''
|
set-safe-directory: ''
|
||||||
|
|
||||||
# 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
|
|
||||||
github-server-url: ''
|
|
||||||
```
|
```
|
||||||
<!-- end usage -->
|
<!-- end usage -->
|
||||||
|
|
||||||
# Scenarios
|
# Scenarios
|
||||||
|
|
||||||
- [Fetch only the root files](#Fetch-only-the-root-files)
|
|
||||||
- [Fetch only the root files and `.github` and `src` folder](#Fetch-only-the-root-files-and-github-and-src-folder)
|
|
||||||
- [Fetch only a single file](#Fetch-only-a-single-file)
|
|
||||||
- [Fetch all history for all tags and branches](#Fetch-all-history-for-all-tags-and-branches)
|
- [Fetch all history for all tags and branches](#Fetch-all-history-for-all-tags-and-branches)
|
||||||
- [Checkout a different branch](#Checkout-a-different-branch)
|
- [Checkout a different branch](#Checkout-a-different-branch)
|
||||||
- [Checkout HEAD^](#Checkout-HEAD)
|
- [Checkout HEAD^](#Checkout-HEAD)
|
||||||
@ -144,38 +125,10 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
- [Checkout pull request on closed event](#Checkout-pull-request-on-closed-event)
|
- [Checkout pull request on closed event](#Checkout-pull-request-on-closed-event)
|
||||||
- [Push a commit using the built-in token](#Push-a-commit-using-the-built-in-token)
|
- [Push a commit using the built-in token](#Push-a-commit-using-the-built-in-token)
|
||||||
|
|
||||||
## Fetch only the root files
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
sparse-checkout: .
|
|
||||||
```
|
|
||||||
|
|
||||||
## Fetch only the root files and `.github` and `src` folder
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
sparse-checkout: |
|
|
||||||
.github
|
|
||||||
src
|
|
||||||
```
|
|
||||||
|
|
||||||
## Fetch only a single file
|
|
||||||
|
|
||||||
```yaml
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
with:
|
|
||||||
sparse-checkout: |
|
|
||||||
README.md
|
|
||||||
sparse-checkout-cone-mode: false
|
|
||||||
```
|
|
||||||
|
|
||||||
## Fetch all history for all tags and branches
|
## Fetch all history for all tags and branches
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
```
|
```
|
||||||
@ -183,7 +136,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
## Checkout a different branch
|
## Checkout a different branch
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
ref: my-branch
|
ref: my-branch
|
||||||
```
|
```
|
||||||
@ -191,7 +144,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
## Checkout HEAD^
|
## Checkout HEAD^
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
fetch-depth: 2
|
fetch-depth: 2
|
||||||
- run: git checkout HEAD^
|
- run: git checkout HEAD^
|
||||||
@ -201,42 +154,40 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
path: main
|
path: main
|
||||||
|
|
||||||
- name: Checkout tools repo
|
- name: Checkout tools repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
repository: my-org/my-tools
|
repository: my-org/my-tools
|
||||||
path: my-tools
|
path: my-tools
|
||||||
```
|
```
|
||||||
> - If your secondary repository is private you will need to add the option noted in [Checkout multiple repos (private)](#Checkout-multiple-repos-private)
|
|
||||||
|
|
||||||
## Checkout multiple repos (nested)
|
## Checkout multiple repos (nested)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
- name: Checkout tools repo
|
- name: Checkout tools repo
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
repository: my-org/my-tools
|
repository: my-org/my-tools
|
||||||
path: my-tools
|
path: my-tools
|
||||||
```
|
```
|
||||||
> - If your secondary repository is private you will need to add the option noted in [Checkout multiple repos (private)](#Checkout-multiple-repos-private)
|
|
||||||
|
|
||||||
## Checkout multiple repos (private)
|
## Checkout multiple repos (private)
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
path: main
|
path: main
|
||||||
|
|
||||||
- name: Checkout private tools
|
- name: Checkout private tools
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
repository: my-org/my-private-tools
|
repository: my-org/my-private-tools
|
||||||
token: ${{ secrets.GH_PAT }} # `GH_PAT` is a secret that contains your PAT
|
token: ${{ secrets.GH_PAT }} # `GH_PAT` is a secret that contains your PAT
|
||||||
@ -249,7 +200,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
## Checkout pull request HEAD commit instead of merge commit
|
## Checkout pull request HEAD commit instead of merge commit
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
with:
|
with:
|
||||||
ref: ${{ github.event.pull_request.head.sha }}
|
ref: ${{ github.event.pull_request.head.sha }}
|
||||||
```
|
```
|
||||||
@ -265,7 +216,7 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
```
|
```
|
||||||
|
|
||||||
## Push a commit using the built-in token
|
## Push a commit using the built-in token
|
||||||
@ -276,12 +227,11 @@ jobs:
|
|||||||
build:
|
build:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v2
|
||||||
- run: |
|
- run: |
|
||||||
date > generated.txt
|
date > generated.txt
|
||||||
# Note: the following account information will not work on GHES
|
git config user.name github-actions
|
||||||
git config user.name "github-actions[bot]"
|
git config user.email github-actions@github.com
|
||||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
||||||
git add .
|
git add .
|
||||||
git commit -m "generated"
|
git commit -m "generated"
|
||||||
git push
|
git push
|
||||||
|
@ -20,7 +20,6 @@ let tempHomedir: string
|
|||||||
let git: IGitCommandManager & {env: {[key: string]: string}}
|
let git: IGitCommandManager & {env: {[key: string]: string}}
|
||||||
let settings: IGitSourceSettings
|
let settings: IGitSourceSettings
|
||||||
let sshPath: string
|
let sshPath: string
|
||||||
let githubServerUrl: string
|
|
||||||
|
|
||||||
describe('git-auth-helper tests', () => {
|
describe('git-auth-helper tests', () => {
|
||||||
beforeAll(async () => {
|
beforeAll(async () => {
|
||||||
@ -68,18 +67,11 @@ describe('git-auth-helper tests', () => {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
async function testAuthHeader(
|
const configureAuth_configuresAuthHeader =
|
||||||
testName: string,
|
'configureAuth configures auth header'
|
||||||
serverUrl: string | undefined = undefined
|
it(configureAuth_configuresAuthHeader, async () => {
|
||||||
) {
|
|
||||||
// Arrange
|
// Arrange
|
||||||
let expectedServerUrl = 'https://github.com'
|
await setup(configureAuth_configuresAuthHeader)
|
||||||
if (serverUrl) {
|
|
||||||
githubServerUrl = serverUrl
|
|
||||||
expectedServerUrl = githubServerUrl
|
|
||||||
}
|
|
||||||
|
|
||||||
await setup(testName)
|
|
||||||
expect(settings.authToken).toBeTruthy() // sanity check
|
expect(settings.authToken).toBeTruthy() // sanity check
|
||||||
const authHelper = gitAuthHelper.createAuthHelper(git, settings)
|
const authHelper = gitAuthHelper.createAuthHelper(git, settings)
|
||||||
|
|
||||||
@ -96,33 +88,9 @@ describe('git-auth-helper tests', () => {
|
|||||||
).toString('base64')
|
).toString('base64')
|
||||||
expect(
|
expect(
|
||||||
configContent.indexOf(
|
configContent.indexOf(
|
||||||
`http.${expectedServerUrl}/.extraheader AUTHORIZATION: basic ${basicCredential}`
|
`http.https://github.com/.extraheader AUTHORIZATION: basic ${basicCredential}`
|
||||||
)
|
)
|
||||||
).toBeGreaterThanOrEqual(0)
|
).toBeGreaterThanOrEqual(0)
|
||||||
}
|
|
||||||
|
|
||||||
const configureAuth_configuresAuthHeader =
|
|
||||||
'configureAuth configures auth header'
|
|
||||||
it(configureAuth_configuresAuthHeader, async () => {
|
|
||||||
await testAuthHeader(configureAuth_configuresAuthHeader)
|
|
||||||
})
|
|
||||||
|
|
||||||
const configureAuth_AcceptsGitHubServerUrl =
|
|
||||||
'inject https://my-ghes-server.com as github server url'
|
|
||||||
it(configureAuth_AcceptsGitHubServerUrl, async () => {
|
|
||||||
await testAuthHeader(
|
|
||||||
configureAuth_AcceptsGitHubServerUrl,
|
|
||||||
'https://my-ghes-server.com'
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
const configureAuth_AcceptsGitHubServerUrlSetToGHEC =
|
|
||||||
'inject https://github.com as github server url'
|
|
||||||
it(configureAuth_AcceptsGitHubServerUrlSetToGHEC, async () => {
|
|
||||||
await testAuthHeader(
|
|
||||||
configureAuth_AcceptsGitHubServerUrl,
|
|
||||||
'https://github.com'
|
|
||||||
)
|
|
||||||
})
|
})
|
||||||
|
|
||||||
const configureAuth_configuresAuthHeaderEvenWhenPersistCredentialsFalse =
|
const configureAuth_configuresAuthHeaderEvenWhenPersistCredentialsFalse =
|
||||||
@ -169,9 +137,8 @@ describe('git-auth-helper tests', () => {
|
|||||||
|
|
||||||
// Mock fs.promises.readFile
|
// Mock fs.promises.readFile
|
||||||
const realReadFile = fs.promises.readFile
|
const realReadFile = fs.promises.readFile
|
||||||
jest
|
jest.spyOn(fs.promises, 'readFile').mockImplementation(
|
||||||
.spyOn(fs.promises, 'readFile')
|
async (file: any, options: any): Promise<Buffer> => {
|
||||||
.mockImplementation(async (file: any, options: any): Promise<Buffer> => {
|
|
||||||
const userKnownHostsPath = path.join(
|
const userKnownHostsPath = path.join(
|
||||||
os.homedir(),
|
os.homedir(),
|
||||||
'.ssh',
|
'.ssh',
|
||||||
@ -182,7 +149,8 @@ describe('git-auth-helper tests', () => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
return await realReadFile(file, options)
|
return await realReadFile(file, options)
|
||||||
})
|
}
|
||||||
|
)
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
const authHelper = gitAuthHelper.createAuthHelper(git, settings)
|
const authHelper = gitAuthHelper.createAuthHelper(git, settings)
|
||||||
@ -727,9 +695,6 @@ async function setup(testName: string): Promise<void> {
|
|||||||
branchDelete: jest.fn(),
|
branchDelete: jest.fn(),
|
||||||
branchExists: jest.fn(),
|
branchExists: jest.fn(),
|
||||||
branchList: jest.fn(),
|
branchList: jest.fn(),
|
||||||
disableSparseCheckout: jest.fn(),
|
|
||||||
sparseCheckout: jest.fn(),
|
|
||||||
sparseCheckoutNonConeMode: jest.fn(),
|
|
||||||
checkout: jest.fn(),
|
checkout: jest.fn(),
|
||||||
checkoutDetach: jest.fn(),
|
checkoutDetach: jest.fn(),
|
||||||
config: jest.fn(
|
config: jest.fn(
|
||||||
@ -773,9 +738,6 @@ async function setup(testName: string): Promise<void> {
|
|||||||
return ''
|
return ''
|
||||||
}),
|
}),
|
||||||
submoduleSync: jest.fn(),
|
submoduleSync: jest.fn(),
|
||||||
submoduleStatus: jest.fn(async () => {
|
|
||||||
return true
|
|
||||||
}),
|
|
||||||
submoduleUpdate: jest.fn(),
|
submoduleUpdate: jest.fn(),
|
||||||
tagExists: jest.fn(),
|
tagExists: jest.fn(),
|
||||||
tryClean: jest.fn(),
|
tryClean: jest.fn(),
|
||||||
@ -796,20 +758,14 @@ async function setup(testName: string): Promise<void> {
|
|||||||
),
|
),
|
||||||
tryDisableAutomaticGarbageCollection: jest.fn(),
|
tryDisableAutomaticGarbageCollection: jest.fn(),
|
||||||
tryGetFetchUrl: jest.fn(),
|
tryGetFetchUrl: jest.fn(),
|
||||||
tryReset: jest.fn(),
|
tryReset: jest.fn()
|
||||||
version: jest.fn()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
authToken: 'some auth token',
|
authToken: 'some auth token',
|
||||||
clean: true,
|
clean: true,
|
||||||
commit: '',
|
commit: '',
|
||||||
filter: undefined,
|
|
||||||
sparseCheckout: [],
|
|
||||||
sparseCheckoutConeMode: true,
|
|
||||||
fetchDepth: 1,
|
fetchDepth: 1,
|
||||||
fetchTags: false,
|
|
||||||
showProgress: true,
|
|
||||||
lfs: false,
|
lfs: false,
|
||||||
submodules: false,
|
submodules: false,
|
||||||
nestedSubmodules: false,
|
nestedSubmodules: false,
|
||||||
@ -821,10 +777,8 @@ async function setup(testName: string): Promise<void> {
|
|||||||
sshKey: sshPath ? 'some ssh private key' : '',
|
sshKey: sshPath ? 'some ssh private key' : '',
|
||||||
sshKnownHosts: '',
|
sshKnownHosts: '',
|
||||||
sshStrict: true,
|
sshStrict: true,
|
||||||
sshUser: '',
|
|
||||||
workflowOrganizationId: 123456,
|
workflowOrganizationId: 123456,
|
||||||
setSafeDirectory: true,
|
setSafeDirectory: true
|
||||||
githubServerUrl: githubServerUrl
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,378 +0,0 @@
|
|||||||
import * as exec from '@actions/exec'
|
|
||||||
import * as fshelper from '../lib/fs-helper'
|
|
||||||
import * as commandManager from '../lib/git-command-manager'
|
|
||||||
|
|
||||||
let git: commandManager.IGitCommandManager
|
|
||||||
let mockExec = jest.fn()
|
|
||||||
|
|
||||||
describe('git-auth-helper tests', () => {
|
|
||||||
beforeAll(async () => {})
|
|
||||||
|
|
||||||
beforeEach(async () => {
|
|
||||||
jest.spyOn(fshelper, 'fileExistsSync').mockImplementation(jest.fn())
|
|
||||||
jest.spyOn(fshelper, 'directoryExistsSync').mockImplementation(jest.fn())
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.restoreAllMocks()
|
|
||||||
})
|
|
||||||
|
|
||||||
afterAll(() => {})
|
|
||||||
|
|
||||||
it('branch list matches', async () => {
|
|
||||||
mockExec.mockImplementation((path, args, options) => {
|
|
||||||
console.log(args, options.listeners.stdout)
|
|
||||||
|
|
||||||
if (args.includes('version')) {
|
|
||||||
options.listeners.stdout(Buffer.from('2.18'))
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.includes('rev-parse')) {
|
|
||||||
options.listeners.stdline(Buffer.from('refs/heads/foo'))
|
|
||||||
options.listeners.stdline(Buffer.from('refs/heads/bar'))
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1
|
|
||||||
})
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
|
|
||||||
let branches = await git.branchList(false)
|
|
||||||
|
|
||||||
expect(branches).toHaveLength(2)
|
|
||||||
expect(branches.sort()).toEqual(['foo', 'bar'].sort())
|
|
||||||
})
|
|
||||||
|
|
||||||
it('ambiguous ref name output is captured', async () => {
|
|
||||||
mockExec.mockImplementation((path, args, options) => {
|
|
||||||
console.log(args, options.listeners.stdout)
|
|
||||||
|
|
||||||
if (args.includes('version')) {
|
|
||||||
options.listeners.stdout(Buffer.from('2.18'))
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
if (args.includes('rev-parse')) {
|
|
||||||
options.listeners.stdline(Buffer.from('refs/heads/foo'))
|
|
||||||
// If refs/tags/v1 and refs/heads/tags/v1 existed on this repository
|
|
||||||
options.listeners.errline(
|
|
||||||
Buffer.from("error: refname 'tags/v1' is ambiguous")
|
|
||||||
)
|
|
||||||
return 0
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1
|
|
||||||
})
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
|
|
||||||
let branches = await git.branchList(false)
|
|
||||||
|
|
||||||
expect(branches).toHaveLength(1)
|
|
||||||
expect(branches.sort()).toEqual(['foo'].sort())
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
describe('Test fetchDepth and fetchTags options', () => {
|
|
||||||
beforeEach(async () => {
|
|
||||||
jest.spyOn(fshelper, 'fileExistsSync').mockImplementation(jest.fn())
|
|
||||||
jest.spyOn(fshelper, 'directoryExistsSync').mockImplementation(jest.fn())
|
|
||||||
mockExec.mockImplementation((path, args, options) => {
|
|
||||||
console.log(args, options.listeners.stdout)
|
|
||||||
|
|
||||||
if (args.includes('version')) {
|
|
||||||
options.listeners.stdout(Buffer.from('2.18'))
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0
|
|
||||||
})
|
|
||||||
})
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
jest.restoreAllMocks()
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call execGit with the correct arguments when fetchDepth is 0 and fetchTags is true', async () => {
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
|
|
||||||
const refSpec = ['refspec1', 'refspec2']
|
|
||||||
const options = {
|
|
||||||
filter: 'filterValue',
|
|
||||||
fetchDepth: 0,
|
|
||||||
fetchTags: true
|
|
||||||
}
|
|
||||||
|
|
||||||
await git.fetch(refSpec, options)
|
|
||||||
|
|
||||||
expect(mockExec).toHaveBeenCalledWith(
|
|
||||||
expect.any(String),
|
|
||||||
[
|
|
||||||
'-c',
|
|
||||||
'protocol.version=2',
|
|
||||||
'fetch',
|
|
||||||
'--prune',
|
|
||||||
'--no-recurse-submodules',
|
|
||||||
'--filter=filterValue',
|
|
||||||
'origin',
|
|
||||||
'refspec1',
|
|
||||||
'refspec2'
|
|
||||||
],
|
|
||||||
expect.any(Object)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call execGit with the correct arguments when fetchDepth is 0 and fetchTags is false', async () => {
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
const refSpec = ['refspec1', 'refspec2']
|
|
||||||
const options = {
|
|
||||||
filter: 'filterValue',
|
|
||||||
fetchDepth: 0,
|
|
||||||
fetchTags: false
|
|
||||||
}
|
|
||||||
|
|
||||||
await git.fetch(refSpec, options)
|
|
||||||
|
|
||||||
expect(mockExec).toHaveBeenCalledWith(
|
|
||||||
expect.any(String),
|
|
||||||
[
|
|
||||||
'-c',
|
|
||||||
'protocol.version=2',
|
|
||||||
'fetch',
|
|
||||||
'--no-tags',
|
|
||||||
'--prune',
|
|
||||||
'--no-recurse-submodules',
|
|
||||||
'--filter=filterValue',
|
|
||||||
'origin',
|
|
||||||
'refspec1',
|
|
||||||
'refspec2'
|
|
||||||
],
|
|
||||||
expect.any(Object)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call execGit with the correct arguments when fetchDepth is 1 and fetchTags is false', async () => {
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
const refSpec = ['refspec1', 'refspec2']
|
|
||||||
const options = {
|
|
||||||
filter: 'filterValue',
|
|
||||||
fetchDepth: 1,
|
|
||||||
fetchTags: false
|
|
||||||
}
|
|
||||||
|
|
||||||
await git.fetch(refSpec, options)
|
|
||||||
|
|
||||||
expect(mockExec).toHaveBeenCalledWith(
|
|
||||||
expect.any(String),
|
|
||||||
[
|
|
||||||
'-c',
|
|
||||||
'protocol.version=2',
|
|
||||||
'fetch',
|
|
||||||
'--no-tags',
|
|
||||||
'--prune',
|
|
||||||
'--no-recurse-submodules',
|
|
||||||
'--filter=filterValue',
|
|
||||||
'--depth=1',
|
|
||||||
'origin',
|
|
||||||
'refspec1',
|
|
||||||
'refspec2'
|
|
||||||
],
|
|
||||||
expect.any(Object)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call execGit with the correct arguments when fetchDepth is 1 and fetchTags is true', async () => {
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
const refSpec = ['refspec1', 'refspec2']
|
|
||||||
const options = {
|
|
||||||
filter: 'filterValue',
|
|
||||||
fetchDepth: 1,
|
|
||||||
fetchTags: true
|
|
||||||
}
|
|
||||||
|
|
||||||
await git.fetch(refSpec, options)
|
|
||||||
|
|
||||||
expect(mockExec).toHaveBeenCalledWith(
|
|
||||||
expect.any(String),
|
|
||||||
[
|
|
||||||
'-c',
|
|
||||||
'protocol.version=2',
|
|
||||||
'fetch',
|
|
||||||
'--prune',
|
|
||||||
'--no-recurse-submodules',
|
|
||||||
'--filter=filterValue',
|
|
||||||
'--depth=1',
|
|
||||||
'origin',
|
|
||||||
'refspec1',
|
|
||||||
'refspec2'
|
|
||||||
],
|
|
||||||
expect.any(Object)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call execGit with the correct arguments when showProgress is true', async () => {
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
const refSpec = ['refspec1', 'refspec2']
|
|
||||||
const options = {
|
|
||||||
filter: 'filterValue',
|
|
||||||
showProgress: true
|
|
||||||
}
|
|
||||||
|
|
||||||
await git.fetch(refSpec, options)
|
|
||||||
|
|
||||||
expect(mockExec).toHaveBeenCalledWith(
|
|
||||||
expect.any(String),
|
|
||||||
[
|
|
||||||
'-c',
|
|
||||||
'protocol.version=2',
|
|
||||||
'fetch',
|
|
||||||
'--no-tags',
|
|
||||||
'--prune',
|
|
||||||
'--no-recurse-submodules',
|
|
||||||
'--progress',
|
|
||||||
'--filter=filterValue',
|
|
||||||
'origin',
|
|
||||||
'refspec1',
|
|
||||||
'refspec2'
|
|
||||||
],
|
|
||||||
expect.any(Object)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call execGit with the correct arguments when fetchDepth is 42 and showProgress is true', async () => {
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
const refSpec = ['refspec1', 'refspec2']
|
|
||||||
const options = {
|
|
||||||
filter: 'filterValue',
|
|
||||||
fetchDepth: 42,
|
|
||||||
showProgress: true
|
|
||||||
}
|
|
||||||
|
|
||||||
await git.fetch(refSpec, options)
|
|
||||||
|
|
||||||
expect(mockExec).toHaveBeenCalledWith(
|
|
||||||
expect.any(String),
|
|
||||||
[
|
|
||||||
'-c',
|
|
||||||
'protocol.version=2',
|
|
||||||
'fetch',
|
|
||||||
'--no-tags',
|
|
||||||
'--prune',
|
|
||||||
'--no-recurse-submodules',
|
|
||||||
'--progress',
|
|
||||||
'--filter=filterValue',
|
|
||||||
'--depth=42',
|
|
||||||
'origin',
|
|
||||||
'refspec1',
|
|
||||||
'refspec2'
|
|
||||||
],
|
|
||||||
expect.any(Object)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
|
|
||||||
it('should call execGit with the correct arguments when fetchTags is true and showProgress is true', async () => {
|
|
||||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
|
||||||
|
|
||||||
const workingDirectory = 'test'
|
|
||||||
const lfs = false
|
|
||||||
const doSparseCheckout = false
|
|
||||||
git = await commandManager.createCommandManager(
|
|
||||||
workingDirectory,
|
|
||||||
lfs,
|
|
||||||
doSparseCheckout
|
|
||||||
)
|
|
||||||
const refSpec = ['refspec1', 'refspec2']
|
|
||||||
const options = {
|
|
||||||
filter: 'filterValue',
|
|
||||||
fetchTags: true,
|
|
||||||
showProgress: true
|
|
||||||
}
|
|
||||||
|
|
||||||
await git.fetch(refSpec, options)
|
|
||||||
|
|
||||||
expect(mockExec).toHaveBeenCalledWith(
|
|
||||||
expect.any(String),
|
|
||||||
[
|
|
||||||
'-c',
|
|
||||||
'protocol.version=2',
|
|
||||||
'fetch',
|
|
||||||
'--prune',
|
|
||||||
'--no-recurse-submodules',
|
|
||||||
'--progress',
|
|
||||||
'--filter=filterValue',
|
|
||||||
'origin',
|
|
||||||
'refspec1',
|
|
||||||
'refspec2'
|
|
||||||
],
|
|
||||||
expect.any(Object)
|
|
||||||
)
|
|
||||||
})
|
|
||||||
})
|
|
@ -281,65 +281,6 @@ describe('git-directory-helper tests', () => {
|
|||||||
expect(git.branchDelete).toHaveBeenCalledWith(false, 'local-branch-2')
|
expect(git.branchDelete).toHaveBeenCalledWith(false, 'local-branch-2')
|
||||||
})
|
})
|
||||||
|
|
||||||
const cleanWhenSubmoduleStatusIsFalse =
|
|
||||||
'cleans when submodule status is false'
|
|
||||||
|
|
||||||
it(cleanWhenSubmoduleStatusIsFalse, async () => {
|
|
||||||
// Arrange
|
|
||||||
await setup(cleanWhenSubmoduleStatusIsFalse)
|
|
||||||
await fs.promises.writeFile(path.join(repositoryPath, 'my-file'), '')
|
|
||||||
|
|
||||||
//mock bad submodule
|
|
||||||
|
|
||||||
const submoduleStatus = git.submoduleStatus as jest.Mock<any, any>
|
|
||||||
submoduleStatus.mockImplementation(async (remote: boolean) => {
|
|
||||||
return false
|
|
||||||
})
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await gitDirectoryHelper.prepareExistingDirectory(
|
|
||||||
git,
|
|
||||||
repositoryPath,
|
|
||||||
repositoryUrl,
|
|
||||||
clean,
|
|
||||||
ref
|
|
||||||
)
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
const files = await fs.promises.readdir(repositoryPath)
|
|
||||||
expect(files).toHaveLength(0)
|
|
||||||
expect(git.tryClean).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
const doesNotCleanWhenSubmoduleStatusIsTrue =
|
|
||||||
'does not clean when submodule status is true'
|
|
||||||
|
|
||||||
it(doesNotCleanWhenSubmoduleStatusIsTrue, async () => {
|
|
||||||
// Arrange
|
|
||||||
await setup(doesNotCleanWhenSubmoduleStatusIsTrue)
|
|
||||||
await fs.promises.writeFile(path.join(repositoryPath, 'my-file'), '')
|
|
||||||
|
|
||||||
const submoduleStatus = git.submoduleStatus as jest.Mock<any, any>
|
|
||||||
submoduleStatus.mockImplementation(async (remote: boolean) => {
|
|
||||||
return true
|
|
||||||
})
|
|
||||||
|
|
||||||
// Act
|
|
||||||
await gitDirectoryHelper.prepareExistingDirectory(
|
|
||||||
git,
|
|
||||||
repositoryPath,
|
|
||||||
repositoryUrl,
|
|
||||||
clean,
|
|
||||||
ref
|
|
||||||
)
|
|
||||||
|
|
||||||
// Assert
|
|
||||||
|
|
||||||
const files = await fs.promises.readdir(repositoryPath)
|
|
||||||
expect(files.sort()).toEqual(['.git', 'my-file'])
|
|
||||||
expect(git.tryClean).toHaveBeenCalled()
|
|
||||||
})
|
|
||||||
|
|
||||||
const removesLockFiles = 'removes lock files'
|
const removesLockFiles = 'removes lock files'
|
||||||
it(removesLockFiles, async () => {
|
it(removesLockFiles, async () => {
|
||||||
// Arrange
|
// Arrange
|
||||||
@ -462,9 +403,6 @@ async function setup(testName: string): Promise<void> {
|
|||||||
branchList: jest.fn(async () => {
|
branchList: jest.fn(async () => {
|
||||||
return []
|
return []
|
||||||
}),
|
}),
|
||||||
disableSparseCheckout: jest.fn(),
|
|
||||||
sparseCheckout: jest.fn(),
|
|
||||||
sparseCheckoutNonConeMode: jest.fn(),
|
|
||||||
checkout: jest.fn(),
|
checkout: jest.fn(),
|
||||||
checkoutDetach: jest.fn(),
|
checkoutDetach: jest.fn(),
|
||||||
config: jest.fn(),
|
config: jest.fn(),
|
||||||
@ -485,9 +423,6 @@ async function setup(testName: string): Promise<void> {
|
|||||||
submoduleForeach: jest.fn(),
|
submoduleForeach: jest.fn(),
|
||||||
submoduleSync: jest.fn(),
|
submoduleSync: jest.fn(),
|
||||||
submoduleUpdate: jest.fn(),
|
submoduleUpdate: jest.fn(),
|
||||||
submoduleStatus: jest.fn(async () => {
|
|
||||||
return true
|
|
||||||
}),
|
|
||||||
tagExists: jest.fn(),
|
tagExists: jest.fn(),
|
||||||
tryClean: jest.fn(async () => {
|
tryClean: jest.fn(async () => {
|
||||||
return true
|
return true
|
||||||
@ -501,7 +436,6 @@ async function setup(testName: string): Promise<void> {
|
|||||||
}),
|
}),
|
||||||
tryReset: jest.fn(async () => {
|
tryReset: jest.fn(async () => {
|
||||||
return true
|
return true
|
||||||
}),
|
})
|
||||||
version: jest.fn()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import {GitVersion} from '../src/git-version'
|
import {GitVersion} from '../lib/git-version'
|
||||||
import {MinimumGitSparseCheckoutVersion} from '../src/git-command-manager'
|
|
||||||
|
|
||||||
describe('git-version tests', () => {
|
describe('git-version tests', () => {
|
||||||
it('basics', async () => {
|
it('basics', async () => {
|
||||||
@ -43,44 +42,4 @@ describe('git-version tests', () => {
|
|||||||
expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy()
|
expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy()
|
||||||
expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy()
|
expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('sparse checkout', async () => {
|
|
||||||
const minSparseVer = MinimumGitSparseCheckoutVersion
|
|
||||||
expect(new GitVersion('1.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('1.99').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.24').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.24.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.24.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.25').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.25.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.25.1').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.25.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.26').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.26.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.26.1').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.26.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.27').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.27.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.27.1').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.27.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
// /---------------------------------------
|
|
||||||
// ^^^ before / after vvv
|
|
||||||
// --------------------------/
|
|
||||||
expect(new GitVersion('2.28').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.28.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.28.1').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.28.9').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.29').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.29.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.29.1').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.29.9').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('3.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('3.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('4.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('4.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('5.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('5.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
@ -79,12 +79,7 @@ describe('input-helper tests', () => {
|
|||||||
expect(settings.clean).toBe(true)
|
expect(settings.clean).toBe(true)
|
||||||
expect(settings.commit).toBeTruthy()
|
expect(settings.commit).toBeTruthy()
|
||||||
expect(settings.commit).toBe('1234567890123456789012345678901234567890')
|
expect(settings.commit).toBe('1234567890123456789012345678901234567890')
|
||||||
expect(settings.filter).toBe(undefined)
|
|
||||||
expect(settings.sparseCheckout).toBe(undefined)
|
|
||||||
expect(settings.sparseCheckoutConeMode).toBe(true)
|
|
||||||
expect(settings.fetchDepth).toBe(1)
|
expect(settings.fetchDepth).toBe(1)
|
||||||
expect(settings.fetchTags).toBe(false)
|
|
||||||
expect(settings.showProgress).toBe(true)
|
|
||||||
expect(settings.lfs).toBe(false)
|
expect(settings.lfs).toBe(false)
|
||||||
expect(settings.ref).toBe('refs/heads/some-ref')
|
expect(settings.ref).toBe('refs/heads/some-ref')
|
||||||
expect(settings.repositoryName).toBe('some-repo')
|
expect(settings.repositoryName).toBe('some-repo')
|
||||||
|
@ -7,11 +7,11 @@ let git: IGitCommandManager
|
|||||||
|
|
||||||
describe('ref-helper tests', () => {
|
describe('ref-helper tests', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
git = {} as unknown as IGitCommandManager
|
git = ({} as unknown) as IGitCommandManager
|
||||||
})
|
})
|
||||||
|
|
||||||
it('getCheckoutInfo requires git', async () => {
|
it('getCheckoutInfo requires git', async () => {
|
||||||
const git = null as unknown as IGitCommandManager
|
const git = (null as unknown) as IGitCommandManager
|
||||||
try {
|
try {
|
||||||
await refHelper.getCheckoutInfo(git, 'refs/heads/my/branch', commit)
|
await refHelper.getCheckoutInfo(git, 'refs/heads/my/branch', commit)
|
||||||
throw new Error('Should not reach here')
|
throw new Error('Should not reach here')
|
||||||
|
@ -68,7 +68,7 @@ describe('retry-helper tests', () => {
|
|||||||
|
|
||||||
it('all attempts fail succeeds', async () => {
|
it('all attempts fail succeeds', async () => {
|
||||||
let attempts = 0
|
let attempts = 0
|
||||||
let error: Error = null as unknown as Error
|
let error: Error = (null as unknown) as Error
|
||||||
try {
|
try {
|
||||||
await retryHelper.execute(() => {
|
await retryHelper.execute(() => {
|
||||||
throw new Error(`some error ${++attempts}`)
|
throw new Error(`some error ${++attempts}`)
|
||||||
|
@ -18,20 +18,6 @@ else
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Verify that sparse-checkout is disabled.
|
|
||||||
SPARSE_CHECKOUT_ENABLED=$(git -C ./basic config --local --get-all core.sparseCheckout)
|
|
||||||
if [ "$SPARSE_CHECKOUT_ENABLED" != "" ]; then
|
|
||||||
echo "Expected sparse-checkout to be disabled (discovered: $SPARSE_CHECKOUT_ENABLED)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Verify git configuration shows worktreeConfig is effectively disabled
|
|
||||||
WORKTREE_CONFIG_ENABLED=$(git -C ./basic config --local --get-all extensions.worktreeConfig)
|
|
||||||
if [[ "$WORKTREE_CONFIG_ENABLED" != "" ]]; then
|
|
||||||
echo "Expected extensions.worktreeConfig (boolean) to be disabled in git config. This could be an artifact of sparse checkout functionality."
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Verify auth token
|
# Verify auth token
|
||||||
cd basic
|
cd basic
|
||||||
git fetch --no-tags --depth=1 origin +refs/heads/main:refs/remotes/origin/main
|
git fetch --no-tags --depth=1 origin +refs/heads/main:refs/remotes/origin/main
|
||||||
|
@ -1,16 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Verify .git folder
|
|
||||||
if [ ! -d "./fetch-filter/.git" ]; then
|
|
||||||
echo "Expected ./fetch-filter/.git folder to exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Verify .git/config contains partialclonefilter
|
|
||||||
|
|
||||||
CLONE_FILTER=$(git -C fetch-filter config --local --get remote.origin.partialclonefilter)
|
|
||||||
|
|
||||||
if [ "$CLONE_FILTER" != "blob:none" ]; then
|
|
||||||
echo "Expected ./fetch-filter/.git/config to have 'remote.origin.partialclonefilter' set to 'blob:none'"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
@ -1,51 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Verify .git folder
|
|
||||||
if [ ! -d "./sparse-checkout-non-cone-mode/.git" ]; then
|
|
||||||
echo "Expected ./sparse-checkout-non-cone-mode/.git folder to exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Verify sparse-checkout (non-cone-mode)
|
|
||||||
cd sparse-checkout-non-cone-mode
|
|
||||||
|
|
||||||
ENABLED=$(git config --local --get-all core.sparseCheckout)
|
|
||||||
|
|
||||||
if [ "$?" != "0" ]; then
|
|
||||||
echo "Failed to verify that sparse-checkout is enabled"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check that sparse-checkout is enabled
|
|
||||||
if [ "$ENABLED" != "true" ]; then
|
|
||||||
echo "Expected sparse-checkout to be enabled (is: $ENABLED)"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
SPARSE_CHECKOUT_FILE=$(git rev-parse --git-path info/sparse-checkout)
|
|
||||||
|
|
||||||
if [ "$?" != "0" ]; then
|
|
||||||
echo "Failed to validate sparse-checkout"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check that sparse-checkout list is not empty
|
|
||||||
if [ ! -f "$SPARSE_CHECKOUT_FILE" ]; then
|
|
||||||
echo "Expected sparse-checkout file to exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check that all folders from sparse-checkout exists
|
|
||||||
for pattern in $(cat "$SPARSE_CHECKOUT_FILE")
|
|
||||||
do
|
|
||||||
if [ ! -d "${pattern#/}" ]; then
|
|
||||||
echo "Expected directory '${pattern#/}' to exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# Verify that the root directory is not checked out
|
|
||||||
if [ -f README.md ]; then
|
|
||||||
echo "Expected top-level files not to exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
@ -1,63 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
# Verify .git folder
|
|
||||||
if [ ! -d "./sparse-checkout/.git" ]; then
|
|
||||||
echo "Expected ./sparse-checkout/.git folder to exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Verify sparse-checkout
|
|
||||||
cd sparse-checkout
|
|
||||||
|
|
||||||
SPARSE=$(git sparse-checkout list)
|
|
||||||
|
|
||||||
if [ "$?" != "0" ]; then
|
|
||||||
echo "Failed to validate sparse-checkout"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check that sparse-checkout list is not empty
|
|
||||||
if [ -z "$SPARSE" ]; then
|
|
||||||
echo "Expected sparse-checkout list to not be empty"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Check that all folders of the sparse checkout exist
|
|
||||||
for pattern in $SPARSE
|
|
||||||
do
|
|
||||||
if [ ! -d "$pattern" ]; then
|
|
||||||
echo "Expected directory '$pattern' to exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
checkSparse () {
|
|
||||||
if [ ! -d "./$1" ]; then
|
|
||||||
echo "Expected directory '$1' to exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
for file in $(git ls-tree -r --name-only HEAD $1)
|
|
||||||
do
|
|
||||||
if [ ! -f "$file" ]; then
|
|
||||||
echo "Expected file '$file' to exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
}
|
|
||||||
|
|
||||||
# Check that all folders and their children have been checked out
|
|
||||||
checkSparse __test__
|
|
||||||
checkSparse .github
|
|
||||||
checkSparse dist
|
|
||||||
|
|
||||||
# Check that only sparse-checkout folders have been checked out
|
|
||||||
for pattern in $(git ls-tree --name-only HEAD)
|
|
||||||
do
|
|
||||||
if [ -d "$pattern" ]; then
|
|
||||||
if [[ "$pattern" != "__test__" && "$pattern" != ".github" && "$pattern" != "dist" ]]; then
|
|
||||||
echo "Expected directory '$pattern' to not exist"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
done
|
|
29
action.yml
29
action.yml
@ -45,10 +45,6 @@ inputs:
|
|||||||
and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
|
and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
|
||||||
configure additional hosts.
|
configure additional hosts.
|
||||||
default: true
|
default: true
|
||||||
ssh-user:
|
|
||||||
description: >
|
|
||||||
The user to use when connecting to the remote SSH host. By default 'git' is used.
|
|
||||||
default: git
|
|
||||||
persist-credentials:
|
persist-credentials:
|
||||||
description: 'Whether to configure the token or SSH key with the local git config'
|
description: 'Whether to configure the token or SSH key with the local git config'
|
||||||
default: true
|
default: true
|
||||||
@ -57,29 +53,9 @@ inputs:
|
|||||||
clean:
|
clean:
|
||||||
description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
|
description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
|
||||||
default: true
|
default: true
|
||||||
filter:
|
|
||||||
description: >
|
|
||||||
Partially clone against a given filter.
|
|
||||||
Overrides sparse-checkout if set.
|
|
||||||
default: null
|
|
||||||
sparse-checkout:
|
|
||||||
description: >
|
|
||||||
Do a sparse checkout on given patterns.
|
|
||||||
Each pattern should be separated with new lines.
|
|
||||||
default: null
|
|
||||||
sparse-checkout-cone-mode:
|
|
||||||
description: >
|
|
||||||
Specifies whether to use cone-mode when doing a sparse checkout.
|
|
||||||
default: true
|
|
||||||
fetch-depth:
|
fetch-depth:
|
||||||
description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
|
description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
|
||||||
default: 1
|
default: 1
|
||||||
fetch-tags:
|
|
||||||
description: 'Whether to fetch tags, even if fetch-depth > 0.'
|
|
||||||
default: false
|
|
||||||
show-progress:
|
|
||||||
description: 'Whether to show progress status output when fetching.'
|
|
||||||
default: true
|
|
||||||
lfs:
|
lfs:
|
||||||
description: 'Whether to download Git-LFS files'
|
description: 'Whether to download Git-LFS files'
|
||||||
default: false
|
default: false
|
||||||
@ -95,10 +71,7 @@ inputs:
|
|||||||
set-safe-directory:
|
set-safe-directory:
|
||||||
description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
|
description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
|
||||||
default: true
|
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:
|
runs:
|
||||||
using: node20
|
using: node12
|
||||||
main: dist/index.js
|
main: dist/index.js
|
||||||
post: dist/index.js
|
post: dist/index.js
|
||||||
|
@ -181,7 +181,7 @@ GITHUB_WORKSPACE=/home/runner/work/foo/foo
|
|||||||
RUNNER_WORKSPACE=/home/runner/work/foo
|
RUNNER_WORKSPACE=/home/runner/work/foo
|
||||||
```
|
```
|
||||||
|
|
||||||
V2 introduces a new constraint on the checkout path. The location must now be under `github.workspace`. Whereas the checkout@v1 constraint was one level up, under `runner.workspace`.
|
V2 introduces a new contraint on the checkout path. The location must now be under `github.workspace`. Whereas the checkout@v1 constraint was one level up, under `runner.workspace`.
|
||||||
|
|
||||||
V2 no longer changes `github.workspace` to follow wherever the self repo is checked-out.
|
V2 no longer changes `github.workspace` to follow wherever the self repo is checked-out.
|
||||||
|
|
||||||
@ -287,4 +287,4 @@ Note:
|
|||||||
- Update samples to consume `actions/checkout@v2`
|
- Update samples to consume `actions/checkout@v2`
|
||||||
- Job containers now require git in the PATH for checkout, otherwise fallback to REST API
|
- Job containers now require git in the PATH for checkout, otherwise fallback to REST API
|
||||||
- Minimum git version 2.18
|
- Minimum git version 2.18
|
||||||
- Update problem matcher logic regarding source file verification (runner)
|
- Update problem matcher logic regarding source file verification (runner)
|
69921
dist/index.js
vendored
69921
dist/index.js
vendored
File diff suppressed because one or more lines are too long
@ -1,12 +0,0 @@
|
|||||||
# Defines the test-ubuntu-git Container Image.
|
|
||||||
# Consumed by actions/checkout CI/CD validation workflows.
|
|
||||||
|
|
||||||
FROM ubuntu:latest
|
|
||||||
|
|
||||||
RUN apt update
|
|
||||||
RUN apt install -y git
|
|
||||||
|
|
||||||
LABEL org.opencontainers.image.title="Ubuntu + git (validation image)"
|
|
||||||
LABEL org.opencontainers.image.description="Ubuntu image with git pre-installed. Intended primarily for testing `actions/checkout` during CI/CD workflows."
|
|
||||||
LABEL org.opencontainers.image.documentation="https://github.com/actions/checkout/tree/main/images/test-ubuntu-git.md"
|
|
||||||
LABEL org.opencontainers.image.licenses=MIT
|
|
@ -1,15 +0,0 @@
|
|||||||
# `test-ubuntu-git` Container Image
|
|
||||||
|
|
||||||
[![Publish test-ubuntu-git Container](https://github.com/actions/checkout/actions/workflows/update-test-ubuntu-git.yml/badge.svg)](https://github.com/actions/checkout/actions/workflows/update-test-ubuntu-git.yml)
|
|
||||||
|
|
||||||
## Purpose
|
|
||||||
|
|
||||||
`test-ubuntu-git` is a container image hosted on the GitHub Container Registry, `ghcr.io`.
|
|
||||||
|
|
||||||
It is intended primarily for testing the [`actions/checkout` repository](https://github.com/actions/checkout) as part of `actions/checkout`'s CI/CD workflows.
|
|
||||||
|
|
||||||
The composition of `test-ubuntu-git` is intentionally minimal. It is comprised of [git](https://git-scm.com/) installed on top of a [base-level ubuntu image](https://hub.docker.com/_/ubuntu/tags).
|
|
||||||
|
|
||||||
# License
|
|
||||||
|
|
||||||
`test-ubuntu-git` is released under the [MIT License](/LICENSE).
|
|
@ -1,6 +1,5 @@
|
|||||||
module.exports = {
|
module.exports = {
|
||||||
clearMocks: true,
|
clearMocks: true,
|
||||||
fakeTimers: {},
|
|
||||||
moduleFileExtensions: ['js', 'ts'],
|
moduleFileExtensions: ['js', 'ts'],
|
||||||
testEnvironment: 'node',
|
testEnvironment: 'node',
|
||||||
testMatch: ['**/*.test.ts'],
|
testMatch: ['**/*.test.ts'],
|
||||||
|
18433
package-lock.json
generated
18433
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
44
package.json
44
package.json
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "checkout",
|
"name": "checkout",
|
||||||
"version": "4.1.4",
|
"version": "2.6.0",
|
||||||
"description": "checkout action",
|
"description": "checkout action",
|
||||||
"main": "lib/main.js",
|
"main": "lib/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
@ -28,28 +28,28 @@
|
|||||||
},
|
},
|
||||||
"homepage": "https://github.com/actions/checkout#readme",
|
"homepage": "https://github.com/actions/checkout#readme",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.10.1",
|
"@actions/core": "^1.10.0",
|
||||||
"@actions/exec": "^1.1.1",
|
"@actions/exec": "^1.0.1",
|
||||||
"@actions/github": "^6.0.0",
|
"@actions/github": "^2.2.0",
|
||||||
"@actions/io": "^1.1.3",
|
"@actions/io": "^1.1.2",
|
||||||
"@actions/tool-cache": "^2.0.1",
|
"@actions/tool-cache": "^1.1.2",
|
||||||
"uuid": "^9.0.1"
|
"uuid": "^3.3.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.12",
|
"@types/jest": "^27.0.2",
|
||||||
"@types/node": "^20.12.7",
|
"@types/node": "^12.7.12",
|
||||||
"@types/uuid": "^9.0.8",
|
"@types/uuid": "^3.4.6",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.7.1",
|
"@typescript-eslint/eslint-plugin": "^5.45.0",
|
||||||
"@typescript-eslint/parser": "^7.7.1",
|
"@typescript-eslint/parser": "^5.45.0",
|
||||||
"@vercel/ncc": "^0.38.1",
|
"@zeit/ncc": "^0.20.5",
|
||||||
"eslint": "^8.57.0",
|
"eslint": "^7.32.0",
|
||||||
"eslint-plugin-github": "^4.10.2",
|
"eslint-plugin-github": "^4.3.2",
|
||||||
"eslint-plugin-jest": "^28.2.0",
|
"eslint-plugin-jest": "^25.7.0",
|
||||||
"jest": "^29.7.0",
|
"jest": "^27.3.0",
|
||||||
"jest-circus": "^29.7.0",
|
"jest-circus": "^27.3.0",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^3.13.1",
|
||||||
"prettier": "^3.2.5",
|
"prettier": "^1.19.1",
|
||||||
"ts-jest": "^29.1.2",
|
"ts-jest": "^27.0.7",
|
||||||
"typescript": "^5.4.5"
|
"typescript": "^4.4.4"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,9 +18,8 @@ export function directoryExistsSync(path: string, required?: boolean): boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Encountered an error when checking whether path '${path}' exists: ${
|
`Encountered an error when checking whether path '${path}' exists: ${(error as any)
|
||||||
(error as any)?.message ?? error
|
?.message ?? error}`
|
||||||
}`
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,9 +45,8 @@ export function existsSync(path: string): boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Encountered an error when checking whether path '${path}' exists: ${
|
`Encountered an error when checking whether path '${path}' exists: ${(error as any)
|
||||||
(error as any)?.message ?? error
|
?.message ?? error}`
|
||||||
}`
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -69,9 +67,8 @@ export function fileExistsSync(path: string): boolean {
|
|||||||
}
|
}
|
||||||
|
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Encountered an error when checking whether path '${path}' exists: ${
|
`Encountered an error when checking whether path '${path}' exists: ${(error as any)
|
||||||
(error as any)?.message ?? error
|
?.message ?? error}`
|
||||||
}`
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user