From edeaf8065e282feae668b47564dc34b6006cbbe4 Mon Sep 17 00:00:00 2001 From: Michael Telatynski <7t3chguy@gmail.com> Date: Thu, 9 Nov 2023 09:56:26 +0000 Subject: [PATCH] Ship element-web as a debian package (#26533) --- .github/workflows/build_debian.yaml | 60 +++++++++++++++++------------ debian/.gitignore | 2 + debian/control | 13 ++++--- 3 files changed, 44 insertions(+), 31 deletions(-) create mode 100644 debian/.gitignore diff --git a/.github/workflows/build_debian.yaml b/.github/workflows/build_debian.yaml index 86553a05bf6..7ab28ff7ca3 100644 --- a/.github/workflows/build_debian.yaml +++ b/.github/workflows/build_debian.yaml @@ -31,38 +31,48 @@ jobs: - name: Prepare run: | - mkdir -p /tmp/element-web-debian/DEBIAN - cp -R debian/ /tmp/element-web-debian/DEBIAN/ - mkdir -p /tmp/element-web-debian/usr/share/element-web/ + mkdir -p debian/tmp/DEBIAN + find debian -maxdepth 1 -type f -exec cp "{}" debian/tmp/DEBIAN/ \; + mkdir -p debian/tmp/usr/share/element-web/ - tar -xf "element-$VERSION.tar.gz" -C /tmp/element-web-debian/usr/share/element-web --strip-components=1 - cp config.sample.json /tmp/element-web-debian/usr/share/element-web/config.json + tar -xf "element-$VERSION.tar.gz" -C debian/tmp/usr/share/element-web --strip-components=1 --no-same-owner --no-same-permissions + mv debian/tmp/usr/share/element-web/config{.sample,}.json + + - name: Write changelog + run: | + VERSION=$(cat package.json | jq -r .version) + TIME=$(date -d "$PUBLISHED_AT" -R) + { + echo "element-web ($VERSION) default; urgency=medium" + echo "$BODY" | sed 's/^##/\n */g;s/^\*/ */g' | perl -pe 's/\[.+?]\((.+?)\)/\1/g' + echo "" + echo " -- $ACTOR $TIME" + } > debian/tmp/DEBIAN/changelog + env: + ACTOR: ${{ github.actor }} + VERSION: ${{ github.event.release.tag_name }} + BODY: ${{ github.event.release.body }} + PUBLISHED_AT: ${{ github.event.release.published_at }} - name: Build deb package run: | VERSION=$(cat package.json | jq -r .version) - chmod -R u=rw,go=r /tmp/element-web-debian/usr/share/element-web/ - dpkg-deb -Zxz --root-owner-group -VVersion=$VERSION --build /tmp/element-web-debian element-web.deb + chmod -R u=rw,go=r debian/tmp/usr/share/element-web/ + dpkg-gencontrol -v"$VERSION" -ldebian/tmp/DEBIAN/changelog + dpkg-deb -Zxz --root-owner-group --build debian/tmp element-web.deb - # For now just upload the artifact to github - uses: actions/upload-artifact@v3 with: - name: debs - path: "*.deb" + name: element-web.deb + path: element-web.deb retention-days: 14 - #- name: Upload incoming deb - # if: github.event.release.prerelease == false - # run: aws s3 cp element-web.deb "s3://$R2_INCOMING_BUCKET" --endpoint-url "$R2_URL" --region auto - # env: - # AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }} - # AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_TOKEN }} - - #reprepro: - # needs: build - # name: Run reprepro - # if: github.event.release.prerelease == false - # uses: ./.github/workflows/reprepro.yaml - # secrets: inherit - # with: - # incoming: element-web.deb + - name: Publish to packages.element.io + if: github.event.release.prerelease == false + uses: vector-im/packages.element.io@master + with: + file: element-web.deb + github-token: ${{ secrets.ELEMENT_BOT_TOKEN }} + bucket-api: ${{ vars.CF_R2_S3_API }} + bucket-key-id: ${{ secrets.CF_R2_ACCESS_KEY_ID }} + bucket-access-key: ${{ secrets.CF_R2_TOKEN }} diff --git a/debian/.gitignore b/debian/.gitignore new file mode 100644 index 00000000000..7b52740dcd5 --- /dev/null +++ b/debian/.gitignore @@ -0,0 +1,2 @@ +/files +/tmp diff --git a/debian/control b/debian/control index d8e38a7503c..158c3ada174 100755 --- a/debian/control +++ b/debian/control @@ -1,12 +1,13 @@ -Package: element-web -License: Apache-2.0 -Vendor: support@element.io -Architecture: all +Source: element-web Maintainer: support@element.io -Recommends: element-io-archive-keyring Section: web Priority: optional Homepage: https://element.io/ -Version: ${Version} + +Package: element-web +Architecture: all +Recommends: httpd, element-io-archive-keyring Description: A feature-rich client for Matrix.org + This package contains the web-based client that can be served through a web + server.