Jaypore CI

> Jaypore CI: Minimal, Offline, Local CI system.
Log | Files | Refs | README | LICENSE

run.sh (3033B)


      1 #!/bin/bash
      2 set -euo pipefail
      3 
      4 # Jaypore CI run script
      5 # ---------------------
      6 # This script is executed by Jaypore CI.
      7 #
      8 # Available environment variables:
      9 #   JCI_COMMIT      - The git commit being tested
     10 #   JCI_REPO_ROOT   - Absolute path to the repository root
     11 #   JCI_OUTPUT_DIR  - Directory for CI artifacts (cwd at start)
     12 #
     13 # Optional environment variables:
     14 #   DOCKER_REGISTRY  - Registry to push to (e.g. registry.example.com)
     15 #   DOCKER_USERNAME  - Registry login username
     16 #   DOCKER_PASSWORD  - Registry login password
     17 #
     18 # Any files written to JCI_OUTPUT_DIR become CI artifacts.
     19 
     20 echo "=== Jaypore CI: Build & Publish Docker Image ==="
     21 echo "Commit : $JCI_COMMIT"
     22 echo "Repo   : $JCI_REPO_ROOT"
     23 echo "Output : $JCI_OUTPUT_DIR"
     24 echo
     25 
     26 cd "$JCI_REPO_ROOT"
     27 
     28 IMAGE_NAME="mysite"
     29 SHORT_SHA=$(echo "$JCI_COMMIT" | cut -c1-12)
     30 TAG_COMMIT="${IMAGE_NAME}:${SHORT_SHA}"
     31 TAG_LATEST="${IMAGE_NAME}:latest"
     32 
     33 # If a registry is configured, prefix the image name
     34 if [ -n "${DOCKER_REGISTRY:-}" ]; then
     35     TAG_COMMIT="${DOCKER_REGISTRY}/${TAG_COMMIT}"
     36     TAG_LATEST="${DOCKER_REGISTRY}/${TAG_LATEST}"
     37 fi
     38 
     39 echo "Image tags:"
     40 echo "  $TAG_COMMIT"
     41 echo "  $TAG_LATEST"
     42 echo
     43 
     44 # ---- 1. Build the Docker image ----
     45 echo "--- Building Docker image ---"
     46 docker build \
     47     -f 10-build-publish-docker/Dockerfile \
     48     -t "$TAG_COMMIT" \
     49     -t "$TAG_LATEST" \
     50     . \
     51     2>&1 | tee "$JCI_OUTPUT_DIR/docker-build.log"
     52 
     53 echo
     54 echo "Build complete."
     55 echo
     56 
     57 # ---- 2. Run tests inside the container ----
     58 echo "--- Running tests inside the container ---"
     59 docker run --rm "$TAG_COMMIT" \
     60     python3 manage.py test core --verbosity=2 \
     61     2>&1 | tee "$JCI_OUTPUT_DIR/docker-test.log"
     62 
     63 echo
     64 echo "Tests passed."
     65 echo
     66 
     67 # ---- 3. Save image metadata ----
     68 echo "--- Saving image info ---"
     69 docker inspect "$TAG_COMMIT" > "$JCI_OUTPUT_DIR/image-inspect.json"
     70 docker images --filter "reference=${IMAGE_NAME}" \
     71     --format 'table {{.Repository}}\t{{.Tag}}\t{{.ID}}\t{{.Size}}' \
     72     | tee "$JCI_OUTPUT_DIR/image-info.txt"
     73 echo
     74 
     75 # ---- 4. Push to registry (if configured) ----
     76 if [ -n "${DOCKER_REGISTRY:-}" ]; then
     77     echo "--- Pushing to $DOCKER_REGISTRY ---"
     78 
     79     if [ -n "${DOCKER_USERNAME:-}" ] && [ -n "${DOCKER_PASSWORD:-}" ]; then
     80         echo "$DOCKER_PASSWORD" | docker login "$DOCKER_REGISTRY" \
     81             -u "$DOCKER_USERNAME" --password-stdin \
     82             2>&1 | tee -a "$JCI_OUTPUT_DIR/docker-push.log"
     83     fi
     84 
     85     docker push "$TAG_COMMIT" 2>&1 | tee -a "$JCI_OUTPUT_DIR/docker-push.log"
     86     docker push "$TAG_LATEST" 2>&1 | tee -a "$JCI_OUTPUT_DIR/docker-push.log"
     87 
     88     echo
     89     echo "Push complete."
     90 else
     91     echo "--- DOCKER_REGISTRY not set, skipping push ---"
     92 fi
     93 
     94 echo
     95 
     96 # ---- 5. Summary ----
     97 echo "=== Summary ==="
     98 echo "Image          : $TAG_COMMIT"
     99 echo "Build log      : docker-build.log"
    100 echo "Test log       : docker-test.log"
    101 echo "Image metadata : image-inspect.json"
    102 echo "Image info     : image-info.txt"
    103 [ -n "${DOCKER_REGISTRY:-}" ] && echo "Push log       : docker-push.log"
    104 echo "All artifacts are in $JCI_OUTPUT_DIR"