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