diff --git a/.github/workflows/dd-build.yaml b/.github/workflows/dd-build.yaml new file mode 100644 index 00000000000..537da76f48e --- /dev/null +++ b/.github/workflows/dd-build.yaml @@ -0,0 +1,129 @@ +name: Build and Push etcd releases + +on: + push: + # Sequence of patterns matched against refs/heads + tags: + # Push events on datadog tags + - "*-dd*" +permissions: write-all +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Set release version environment variable + run: echo RELEASE_VERSION=${GITHUB_REF#refs/tags/} >> $GITHUB_ENV + env: + GITHUB_REF: ${{ github.ref }} + - name: Build etcd + run: REPOSITORY=https://github.com/${{ env.GITHUB_REPOSITORY}}.git ./scripts/build-binary ${{ env.RELEASE_VERSION }} + env: + GITHUB_REPOSITORY: ${{ github.repository }} + - name: Calculate checksums + id: calculate_checksums + shell: bash + working-directory: release/ + run: ls . | grep -E '\.tar.gz$|\.zip$' | xargs shasum -a 256 > ./SHA256SUMS + - uses: actions/upload-artifact@v4 + with: + name: etcd_output + path: release/ + release: + permissions: + contents: write + runs-on: ubuntu-latest + needs: build + outputs: + upload_url: ${{ steps.create_release_branch.outputs.upload_url }}${{ steps.create_release_tags.outputs.upload_url }} + steps: + - name: Extract branch name + shell: bash + run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF#refs/heads/})" + id: extract_branch + env: + GITHUB_REF: ${{ github.ref }} + if: startsWith(github.ref, 'refs/heads/') + - name: Create Release for Branch + id: create_release_branch + uses: softprops/action-gh-release@v2 + if: startsWith(github.ref, 'refs/heads/') + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: branch@${{ steps.extract_branch.outputs.branch }} + tag_name: branch@${{ steps.extract_branch.outputs.branch }} + draft: false + prerelease: false + - name: Extract tags name + shell: bash + run: echo "##[set-output name=tags;]$(echo ${GITHUB_REF#refs/tags/})" + id: extract_tags + env: + GITHUB_REF: ${{ github.ref }} + if: startsWith(github.ref, 'refs/tags/') + - name: Create Release for Tags + id: create_release_tags + uses: softprops/action-gh-release@v2 + if: ${{ startsWith(github.ref, 'refs/tags/') }} + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: ${{ steps.extract_tags.outputs.tags }} + tag_name: ${{ steps.extract_tags.outputs.tags }} + release_name: ${{ steps.extract_tags.outputs.tags }} + draft: false + prerelease: false + releaseassetsarm: + runs-on: ubuntu-latest + needs: release + strategy: + matrix: + platform: ["linux-arm64","linux-amd64"] + extension: ["tar.gz"] + steps: + - uses: actions/download-artifact@v4 + with: + name: etcd_output + path: _output/release-tars + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Set release version environment variable + run: echo RELEASE_VERSION=${GITHUB_REF#refs/tags/} >> $GITHUB_ENV + env: + GITHUB_REF: ${{ github.ref }} + - name: Display structure of downloaded files + run: ls -R + working-directory: _output + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.release.outputs.upload_url }} + asset_path: ./_output/release-tars/etcd-${{ env.RELEASE_VERSION }}-${{ matrix.platform }}.${{ matrix.extension }} + asset_name: etcd-${{ env.RELEASE_VERSION }}-${{ matrix.platform }}.${{ matrix.extension }} + asset_content_type: application/tar+gzip + addchecksum: + runs-on: ubuntu-latest + needs: release + steps: + - uses: actions/download-artifact@v4 + with: + name: etcd_output + path: _output/checksums + github-token: ${{ secrets.GITHUB_TOKEN }} + - name: Upload checksums + id: upload-checksums + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.release.outputs.upload_url }} + asset_path: ./_output/checksums/SHA256SUMS + asset_name: SHA256SUMS + asset_content_type: text/plain