From 134ed0752e2ed20b0a245651d4a4b7a29d99517e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A9vin=20Darcel?= Date: Thu, 21 Mar 2024 13:49:18 +0100 Subject: [PATCH] feat: create a Github release and attach files --- .github/workflows/server-ci-enterprise.yml | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/.github/workflows/server-ci-enterprise.yml b/.github/workflows/server-ci-enterprise.yml index 9ad9b9d310e1a..3885ca67337e2 100644 --- a/.github/workflows/server-ci-enterprise.yml +++ b/.github/workflows/server-ci-enterprise.yml @@ -60,6 +60,72 @@ jobs: path: server/dist/ retention-days: 14 + - name: Create GitHub Release + uses: actions/github-script@v7 + if: ${{ startsWith(github.ref, 'refs/tags/v') }} + with: + script: | + const fs = require('fs'); + const path = require('path'); + + const tag_name = process.env.GITHUB_REF_NAME; + const release_name = `${tag_name}`; + const body = 'Full Changelog: https://github.com/${context.repo.owner}/${context.repo.repo}/commits/${tag_name}'; + const assets = [ + 'server/dist/mattermost-enterprise-linux-amd64.tar.gz', + 'server/dist/mattermost-enterprise-linux-arm64.tar.gz', + 'server/dist/mattermost-enterprise-osx-amd64.tar.gz', + 'server/dist/mattermost-enterprise-osx-arm64.tar.gz', + 'server/dist/mattermost-enterprise-windows-amd64.zip', + ]; + + let releaseId = null; + + try { + const createReleaseResponse = await github.rest.repos.createRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + tag_name: tag_name, + name: release_name, + body: body, + draft: false, + prerelease: false, + }); + + console.log(`Release created: ${createReleaseResponse.data.html_url}`); + releaseId = createReleaseResponse.data.id; + } catch (error) { + if (error.status === 422) { // Unprocessable Entity - often means the release already exists + console.log(`Release already exists for tag ${tag_name}.`); + } else { + console.error(`Error creating release: ${error}`); + throw error; + } + } + + if (releaseId || error.status === 422) { + for (const asset of assets) { + const assetPath = path.join(process.env.GITHUB_WORKSPACE, asset); // Ensure this path is correct + const contentType = asset.endsWith('.zip') ? 'application/zip' : 'application/gzip'; + console.log(`Uploading asset: ${asset}`); + + try { + const uploadAssetResponse = await github.rest.repos.uploadReleaseAsset({ + url: createReleaseResponse.data.upload_url, + headers: { + 'content-type': contentType, + 'content-length': fs.statSync(assetPath).size + }, + name: asset, + data: fs.readFileSync(assetPath), + }); + console.log(`Asset uploaded: ${uploadAssetResponse.data.browser_download_url}`); + } catch (uploadError) { + console.error(`Error uploading asset: ${asset}, ${uploadError}`); + } + } + } + - name: Set up QEMU uses: docker/setup-qemu-action@v3