aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Spicer <joshspicer@github.com>2023-04-04 16:47:04 +0300
committerGitHub <noreply@github.com>2023-04-04 16:47:04 +0300
commit2952d87f1db5681330db025e17ab4357a1bdc275 (patch)
tree5995fa11175a7ef1b49c497d400e4d6aa39034d4
parent1118b992d970b53d92b3379a5b05de7738f3dc8b (diff)
add a postCreateCommand to `git-lfs` Feature (#511)feature_git-lfs_1.1.0
* add a postCreateCommand to git-lfs Feature * debug passing locally but not in CI * update scenario * add GIT_LFS_SKIP_SMUDGE=1 to prevent fetching lfs arifacts in github actions * arguments should be booleans * move example repo to devcontainers org * place script literally anywhere other than /tmp
-rw-r--r--src/git-lfs/devcontainer-feature.json8
-rwxr-xr-xsrc/git-lfs/install.sh32
-rw-r--r--test/git-lfs/autoPullDisabled.sh11
-rw-r--r--test/git-lfs/autoPullEnabled.sh11
-rw-r--r--test/git-lfs/scenarios.json22
5 files changed, 83 insertions, 1 deletions
diff --git a/src/git-lfs/devcontainer-feature.json b/src/git-lfs/devcontainer-feature.json
index 0217469..dc61dea 100644
--- a/src/git-lfs/devcontainer-feature.json
+++ b/src/git-lfs/devcontainer-feature.json
@@ -1,6 +1,6 @@
{
"id": "git-lfs",
- "version": "1.0.7",
+ "version": "1.1.0",
"name": "Git Large File Support (LFS)",
"documentationURL": "https://github.com/devcontainers/features/tree/main/src/git-lfs",
"description": "Installs Git Large File Support (Git LFS) along with needed dependencies. Useful for base Dockerfiles that often are missing required install dependencies like git and curl.",
@@ -13,8 +13,14 @@
],
"default": "latest",
"description": "Select version of Git LFS to install"
+ },
+ "autoPull": {
+ "type": "boolean",
+ "default": true,
+ "description": "Automatically pull LFS files when creating the container. When false, running 'git lfs pull' in the container will have the same effect."
}
},
+ "postCreateCommand": "/usr/local/share/pull-git-lfs-artifacts.sh",
"installsAfter": [
"ghcr.io/devcontainers/features/common-utils"
]
diff --git a/src/git-lfs/install.sh b/src/git-lfs/install.sh
index d6f914f..3931099 100755
--- a/src/git-lfs/install.sh
+++ b/src/git-lfs/install.sh
@@ -8,6 +8,7 @@
# Maintainer: The VS Code and Codespaces Teams
GIT_LFS_VERSION=${VERSION:-"latest"}
+AUTO_PULL=${AUTOPULL:="true"}
GIT_LFS_ARCHIVE_GPG_KEY_URI="https://packagecloud.io/github/git-lfs/gpgkey"
GIT_LFS_ARCHIVE_ARCHITECTURES="amd64 arm64"
@@ -185,6 +186,37 @@ if [ "${use_github}" = "true" ]; then
install_using_github
fi
+# --- Generate a 'pull-git-lfs-artifacts.sh' script to be executed by the 'postCreateCommand' lifecycle hook
+PULL_GIT_LFS_SCRIPT_PATH="/usr/local/share/pull-git-lfs-artifacts.sh"
+
+tee "$PULL_GIT_LFS_SCRIPT_PATH" > /dev/null \
+<< EOF
+#!/bin/sh
+set -e
+AUTO_PULL=${AUTO_PULL}
+EOF
+
+tee -a "$PULL_GIT_LFS_SCRIPT_PATH" > /dev/null \
+<< 'EOF'
+
+echo "Fetching git lfs artifacts..."
+
+if [ "${AUTO_PULL}" != "true" ]; then
+ echo "(!) Skipping 'git lfs pull' because 'autoPull' is not set to 'true'"
+ exit 0
+fi
+
+# Check if repo is a git lfs repo.
+if ! git lfs ls-files > /dev/null 2>&1; then
+ echo "(!) Skipping automatic 'git lfs pull' because no git lfs files were detected"
+ exit 0
+fi
+
+git lfs pull
+EOF
+
+chmod 755 "$PULL_GIT_LFS_SCRIPT_PATH"
+
# Clean up
rm -rf /var/lib/apt/lists/*
diff --git a/test/git-lfs/autoPullDisabled.sh b/test/git-lfs/autoPullDisabled.sh
new file mode 100644
index 0000000..787781c
--- /dev/null
+++ b/test/git-lfs/autoPullDisabled.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+set -e
+
+# Optional: Import test library
+source dev-container-features-test-lib
+
+check "target file exists" cat big-file-1.txt
+check "lfs file has not been expanded" cat "big-file-1.txt" | grep "git-lfs\.github\.com"
+
+reportResults \ No newline at end of file
diff --git a/test/git-lfs/autoPullEnabled.sh b/test/git-lfs/autoPullEnabled.sh
new file mode 100644
index 0000000..8cdce3f
--- /dev/null
+++ b/test/git-lfs/autoPullEnabled.sh
@@ -0,0 +1,11 @@
+#!/bin/bash
+
+set -e
+
+# Optional: Import test library
+source dev-container-features-test-lib
+
+check "target file exists" cat big-file-1.txt
+check "lfs file has been expanded" cat "big-file-1.txt" | grep "this is test file 1"
+
+reportResults \ No newline at end of file
diff --git a/test/git-lfs/scenarios.json b/test/git-lfs/scenarios.json
new file mode 100644
index 0000000..6cc3c24
--- /dev/null
+++ b/test/git-lfs/scenarios.json
@@ -0,0 +1,22 @@
+{
+ "autoPullEnabled": {
+ "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
+ "initializeCommand": "(GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/devcontainers/git-lfs-example /tmp/testRepo-1 || true) && (cp -r /tmp/testRepo-1/.git* . && cp -r /tmp/testRepo-1/* .)",
+ "remoteUser": "vscode",
+ "features": {
+ "git-lfs": {
+ "autoPull": true
+ }
+ }
+ },
+ "autoPullDisabled": {
+ "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
+ "initializeCommand": "(GIT_LFS_SKIP_SMUDGE=1 git clone https://github.com/devcontainers/git-lfs-example /tmp/testRepo-2 || true) && (cp -r /tmp/testRepo-2/.git* . && cp -r /tmp/testRepo-2/* .)",
+ "remoteUser": "vscode",
+ "features": {
+ "git-lfs": {
+ "autoPull": false
+ }
+ }
+ }
+} \ No newline at end of file