Skip to content

fix: setup env files #3

fix: setup env files

fix: setup env files #3

Workflow file for this run

name: Publish to GHCR
on:
push:
branches: [dev]
release:
types: [created]
workflow_dispatch:
pull_request:
branches:
- dev
jobs:
build-and-push:
runs-on: ubuntu-latest
permissions:
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Set up QEMU
uses: docker/setup-qemu-action@v3
- name: Extract metadata
id: meta
run: |
SHORT_SHA=$(git rev-parse --short HEAD)
echo "SHORT_SHA=$SHORT_SHA" >> $GITHUB_ENV
if [[ "${GITHUB_EVENT_NAME}" == "release" ]]; then
TAG_NAME="${{ github.event.release.tag_name }}"
echo "GIT_TAG=$TAG_NAME" >> $GITHUB_ENV
echo "IS_RELEASE=true" >> $GITHUB_ENV
else
git fetch --tags
LATEST_TAG=$(git tag --list 'v*.*.*' | sort -V | tail -n1)
FALLBACK_TAG="${LATEST_TAG:-v0.0.0}"
# Customize prefix here: 'dev-', 'pre-', etc.
PREFIX="dev"
echo "GIT_TAG=${PREFIX}-${FALLBACK_TAG}-${SHORT_SHA}" >> $GITHUB_ENV
echo "IS_RELEASE=false" >> $GITHUB_ENV
fi
echo "REPO_OWNER_LC=${GITHUB_REPOSITORY_OWNER,,}" >> $GITHUB_ENV
- name: Log in to GitHub Container Registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Copy example.env to .env
run: |
echo "Copying example.env to .env..."
find . -name "example.env" | while read f; do
cp "$f" "$(dirname "$f")/.env"
echo "✓ Created $(dirname "$f")/.env"
done
- name: Build, tag, and push all Docker Compose services
run: |
set -e
SERVICES=$(docker compose config --services)
for SERVICE in $SERVICES; do
IMAGE_NAME="ghcr.io/${{ env.REPO_OWNER_LC }}/$SERVICE:${{ env.GIT_TAG }}"
echo "Building $SERVICE..."
docker compose build $SERVICE
echo "Tagging image as $IMAGE_NAME"
docker tag $(docker compose images -q $SERVICE) $IMAGE_NAME
echo "Pushing $IMAGE_NAME"
docker push $IMAGE_NAME
if [[ "${{ env.IS_RELEASE }}" == "true" ]]; then
LATEST_TAG="ghcr.io/${{ env.REPO_OWNER_LC }}/$SERVICE:latest"
echo "Tagging and pushing as $LATEST_TAG"
docker tag $IMAGE_NAME $LATEST_TAG
docker push $LATEST_TAG
fi
done