mirror of
https://github.com/actions/checkout.git
synced 2026-07-07 13:25:41 +00:00
Compare commits
5 Commits
b4ffde65f4
...
b32f140b0c
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b32f140b0c | ||
|
|
2650dbd060 | ||
|
|
aadec89964 | ||
|
|
df0bcddf6d | ||
|
|
473055ba18 |
19
.github/workflows/test.yml
vendored
19
.github/workflows/test.yml
vendored
@ -7,6 +7,11 @@ 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
|
||||||
@ -95,6 +100,16 @@ jobs:
|
|||||||
- name: Verify sparse checkout
|
- name: Verify sparse checkout
|
||||||
run: __test__/verify-sparse-checkout.sh
|
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)
|
# Sparse checkout (non-cone mode)
|
||||||
- name: Sparse checkout (non-cone mode)
|
- name: Sparse checkout (non-cone mode)
|
||||||
uses: ./
|
uses: ./
|
||||||
@ -175,7 +190,7 @@ jobs:
|
|||||||
test-proxy:
|
test-proxy:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
container:
|
container:
|
||||||
image: alpine/git:latest
|
image: ghcr.io/actions/test-ubuntu-git:main.20240221.114913.703z
|
||||||
options: --dns 127.0.0.1
|
options: --dns 127.0.0.1
|
||||||
services:
|
services:
|
||||||
squid-proxy:
|
squid-proxy:
|
||||||
@ -279,4 +294,4 @@ jobs:
|
|||||||
- name: Fix Checkout v3
|
- name: Fix Checkout v3
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
path: v3
|
path: v3
|
||||||
|
|||||||
59
.github/workflows/update-test-ubuntu-git.yml
vendored
Normal file
59
.github/workflows/update-test-ubuntu-git.yml
vendored
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
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.0.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.1.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 }}
|
||||||
@ -727,6 +727,7 @@ 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(),
|
sparseCheckout: jest.fn(),
|
||||||
sparseCheckoutNonConeMode: jest.fn(),
|
sparseCheckoutNonConeMode: jest.fn(),
|
||||||
checkout: jest.fn(),
|
checkout: jest.fn(),
|
||||||
|
|||||||
@ -462,6 +462,7 @@ async function setup(testName: string): Promise<void> {
|
|||||||
branchList: jest.fn(async () => {
|
branchList: jest.fn(async () => {
|
||||||
return []
|
return []
|
||||||
}),
|
}),
|
||||||
|
disableSparseCheckout: jest.fn(),
|
||||||
sparseCheckout: jest.fn(),
|
sparseCheckout: jest.fn(),
|
||||||
sparseCheckoutNonConeMode: jest.fn(),
|
sparseCheckoutNonConeMode: jest.fn(),
|
||||||
checkout: jest.fn(),
|
checkout: jest.fn(),
|
||||||
|
|||||||
10
dist/index.js
vendored
10
dist/index.js
vendored
@ -576,6 +576,11 @@ class GitCommandManager {
|
|||||||
return result;
|
return result;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
disableSparseCheckout() {
|
||||||
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
|
yield this.execGit(['sparse-checkout', 'disable']);
|
||||||
|
});
|
||||||
|
}
|
||||||
sparseCheckout(sparseCheckout) {
|
sparseCheckout(sparseCheckout) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
yield this.execGit(['sparse-checkout', 'set', ...sparseCheckout]);
|
yield this.execGit(['sparse-checkout', 'set', ...sparseCheckout]);
|
||||||
@ -1282,7 +1287,10 @@ function getSource(settings) {
|
|||||||
core.endGroup();
|
core.endGroup();
|
||||||
}
|
}
|
||||||
// Sparse checkout
|
// Sparse checkout
|
||||||
if (settings.sparseCheckout) {
|
if (!settings.sparseCheckout) {
|
||||||
|
yield git.disableSparseCheckout();
|
||||||
|
}
|
||||||
|
else {
|
||||||
core.startGroup('Setting up sparse checkout');
|
core.startGroup('Setting up sparse checkout');
|
||||||
if (settings.sparseCheckoutConeMode) {
|
if (settings.sparseCheckoutConeMode) {
|
||||||
yield git.sparseCheckout(settings.sparseCheckout);
|
yield git.sparseCheckout(settings.sparseCheckout);
|
||||||
|
|||||||
12
images/test-ubuntu-git.Dockerfile
Normal file
12
images/test-ubuntu-git.Dockerfile
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# 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
|
||||||
15
images/test-ubuntu-git.md
Normal file
15
images/test-ubuntu-git.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# `test-ubuntu-git` Container Image
|
||||||
|
|
||||||
|
[](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).
|
||||||
@ -17,6 +17,7 @@ export interface IGitCommandManager {
|
|||||||
branchDelete(remote: boolean, branch: string): Promise<void>
|
branchDelete(remote: boolean, branch: string): Promise<void>
|
||||||
branchExists(remote: boolean, pattern: string): Promise<boolean>
|
branchExists(remote: boolean, pattern: string): Promise<boolean>
|
||||||
branchList(remote: boolean): Promise<string[]>
|
branchList(remote: boolean): Promise<string[]>
|
||||||
|
disableSparseCheckout(): Promise<void>
|
||||||
sparseCheckout(sparseCheckout: string[]): Promise<void>
|
sparseCheckout(sparseCheckout: string[]): Promise<void>
|
||||||
sparseCheckoutNonConeMode(sparseCheckout: string[]): Promise<void>
|
sparseCheckoutNonConeMode(sparseCheckout: string[]): Promise<void>
|
||||||
checkout(ref: string, startPoint: string): Promise<void>
|
checkout(ref: string, startPoint: string): Promise<void>
|
||||||
@ -171,6 +172,10 @@ class GitCommandManager {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async disableSparseCheckout(): Promise<void> {
|
||||||
|
await this.execGit(['sparse-checkout', 'disable'])
|
||||||
|
}
|
||||||
|
|
||||||
async sparseCheckout(sparseCheckout: string[]): Promise<void> {
|
async sparseCheckout(sparseCheckout: string[]): Promise<void> {
|
||||||
await this.execGit(['sparse-checkout', 'set', ...sparseCheckout])
|
await this.execGit(['sparse-checkout', 'set', ...sparseCheckout])
|
||||||
}
|
}
|
||||||
|
|||||||
@ -208,7 +208,9 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Sparse checkout
|
// Sparse checkout
|
||||||
if (settings.sparseCheckout) {
|
if (!settings.sparseCheckout) {
|
||||||
|
await git.disableSparseCheckout()
|
||||||
|
} else {
|
||||||
core.startGroup('Setting up sparse checkout')
|
core.startGroup('Setting up sparse checkout')
|
||||||
if (settings.sparseCheckoutConeMode) {
|
if (settings.sparseCheckoutConeMode) {
|
||||||
await git.sparseCheckout(settings.sparseCheckout)
|
await git.sparseCheckout(settings.sparseCheckout)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user