refactor: improve devcontainer configuration and documentation (#29)

- Fix container image labels to link with GitHub repository
- Enhance build script with better error handling
- Update documentation with cross-platform build instructions

Part of #29
This commit is contained in:
Peter Wood
2025-05-04 21:16:40 -04:00
parent a298de5af9
commit bf82354ff3
3 changed files with 29 additions and 19 deletions

View File

@@ -8,6 +8,15 @@ GITHUB_USERNAME=$1
IMAGE_NAME="finance-devcontainer"
IMAGE_TAG="latest"
# Load environment variables from .env file if it exists
ENV_FILE="$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)/.env"
if [ -f "$ENV_FILE" ]; then
echo "Loading environment from $ENV_FILE"
# Use grep to find the PAT line and extract the value, handling both Unix and Windows line endings
GITHUB_PERSONAL_ACCESS_TOKEN=$(grep -a "^GITHUB_PERSONAL_ACCESS_TOKEN=" "$ENV_FILE" | sed 's/^GITHUB_PERSONAL_ACCESS_TOKEN=//' | tr -d '\r')
export GITHUB_PERSONAL_ACCESS_TOKEN
fi
# Check for required username argument
if [ -z "${GITHUB_USERNAME:-}" ]; then
echo "Error: GitHub username is required"
@@ -24,31 +33,41 @@ for cmd in docker gh; do
fi
done
# Verify PAT is loaded
if [ -z "${GITHUB_PERSONAL_ACCESS_TOKEN:-}" ]; then
echo "Error: GITHUB_PERSONAL_ACCESS_TOKEN is not set"
echo "Please ensure it is defined in $ENV_FILE"
exit 1
fi
# 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
# Get absolute path to Dockerfile
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" &> /dev/null && pwd)"
DOCKERFILE_PATH="$SCRIPT_DIR/Dockerfile"
FULL_IMAGE_NAME="ghcr.io/$GITHUB_USERNAME/$IMAGE_NAME:$IMAGE_TAG"
echo "=== Building Development Container ==="
echo "Username: $GITHUB_USERNAME"
echo "Image: $FULL_IMAGE_NAME"
echo "Dockerfile: $DOCKERFILE_PATH"
echo "Using PAT: ${GITHUB_PERSONAL_ACCESS_TOKEN:0:4}... (first 4 chars)"
# Build the image
echo -e "\n=> Building image..."
if ! docker build -t "$FULL_IMAGE_NAME" -f Dockerfile .; then
if ! docker build -t "$FULL_IMAGE_NAME" -f "$DOCKERFILE_PATH" "$SCRIPT_DIR"; 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
# Log in to GitHub Container Registry
echo -e "\n=> Logging into GitHub Container Registry..."
echo "$GITHUB_PERSONAL_ACCESS_TOKEN" | docker login ghcr.io -u "$GITHUB_USERNAME" --password-stdin
# Push to GitHub Container Registry
echo -e "\n=> Pushing image to GitHub Container Registry..."