fix: setup env files #3
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |