diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml new file mode 100644 index 0000000..8cc7f57 --- /dev/null +++ b/.github/workflows/build.yaml @@ -0,0 +1,55 @@ +name: Build and Push Container + +on: + workflow_dispatch: + push: + branches: [ "main" ] + paths: + - "Dockerfile.production" + - "compose.prod.yaml" + - "requirements.txt" + - assets/ + - reflex_gpt/ + - rxconfig.py + - alembic.ini + - alembic/ + - .github/workflows/build.yaml + +env: + # DOCKER_IMAGE: codingforentrepreneurs/reflex-gpt + # uncomment if using + DOCKER_IMAGE: ${{ secrets.DOCKERHUB_REPO }} + +jobs: + build-and-push: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + + - name: Login to DockerHub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + + # For Reflex to build a container, + # injecting your environment variables at + # container build time is often required. + - name: Create build env file + run: | + cat << EOF > .build-env + OPENAI_API_KEY=${{ secrets.OPENAI_API_KEY }} + DATABASE_URL=${{ secrets.DATABASE_URL }} + EOF + + - name: Build and push + run: | + docker build -f Dockerfile.production -t ${{ env.DOCKER_IMAGE }}:latest . + docker tag ${{ env.DOCKER_IMAGE }}:latest ${{ env.DOCKER_IMAGE }}:${{ github.sha }} + docker push ${{ env.DOCKER_IMAGE }} --all-tags + + - name: Remove build env file + run: rm .build-env