1name: Release automation
2
3on:
4  workflow_dispatch:
5    inputs:
6      commit_id:
7        description: 'Commit ID to tag and create a release for'
8        required: true
9      version_number:
10        description: 'Release Version Number (Eg, v1.0.0)'
11        required: true
12
13jobs:
14  tag-commit:
15    name: Tag commit
16    runs-on: ubuntu-latest
17    steps:
18      - name: Checkout code
19        uses: actions/checkout@v2
20        with:
21          ref: ${{ github.event.inputs.commit_id }}
22      - name: Configure git identity
23        run: |
24          git config --global user.name ${{ github.actor }}
25          git config --global user.email ${{ github.actor }}@users.noreply.github.com
26      - name: create a new branch that references commit id
27        run: git checkout -b ${{ github.event.inputs.version_number }} ${{ github.event.inputs.commit_id }}
28      - name: Generate SBOM
29        uses: FreeRTOS/CI-CD-Github-Actions/sbom-generator@main
30        with:
31          repo_path: ./
32          source_path: ./source
33      - name: commit SBOM file
34        run: |
35          git add .
36          git commit -m 'Update SBOM'
37          git push -u origin ${{ github.event.inputs.version_number }}
38      - name: Tag Commit and Push to remote
39        run: |
40          git tag ${{ github.event.inputs.version_number }} -a -m "FreeRTOS-Plus-TCP Library ${{ github.event.inputs.version_number }}"
41          git push origin --tags
42      - name: Verify tag on remote
43        run: |
44          git tag -d ${{ github.event.inputs.version_number }}
45          git remote update
46          git checkout tags/${{ github.event.inputs.version_number }}
47          git diff ${{ github.event.inputs.commit_id }} tags/${{ github.event.inputs.version_number }}
48  create-zip:
49    needs: tag-commit
50    name: Create ZIP and verify package for release asset.
51    runs-on: ubuntu-latest
52    steps:
53      - name: Install ZIP tools
54        run: sudo apt-get install zip unzip
55      - name: Checkout code
56        uses: actions/checkout@v2
57        with:
58          ref: ${{ github.event.inputs.commit_id }}
59          path: FreeRTOS-Plus-TCP
60          submodules: recursive
61      - name: Checkout disabled submodules
62        run: |
63          cd FreeRTOS-Plus-TCP
64          git submodule update --init --checkout --recursive
65      - name: Create ZIP
66        run: |
67          zip -r FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip FreeRTOS-Plus-TCP -x "*.git*"
68          ls ./
69      - name: Validate created ZIP
70        run: |
71          mkdir zip-check
72          mv FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip zip-check
73          cd zip-check
74          unzip FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip -d FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}
75          ls FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}
76          diff -r -x "*.git*" FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}/FreeRTOS-Plus-TCP/ ../FreeRTOS-Plus-TCP/
77          cd ../
78      - name: Build
79        run: |
80          cd zip-check/FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}/FreeRTOS-Plus-TCP
81          sudo apt-get install -y lcov
82          sudo apt-get install unifdef
83          cmake -S test/unit-test -B test/unit-test/build/
84          make -C test/unit-test/build/ all
85      - name: Test
86        run: |
87          cd zip-check/FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}/FreeRTOS-Plus-TCP
88          pushd test/unit-test/build/
89          ctest -E system --output-on-failure
90          popd
91          make -C test/unit-test/build/ coverage
92          lcov --list --rc lcov_branch_coverage=1 test/unit-test/build/coverage.info
93          cd ..
94      - name: Create artifact of ZIP
95        uses: actions/upload-artifact@v2
96        with:
97          name: FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip
98          path: zip-check/FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip
99  deploy-doxygen:
100    needs: tag-commit
101    name: Deploy doxygen documentation
102    runs-on: ubuntu-latest
103    steps:
104      - name: Doxygen generation
105        uses: FreeRTOS/CI-CD-Github-Actions/doxygen-generation@main
106        with:
107          ref: ${{ github.event.inputs.version_number }}
108          add_release: "true"
109  create-release:
110    needs:
111      - create-zip
112      - deploy-doxygen
113    name: Create Release and Upload Release Asset
114    runs-on: ubuntu-latest
115    steps:
116      - name: Create Release
117        id: create_release
118        uses: actions/create-release@v1
119        env:
120          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
121        with:
122          tag_name: ${{ github.event.inputs.version_number }}
123          release_name: ${{ github.event.inputs.version_number }}
124          body: Release ${{ github.event.inputs.version_number }} of the FreeRTOS-Plus-TCP Library.
125          draft: false
126          prerelease: false
127      - name: Download ZIP artifact
128        uses: actions/download-artifact@v2
129        with:
130          name: FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip
131      - name: Upload Release Asset
132        id: upload-release-asset
133        uses: actions/upload-release-asset@v1
134        env:
135          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
136        with:
137          upload_url: ${{ steps.create_release.outputs.upload_url }}
138          asset_path: ./FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip
139          asset_name: FreeRTOS-Plus-TCP-${{ github.event.inputs.version_number }}.zip
140          asset_content_type: application/zip
141