xref: /template/writr/.github/workflows/release.yml (revision 2b22414d994845d1eb0b8dc6cadd42567e319238)
1*2b22414dSLouis Ouelletname: Release
2*2b22414dSLouis Ouellet
3*2b22414dSLouis Ouelleton:
4*2b22414dSLouis Ouellet  push:
5*2b22414dSLouis Ouellet    tags:
6*2b22414dSLouis Ouellet      - 'v*'
7*2b22414dSLouis Ouellet
8*2b22414dSLouis Ouelletjobs:
9*2b22414dSLouis Ouellet  release:
10*2b22414dSLouis Ouellet    runs-on: ubuntu-latest
11*2b22414dSLouis Ouellet    steps:
12*2b22414dSLouis Ouellet      - name: Checkout code
13*2b22414dSLouis Ouellet        uses: actions/checkout@v2
14*2b22414dSLouis Ouellet        with:
15*2b22414dSLouis Ouellet          fetch-depth: 0
16*2b22414dSLouis Ouellet
17*2b22414dSLouis Ouellet      - name: Set Tag as Filename
18*2b22414dSLouis Ouellet        id: tag_name
19*2b22414dSLouis Ouellet        run: echo "TAG_NAME=${GITHUB_REF##*/}" >> $GITHUB_ENV
20*2b22414dSLouis Ouellet
21*2b22414dSLouis Ouellet      - name: Create ZIP file
22*2b22414dSLouis Ouellet        run: zip -r "${{ env.TAG_NAME }}.zip" .
23*2b22414dSLouis Ouellet
24*2b22414dSLouis Ouellet      - name: Generate Changelog
25*2b22414dSLouis Ouellet        id: generate_changelog
26*2b22414dSLouis Ouellet        run: |
27*2b22414dSLouis Ouellet          # Find the most recent tag before the current one
28*2b22414dSLouis Ouellet          PREV_TAG=$(git describe --tags --abbrev=0 HEAD^)
29*2b22414dSLouis Ouellet
30*2b22414dSLouis Ouellet          # Create a new CHANGELOG.md file with headers
31*2b22414dSLouis Ouellet          echo -e "# Changelog\n" > CHANGELOG.md
32*2b22414dSLouis Ouellet
33*2b22414dSLouis Ouellet          # List commit messages between the previous tag and current HEAD
34*2b22414dSLouis Ouellet          git log ${PREV_TAG}..HEAD --pretty=format:"* %s" >> CHANGELOG.md
35*2b22414dSLouis Ouellet
36*2b22414dSLouis Ouellet          # List unique contributors for these commits
37*2b22414dSLouis Ouellet          echo -e "\n\n# Contributors\n" >> CHANGELOG.md
38*2b22414dSLouis Ouellet          git log ${PREV_TAG}..HEAD --format='%aN' | sort -u | awk '{print "* " $0}' >> CHANGELOG.md
39*2b22414dSLouis Ouellet
40*2b22414dSLouis Ouellet      - name: Create Release
41*2b22414dSLouis Ouellet        id: create_release
42*2b22414dSLouis Ouellet        uses: actions/create-release@v1
43*2b22414dSLouis Ouellet        env:
44*2b22414dSLouis Ouellet          GITHUB_TOKEN: ${{ secrets.GH_PAT }}
45*2b22414dSLouis Ouellet        with:
46*2b22414dSLouis Ouellet          tag_name: ${{ github.ref }}
47*2b22414dSLouis Ouellet          release_name: Release ${{ github.ref }}
48*2b22414dSLouis Ouellet          draft: false
49*2b22414dSLouis Ouellet          prerelease: false
50*2b22414dSLouis Ouellet          body_path: ./CHANGELOG.md
51*2b22414dSLouis Ouellet
52*2b22414dSLouis Ouellet      - name: Upload Asset
53*2b22414dSLouis Ouellet        uses: actions/upload-release-asset@v1
54*2b22414dSLouis Ouellet        env:
55*2b22414dSLouis Ouellet          GITHUB_TOKEN: ${{ secrets.GH_PAT }}
56*2b22414dSLouis Ouellet        with:
57*2b22414dSLouis Ouellet          upload_url: ${{ steps.create_release.outputs.upload_url }}
58*2b22414dSLouis Ouellet          asset_path: ./${{ env.TAG_NAME }}.zip
59*2b22414dSLouis Ouellet          asset_name: source.zip
60*2b22414dSLouis Ouellet          asset_content_type: application/zip
61