name: Release on: push: branches: - main env: REGISTRY: euchre-camp IMAGE_NAME: euchre-camp jobs: release: 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: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' cache: 'npm' - name: Install dependencies run: npm ci - name: Run tests run: npm run test:run - name: Configure Git run: | git config user.name "Gitea Actions" git config user.email "actions@gitea.com" - name: Determine version bump type id: bump_type run: | # Get commits since last tag LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") if [ -z "$LAST_TAG" ]; then COMMITS=$(git log --oneline) else COMMITS=$(git log --oneline ${LAST_TAG}..HEAD) fi if echo "$COMMITS" | grep -q "BREAKING\|!:"; then echo "bump=major" >> $GITHUB_OUTPUT elif echo "$COMMITS" | grep -q "^feat"; then echo "bump=minor" >> $GITHUB_OUTPUT else echo "bump=patch" >> $GITHUB_OUTPUT fi - name: Bump version id: version run: | BUMP="${{ steps.bump_type.outputs.bump }}" echo "Bumping version: $BUMP" npm run version:$BUMP # Get new version NEW_VERSION=$(node -p "require('./package.json').version") echo "new_version=$NEW_VERSION" >> $GITHUB_OUTPUT - name: Commit and push version bump run: | git add package.json CHANGELOG.md git commit -m "chore: bump version to v${{ steps.version.outputs.new_version }}" git push origin main - name: Create git tag run: | git tag -a "v${{ steps.version.outputs.new_version }}" -m "Release v${{ steps.version.outputs.new_version }}" git push origin "v${{ steps.version.outputs.new_version }}" - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build Docker image run: | docker build \ --build-arg GIT_COMMIT=${{ github.sha }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.new_version }} \ -t ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ . - name: Push Docker images run: | # Note: This assumes Docker daemon is already authenticated to the registry docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:${{ steps.version.outputs.new_version }} docker push ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest - name: Deploy to dev (placeholder) run: | echo "Deploying version ${{ steps.version.outputs.new_version }} to dev environment..." # TODO: Add actual deployment steps # Example: SSH to dev server and update container # ssh user@dev-server "cd /path/to/app && docker compose pull && docker compose up -d"