name: Release on: push: tags: - 'v*' jobs: release: runs-on: self-hosted name: Create Release steps: - name: Checkout code uses: https://code.forgejo.org/actions/checkout@v4 with: fetch-depth: 0 - name: Setup Node.js run: | node --version npm --version - name: Install dependencies run: npm ci - name: Run tests run: npm test - name: Build project run: npm run build - name: Generate changelog run: | echo "# Changelog" > CHANGELOG_CURRENT.md echo "" >> CHANGELOG_CURRENT.md # Get the previous tag PREV_TAG=$(git describe --tags --abbrev=0 HEAD^ 2>/dev/null || echo "") CURRENT_TAG="${{ github.ref_name }}" if [ -n "$PREV_TAG" ]; then echo "## Changes since $PREV_TAG" >> CHANGELOG_CURRENT.md echo "" >> CHANGELOG_CURRENT.md # Group commits by type echo "### Features" >> CHANGELOG_CURRENT.md git log $PREV_TAG..HEAD --grep="feat:" --pretty=format:"- %s" >> CHANGELOG_CURRENT.md || true echo "" >> CHANGELOG_CURRENT.md echo "### Bug Fixes" >> CHANGELOG_CURRENT.md git log $PREV_TAG..HEAD --grep="fix:" --pretty=format:"- %s" >> CHANGELOG_CURRENT.md || true echo "" >> CHANGELOG_CURRENT.md echo "### Other Changes" >> CHANGELOG_CURRENT.md git log $PREV_TAG..HEAD --grep -v "feat:\|fix:" --pretty=format:"- %s" >> CHANGELOG_CURRENT.md || true else echo "## Initial Release" >> CHANGELOG_CURRENT.md git log --pretty=format:"- %s" >> CHANGELOG_CURRENT.md fi - name: Create release archive run: | # Create a release archive excluding unnecessary files tar -czf "ice-report-${{ github.ref_name }}.tar.gz" \ --exclude=node_modules \ --exclude=.git \ --exclude=.env \ --exclude=*.db \ --exclude=coverage \ --exclude=.forgejo \ . - name: Create release notes run: | echo "# Release ${{ github.ref_name }}" > RELEASE_NOTES.md echo "" >> RELEASE_NOTES.md echo "## Installation" >> RELEASE_NOTES.md echo "" >> RELEASE_NOTES.md echo '```bash' >> RELEASE_NOTES.md echo "wget https://git.deco.sh/deco/ice/releases/download/${{ github.ref_name }}/ice-report-${{ github.ref_name }}.tar.gz" >> RELEASE_NOTES.md echo "tar -xzf ice-report-${{ github.ref_name }}.tar.gz" >> RELEASE_NOTES.md echo "cd ice-report" >> RELEASE_NOTES.md echo "npm install" >> RELEASE_NOTES.md echo "npm run build" >> RELEASE_NOTES.md echo '```' >> RELEASE_NOTES.md echo "" >> RELEASE_NOTES.md cat CHANGELOG_CURRENT.md >> RELEASE_NOTES.md # Note: In actual Forgejo/Gitea, you would use their release API # This is a placeholder showing what would be done - name: Display release information run: | echo "Release ${{ github.ref_name }} is ready!" echo "Archive: ice-report-${{ github.ref_name }}.tar.gz" echo "" echo "Release notes:" cat RELEASE_NOTES.md