name: Release on: push: branches: - main env: REGISTRY: docker.notsosm.art IMAGE_NAME: euchre-camp jobs: build-and-test: runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, 'chore: bump version')" steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get current version id: version run: | # Read version from package.json CURRENT_VERSION=$(node -p "require('./package.json').version") echo "version=$CURRENT_VERSION" >> $GITHUB_OUTPUT echo "Current version: $CURRENT_VERSION" - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build test-capable image run: | docker build \ --target test-runner \ --build-arg GIT_COMMIT=${{ github.sha }} \ -t ${{ env.IMAGE_NAME }}-test:${{ steps.version.outputs.version }} \ . - name: Run tests inside test-capable container run: | docker run --rm \ -e DATABASE_URL="postgresql://user:pass@localhost:5432/dummy" \ ${{ env.IMAGE_NAME }}-test:${{ steps.version.outputs.version }} \ npm run test:run - name: Build production image run: | docker build \ --target runner \ --build-arg GIT_COMMIT=${{ github.sha }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ . - name: Configure Git run: | git config user.name "Gitea Actions" git config user.email "actions@gitea.com" - name: Create git tag for release run: | git tag -a "v${{ steps.version.outputs.version }}" -m "Release v${{ steps.version.outputs.version }}" git push origin "v${{ steps.version.outputs.version }}" - name: Push Docker images run: | echo "Pushing to ${{ env.REGISTRY }}..." # Check if we can authenticate to the registry if docker login ${{ env.REGISTRY }} -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }} 2>/dev/null; then docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }} docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest echo "Successfully pushed images to ${{ env.REGISTRY }}" else echo "Warning: Could not authenticate to ${{ env.REGISTRY }}" echo "Images built locally but not pushed to registry" echo "Manual push required:" echo " docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.version }}" echo " docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest" fi - name: Deploy to dev (placeholder) run: | echo "Deploying version ${{ steps.version.outputs.version }} to dev environment..." # TODO: Add actual deployment steps