name: Release on: push: tags: - 'v*' permissions: contents: write jobs: lint: uses: ./.github/workflows/lint.yml release: needs: lint runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 - name: Get previous tag id: prev_tag run: | PREV_TAG=$(git describe --tags --abbrev=0 ${{ github.ref_name }}^ 2>/dev/null || echo "") echo "tag=$PREV_TAG" >> $GITHUB_OUTPUT - name: Generate changelog id: changelog run: | TAG="${{ github.ref_name }}" PREV_TAG="${{ steps.prev_tag.outputs.tag }}" if [ -z "$PREV_TAG" ]; then RANGE="$TAG" else RANGE="${PREV_TAG}..${TAG}" fi # Collect commits by category FEATURES=$(git log $RANGE --pretty=format:"%s|%an|%h" --no-merges | grep -iE "^feat" || true) FIXES=$(git log $RANGE --pretty=format:"%s|%an|%h" --no-merges | grep -iE "^fix" || true) PERF=$(git log $RANGE --pretty=format:"%s|%an|%h" --no-merges | grep -iE "^perf|^refactor" || true) DOCS=$(git log $RANGE --pretty=format:"%s|%an|%h" --no-merges | grep -iE "^docs|^style" || true) CHORE=$(git log $RANGE --pretty=format:"%s|%an|%h" --no-merges | grep -iE "^chore|^ci|^build|^test" || true) OTHER=$(git log $RANGE --pretty=format:"%s|%an|%h" --no-merges | grep -ivE "^(feat|fix|perf|refactor|docs|style|chore|ci|build|test)" || true) # Collect unique contributors CONTRIBUTORS=$(git log $RANGE --pretty=format:"%an" --no-merges | sort -u) # Stats TOTAL_COMMITS=$(git log $RANGE --oneline --no-merges | wc -l | tr -d ' ') FILES_CHANGED=$(git diff --stat $RANGE 2>/dev/null | tail -1 || echo "N/A") # Format function format_section() { local commits="$1" if [ -n "$commits" ]; then echo "$commits" | while IFS='|' read -r msg author hash; do # Clean conventional commit prefix clean_msg=$(echo "$msg" | sed -E 's/^(feat|fix|perf|refactor|docs|style|chore|ci|build|test)(\([^)]*\))?:\s*//') echo "- ${clean_msg} (\`${hash}\`) — @${author}" done fi } # Build changelog { echo "changelog<> $GITHUB_OUTPUT - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: name: ${{ github.ref_name }} body: | ## What's Changed ${{ steps.changelog.outputs.changelog }} --- ### Docker ```bash # Docker Hub docker pull fr1ngg/remnawave-bedolaga-telegram-bot:${{ github.ref_name }} # GitHub Container Registry docker pull ghcr.io/${{ github.repository }}:${{ github.ref_name }} ``` ### Update ```bash # Docker Compose docker compose pull && docker compose up -d # Or with Make make reload ``` draft: false prerelease: ${{ contains(github.ref_name, 'beta') || contains(github.ref_name, 'alpha') || contains(github.ref_name, 'rc') || contains(github.ref_name, 'dev') }} generate_release_notes: false