xref: /CoreMQTT-Agent-v1.1.0/.github/workflows/release.yml (revision 91fde8f9da4af67c9e417be8e2a177185b875497)
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      delete_existing_tag_release:
13        description: 'Is this a re-release of existing tag/release? (Default: false)'
14        default: 'false'
15        required: false
16jobs:
17  clean-existing-tag-and-release:
18    if: ${{ github.event.inputs.delete_existing_tag_release == 'true' }}
19    runs-on: ubuntu-latest
20    env:
21      VERSION_NUM: ${{ github.event.inputs.version_number }}
22      GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
23    steps:
24      - name: Checkout code
25        uses: actions/checkout@v2
26      - name: Check if tag exists
27        run: |
28          git fetch origin
29          if git tag --list $VERSION_NUM
30          then
31              echo "Deleting existing tag for $VERSION_NUM"
32              git push origin --delete tags/$VERSION_NUM
33          fi
34      - name: Check if release exists
35        run: |
36          sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0
37          sudo apt-add-repository https://cli.github.com/packages
38          sudo apt update
39          sudo apt-get install gh
40          if gh release list | grep $VERSION_NUM
41          then
42              echo "Deleting existing release for $VERSION_NUM"
43              gh release delete --yes $VERSION_NUM
44          fi
45  tag-commit:
46    if: ${{ ( github.event.inputs.delete_existing_tag_release == 'true' && success() )  || ( github.event.inputs.delete_existing_tag_release == 'false' && always() ) }}
47    needs: clean-existing-tag-and-release
48    name: Tag commit
49    runs-on: ubuntu-latest
50    steps:
51      - name: Checkout code
52        uses: actions/checkout@v2
53        with:
54          ref: ${{ github.event.inputs.commit_id }}
55      - name: Configure git identity
56        run: |
57            git config --global user.name "Release Workflow"
58      - name: Tag Commit and Push to remote
59        run: |
60          git tag ${{ github.event.inputs.version_number }} -a -m "coreMQTT-Agent Library ${{ github.event.inputs.version_number }}"
61          git push origin --tags
62      - name: Verify tag on remote
63        run: |
64          git tag -d ${{ github.event.inputs.version_number }}
65          git remote update
66          git checkout tags/${{ github.event.inputs.version_number }}
67          git diff ${{ github.event.inputs.commit_id }} tags/${{ github.event.inputs.version_number }}
68  create-zip:
69    if: ${{ ( github.event.inputs.delete_existing_tag_release == 'true' && success() )  || ( github.event.inputs.delete_existing_tag_release == 'false' && always() ) }}
70    needs: tag-commit
71    name: Create ZIP and verify package for release asset.
72    runs-on: ubuntu-latest
73    steps:
74      - name: Install ZIP tools
75        run: sudo apt-get install zip unzip
76      - name: Checkout code
77        uses: actions/checkout@v2
78        with:
79          ref: ${{ github.event.inputs.commit_id }}
80          path: coreMQTT-Agent
81          submodules: recursive
82      - name: Checkout disabled submodules
83        run: |
84          cd coreMQTT-Agent
85          git submodule update --init --checkout --recursive
86      - name: Create ZIP
87        run: |
88          zip -r coreMQTT-Agent-${{ github.event.inputs.version_number }}.zip coreMQTT-Agent -x "*.git*"
89          ls ./
90      - name: Validate created ZIP
91        run: |
92          mkdir zip-check
93          mv coreMQTT-Agent-${{ github.event.inputs.version_number }}.zip zip-check
94          cd zip-check
95          unzip coreMQTT-Agent-${{ github.event.inputs.version_number }}.zip -d coreMQTT-Agent-${{ github.event.inputs.version_number }}
96          ls coreMQTT-Agent-${{ github.event.inputs.version_number }}
97          diff -r -x "*.git*" coreMQTT-Agent-${{ github.event.inputs.version_number }}/coreMQTT-Agent/ ../coreMQTT-Agent/
98          cd ../
99      - name: Build
100        run: |
101          cd zip-check/coreMQTT-Agent-${{ github.event.inputs.version_number }}/coreMQTT-Agent
102          sudo apt-get install -y lcov
103          cmake -S test -B build/ \
104          -G "Unix Makefiles" \
105          -DCMAKE_BUILD_TYPE=Debug \
106          -DBUILD_CLONE_SUBMODULES=ON \
107          -DCMAKE_C_FLAGS='--coverage -Wall -Wextra -Werror -DNDEBUG'
108          make -C build/ all
109      - name: Test
110        run: |
111          cd zip-check/coreMQTT-Agent-${{ github.event.inputs.version_number }}/coreMQTT-Agent/build/
112          ctest -E system --output-on-failure
113          cd ..
114      - name: Create artifact of ZIP
115        uses: actions/upload-artifact@v2
116        with:
117          name: coreMQTT-Agent-${{ github.event.inputs.version_number }}.zip
118          path: zip-check/coreMQTT-Agent-${{ github.event.inputs.version_number }}.zip
119  create-release:
120    if: ${{ ( github.event.inputs.delete_existing_tag_release == 'true' && success() )  || ( github.event.inputs.delete_existing_tag_release == 'false' && always() ) }}
121    needs: create-zip
122    name: Create Release and Upload Release Asset
123    runs-on: ubuntu-latest
124    steps:
125      - name: Create Release
126        id: create_release
127        uses: actions/create-release@v1
128        env:
129          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
130        with:
131          tag_name: ${{ github.event.inputs.version_number }}
132          release_name: ${{ github.event.inputs.version_number }}
133          body: Release ${{ github.event.inputs.version_number }} of the coreMQTT-Agent Library.
134          draft: false
135          prerelease: false
136      - name: Download ZIP artifact
137        uses: actions/download-artifact@v2
138        with:
139          name: coreMQTT-Agent-${{ github.event.inputs.version_number }}.zip
140      - name: Upload Release Asset
141        id: upload-release-asset
142        uses: actions/upload-release-asset@v1
143        env:
144          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
145        with:
146          upload_url: ${{ steps.create_release.outputs.upload_url }}
147          asset_path: ./coreMQTT-Agent-${{ github.event.inputs.version_number }}.zip
148          asset_name: coreMQTT-Agent-${{ github.event.inputs.version_number }}.zip
149          asset_content_type: application/zip
150