feat: enhance devcontainer build script with better error handling (#29)

- Add tool availability checks
- Add GitHub authentication verification
- Improve error messages and user feedback
- Add clear next steps for users

Part of #29
This commit is contained in:
Peter Wood
2025-05-04 19:56:16 -04:00
parent c06b73a1f3
commit febbd943b2

View File

@@ -1,28 +1,73 @@
#!/bin/bash #!/bin/bash
# Exit on error, undefined variables, and pipe failures
set -euo pipefail
# Configuration # Configuration
GITHUB_USERNAME=$1 GITHUB_USERNAME=$1
IMAGE_NAME="finance-devcontainer" IMAGE_NAME="finance-devcontainer"
IMAGE_TAG="latest" IMAGE_TAG="latest"
if [ -z "$GITHUB_USERNAME" ]; then # Check for required username argument
if [ -z "${GITHUB_USERNAME:-}" ]; then
echo "Error: GitHub username is required"
echo "Usage: $0 <github_username>" echo "Usage: $0 <github_username>"
echo "Example: $0 acedanger" echo "Example: $0 acedanger"
exit 1 exit 1
fi fi
# Check for required tools
for cmd in docker gh; do
if ! command -v "$cmd" >/dev/null 2>&1; then
echo "Error: $cmd is required but not installed"
exit 1
fi
done
# Check GitHub authentication
if ! gh auth status >/dev/null 2>&1; then
echo "Error: Not authenticated with GitHub. Please run 'gh auth login' first"
exit 1
fi
FULL_IMAGE_NAME="ghcr.io/$GITHUB_USERNAME/$IMAGE_NAME:$IMAGE_TAG" FULL_IMAGE_NAME="ghcr.io/$GITHUB_USERNAME/$IMAGE_NAME:$IMAGE_TAG"
echo "=== Building Development Container ==="
echo "Username: $GITHUB_USERNAME"
echo "Image: $FULL_IMAGE_NAME"
# Build the image # Build the image
echo "Building image: $FULL_IMAGE_NAME" echo -e "\n=> Building image..."
docker build -t $FULL_IMAGE_NAME -f Dockerfile . if ! docker build -t "$FULL_IMAGE_NAME" -f Dockerfile .; then
echo "Error: Docker build failed"
exit 1
fi
# Ensure logged into GitHub Container Registry
echo -e "\n=> Ensuring GitHub Container Registry access..."
if ! docker login ghcr.io -u "$GITHUB_USERNAME"; then
echo "Error: Failed to authenticate with GitHub Container Registry"
exit 1
fi
# Push to GitHub Container Registry # Push to GitHub Container Registry
echo "Pushing image to GHCR..." echo -e "\n=> Pushing image to GitHub Container Registry..."
docker push $FULL_IMAGE_NAME if ! docker push "$FULL_IMAGE_NAME"; then
echo "Error: Failed to push image"
echo "Please check your GitHub PAT has the required permissions:"
echo " - read:packages"
echo " - write:packages"
exit 1
fi
echo "Done! Now update your devcontainer.json to use this image:" echo -e "\n=== Success! ==="
echo "Replace the 'build' section with:" echo "The development container image has been built and pushed"
echo -e "\nTo use this image, update your devcontainer.json with:"
echo '{ echo '{
"image": "'$FULL_IMAGE_NAME'" "image": "'$FULL_IMAGE_NAME'"
}' }'
echo -e "\nNext steps:"
echo "1. Update .devcontainer/devcontainer.json with the image reference above"
echo "2. Rebuild your development container in VS Code"
echo " (Command Palette -> 'Dev Containers: Rebuild Container')"