Refactor CI/CD workflows
This commit is contained in:
5
.github/CODEOWNERS
vendored
5
.github/CODEOWNERS
vendored
@@ -1,5 +0,0 @@
|
|||||||
* @element-hq/element-web-reviewers
|
|
||||||
/.github/workflows/** @element-hq/element-web-team
|
|
||||||
/package.json @element-hq/element-web-team
|
|
||||||
/yarn.lock @element-hq/element-web-team
|
|
||||||
/src/i18n/strings
|
|
||||||
76
.github/ISSUE_TEMPLATE/bug-desktop.yml
vendored
76
.github/ISSUE_TEMPLATE/bug-desktop.yml
vendored
@@ -1,76 +0,0 @@
|
|||||||
name: Bug report for the Element desktop app (not in a browser)
|
|
||||||
description: File a bug report if you are using the desktop Element application.
|
|
||||||
labels: [T-Defect]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thanks for taking the time to fill out this bug report!
|
|
||||||
|
|
||||||
Please report security issues by email to security@matrix.org
|
|
||||||
- type: textarea
|
|
||||||
id: reproduction-steps
|
|
||||||
attributes:
|
|
||||||
label: Steps to reproduce
|
|
||||||
description: Please attach screenshots, videos or logs if you can.
|
|
||||||
placeholder: Tell us what you see!
|
|
||||||
value: |
|
|
||||||
1. Where are you starting? What can you see?
|
|
||||||
2. What do you click?
|
|
||||||
3. More steps…
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: result
|
|
||||||
attributes:
|
|
||||||
label: Outcome
|
|
||||||
placeholder: Tell us what went wrong
|
|
||||||
value: |
|
|
||||||
#### What did you expect?
|
|
||||||
|
|
||||||
#### What happened instead?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: input
|
|
||||||
id: os
|
|
||||||
attributes:
|
|
||||||
label: Operating system
|
|
||||||
placeholder: Windows, macOS, Ubuntu, Arch Linux…
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: version
|
|
||||||
attributes:
|
|
||||||
label: Application version
|
|
||||||
description: You can find the version information in Settings -> Help & About.
|
|
||||||
placeholder: e.g. Element version 1.7.34, olm version 3.2.3
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: source
|
|
||||||
attributes:
|
|
||||||
label: How did you install the app?
|
|
||||||
description: Where did you install the app from? Please give a link or a description.
|
|
||||||
placeholder: e.g. From https://element.io/get-started
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: input
|
|
||||||
id: homeserver
|
|
||||||
attributes:
|
|
||||||
label: Homeserver
|
|
||||||
description: |
|
|
||||||
Which server is your account registered on? If it is a local or non-public homeserver, please tell us what is the homeserver implementation (ex: Synapse/Dendrite/etc.) and the version.
|
|
||||||
placeholder: e.g. matrix.org or Synapse 1.50.0rc1
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: dropdown
|
|
||||||
id: rageshake
|
|
||||||
attributes:
|
|
||||||
label: Will you send logs?
|
|
||||||
description: |
|
|
||||||
Did you know that you can send a /rageshake command from your application to submit logs for this issue? Trigger the defect, then type `/rageshake` into the message input area followed by a description of the problem and send the command. You will be able to add a link to this defect report and submit anonymous logs to the developers.
|
|
||||||
options:
|
|
||||||
- "Yes"
|
|
||||||
- "No"
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
5
.github/ISSUE_TEMPLATE/config.yml
vendored
5
.github/ISSUE_TEMPLATE/config.yml
vendored
@@ -1,5 +0,0 @@
|
|||||||
blank_issues_enabled: false
|
|
||||||
contact_links:
|
|
||||||
- name: Bug report for the Element flatpak app
|
|
||||||
url: https://github.com/flathub/im.riot.Riot/issues
|
|
||||||
about: Please file bugs with the Flatpak application on the respective repository.
|
|
||||||
36
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
36
.github/ISSUE_TEMPLATE/enhancement.yml
vendored
@@ -1,36 +0,0 @@
|
|||||||
name: Enhancement request
|
|
||||||
description: Do you have a suggestion or feature request?
|
|
||||||
labels: [T-Enhancement]
|
|
||||||
body:
|
|
||||||
- type: markdown
|
|
||||||
attributes:
|
|
||||||
value: |
|
|
||||||
Thank you for taking the time to propose an enhancement to an existing feature. If you would like to propose a new feature or a major cross-platform change, please [start a discussion here](https://github.com/vector-im/element-meta/discussions/new?category=ideas).
|
|
||||||
- type: textarea
|
|
||||||
id: usecase
|
|
||||||
attributes:
|
|
||||||
label: Your use case
|
|
||||||
description: What would you like to be able to do? Please feel welcome to include screenshots or mock ups.
|
|
||||||
placeholder: Tell us what you would like to do!
|
|
||||||
value: |
|
|
||||||
#### What would you like to do?
|
|
||||||
|
|
||||||
#### Why would you like to do it?
|
|
||||||
|
|
||||||
#### How would you like to achieve it?
|
|
||||||
validations:
|
|
||||||
required: true
|
|
||||||
- type: textarea
|
|
||||||
id: alternative
|
|
||||||
attributes:
|
|
||||||
label: Have you considered any alternatives?
|
|
||||||
placeholder: A clear and concise description of any alternative solutions or features you've considered.
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
- type: textarea
|
|
||||||
id: additional-context
|
|
||||||
attributes:
|
|
||||||
label: Additional context
|
|
||||||
placeholder: Is there anything else you'd like to add?
|
|
||||||
validations:
|
|
||||||
required: false
|
|
||||||
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
8
.github/PULL_REQUEST_TEMPLATE.md
vendored
@@ -1,8 +0,0 @@
|
|||||||
<!-- Thanks for submitting a PR! Please ensure the following requirements are met in order for us to review your PR -->
|
|
||||||
|
|
||||||
## Checklist
|
|
||||||
|
|
||||||
- [ ] Ensure your code works with manual testing.
|
|
||||||
- [ ] New or updated `public`/`exported` symbols have accurate [TSDoc](https://tsdoc.org/) documentation.
|
|
||||||
- [ ] Linter and other CI checks pass.
|
|
||||||
- [ ] I have licensed the changes to Element by completing the [Contributor License Agreement (CLA)](https://cla-assistant.io/element-hq/element-desktop)
|
|
||||||
31
.github/labels.yml
vendored
31
.github/labels.yml
vendored
@@ -1,31 +0,0 @@
|
|||||||
- name: "A-Install"
|
|
||||||
color: "72A447"
|
|
||||||
- name: "A-Seshat"
|
|
||||||
color: "8262BE"
|
|
||||||
- name: "A-Update"
|
|
||||||
color: "17BE67"
|
|
||||||
- name: "Story"
|
|
||||||
description: "A change to the product that generates user value on its own. Unit of delivery."
|
|
||||||
color: "0BAC47"
|
|
||||||
- name: "X-Breaking-Change"
|
|
||||||
color: "ff7979"
|
|
||||||
- name: "Z-Arch"
|
|
||||||
color: "D601BE"
|
|
||||||
- name: "Z-ARM"
|
|
||||||
color: "5DEC5B"
|
|
||||||
- name: "Z-Flatpak"
|
|
||||||
color: "0CA856"
|
|
||||||
- name: "Z-Linux"
|
|
||||||
color: "7B4A9C"
|
|
||||||
- name: "Z-macOS"
|
|
||||||
color: "500605"
|
|
||||||
- name: "Z-Official"
|
|
||||||
color: "1D2B20"
|
|
||||||
- name: "Z-Snap"
|
|
||||||
color: "29CD95"
|
|
||||||
- name: "Z-Suse"
|
|
||||||
color: "79D07B"
|
|
||||||
- name: "Z-Wayland"
|
|
||||||
color: "94C519"
|
|
||||||
- name: "Z-Windows"
|
|
||||||
color: "0632DE"
|
|
||||||
4
.github/renovate.json
vendored
4
.github/renovate.json
vendored
@@ -1,4 +0,0 @@
|
|||||||
{
|
|
||||||
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
|
|
||||||
"extends": ["github>matrix-org/renovate-config-element-web"]
|
|
||||||
}
|
|
||||||
32
.github/workflows/backport.yml
vendored
32
.github/workflows/backport.yml
vendored
@@ -1,32 +0,0 @@
|
|||||||
name: Backport
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
types:
|
|
||||||
- closed
|
|
||||||
- labeled
|
|
||||||
branches:
|
|
||||||
- develop
|
|
||||||
|
|
||||||
permissions: {} # We use ELEMENT_BOT_TOKEN instead
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
backport:
|
|
||||||
name: Backport
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
# Only react to merged PRs for security reasons.
|
|
||||||
# See https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#pull_request_target.
|
|
||||||
if: >
|
|
||||||
github.event.pull_request.merged
|
|
||||||
&& (
|
|
||||||
github.event.action == 'closed'
|
|
||||||
|| (
|
|
||||||
github.event.action == 'labeled'
|
|
||||||
&& contains(github.event.label.name, 'backport')
|
|
||||||
)
|
|
||||||
)
|
|
||||||
steps:
|
|
||||||
- uses: tibdex/backport@9565281eda0731b1d20c4025c43339fb0a23812e # v2
|
|
||||||
with:
|
|
||||||
labels_template: "<%= JSON.stringify([...labels, 'X-Release-Blocker']) %>"
|
|
||||||
# We can't use GITHUB_TOKEN here or CI won't run on the new PR
|
|
||||||
github_token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
298
.github/workflows/build_and_deploy.yaml
vendored
298
.github/workflows/build_and_deploy.yaml
vendored
@@ -1,298 +0,0 @@
|
|||||||
name: Build and Deploy
|
|
||||||
on:
|
|
||||||
# Nightly build
|
|
||||||
schedule:
|
|
||||||
- cron: "0 9 * * *"
|
|
||||||
# Release build
|
|
||||||
release:
|
|
||||||
types: [published]
|
|
||||||
# Manual nightly & release
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
mode:
|
|
||||||
description: What type of build to trigger. Release builds MUST be ran from the `master` branch.
|
|
||||||
required: true
|
|
||||||
default: nightly
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- nightly
|
|
||||||
- release
|
|
||||||
macos:
|
|
||||||
description: Build macOS
|
|
||||||
required: true
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
windows:
|
|
||||||
description: Build Windows
|
|
||||||
required: true
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
linux:
|
|
||||||
description: Build Linux
|
|
||||||
required: true
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
deploy:
|
|
||||||
description: Deploy artifacts
|
|
||||||
required: true
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
run-name: Element ${{ inputs.mode != 'release' && github.event_name != 'release' && 'Nightly' || 'Desktop' }}
|
|
||||||
concurrency: ${{ github.workflow }}
|
|
||||||
env:
|
|
||||||
R2_BUCKET: ${{ vars.R2_BUCKET }}
|
|
||||||
permissions: {} # Uses ELEMENT_BOT_TOKEN
|
|
||||||
jobs:
|
|
||||||
prepare:
|
|
||||||
uses: ./.github/workflows/build_prepare.yaml
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
with:
|
|
||||||
config: element.io/${{ inputs.mode || (github.event_name == 'release' && 'release') || 'nightly' }}
|
|
||||||
version: ${{ (inputs.mode != 'release' && github.event_name != 'release') && 'develop' || '' }}
|
|
||||||
nightly: ${{ inputs.mode != 'release' && github.event_name != 'release' }}
|
|
||||||
deploy: ${{ inputs.deploy || (github.event_name != 'workflow_dispatch' && github.event.release.prerelease != true) }}
|
|
||||||
secrets:
|
|
||||||
CF_R2_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
|
|
||||||
CF_R2_TOKEN: ${{ secrets.CF_R2_TOKEN }}
|
|
||||||
|
|
||||||
windows:
|
|
||||||
if: github.event_name != 'workflow_dispatch' || inputs.windows
|
|
||||||
needs: prepare
|
|
||||||
name: Windows ${{ matrix.arch }}
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: [x64, arm64]
|
|
||||||
uses: ./.github/workflows/build_windows.yaml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
sign: true
|
|
||||||
arch: ${{ matrix.arch }}
|
|
||||||
version: ${{ needs.prepare.outputs.nightly-version }}
|
|
||||||
|
|
||||||
macos:
|
|
||||||
if: github.event_name != 'workflow_dispatch' || inputs.macos
|
|
||||||
needs: prepare
|
|
||||||
name: macOS
|
|
||||||
uses: ./.github/workflows/build_macos.yaml
|
|
||||||
secrets: inherit
|
|
||||||
with:
|
|
||||||
sign: true
|
|
||||||
base-url: https://packages.element.io/${{ needs.prepare.outputs.packages-dir }}
|
|
||||||
version: ${{ needs.prepare.outputs.nightly-version }}
|
|
||||||
|
|
||||||
linux:
|
|
||||||
if: github.event_name != 'workflow_dispatch' || inputs.linux
|
|
||||||
needs: prepare
|
|
||||||
name: Linux ${{ matrix.arch }} (sqlcipher ${{ matrix.sqlcipher }})
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: [amd64, arm64]
|
|
||||||
sqlcipher: [static]
|
|
||||||
uses: ./.github/workflows/build_linux.yaml
|
|
||||||
with:
|
|
||||||
arch: ${{ matrix.arch }}
|
|
||||||
sqlcipher: ${{ matrix.sqlcipher }}
|
|
||||||
version: ${{ needs.prepare.outputs.nightly-version }}
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
needs:
|
|
||||||
- prepare
|
|
||||||
- macos
|
|
||||||
- linux
|
|
||||||
- windows
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
name: ${{ needs.prepare.outputs.deploy == 'true' && 'Deploy' || 'Deploy (dry-run)' }}
|
|
||||||
if: always() && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled')
|
|
||||||
environment: ${{ needs.prepare.outputs.deploy == 'true' && 'packages.element.io' || '' }}
|
|
||||||
steps:
|
|
||||||
- name: Download artifacts
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
|
|
||||||
- name: Prepare artifacts for deployment
|
|
||||||
run: |
|
|
||||||
set -x
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
for arch in x64 arm64
|
|
||||||
do
|
|
||||||
if [ -d "win-$arch" ]; then
|
|
||||||
mkdir -p packages.element.io/{install,update}/win32/$arch
|
|
||||||
mv win-$arch/squirrel-windows*/*.exe "packages.element.io/install/win32/$arch/"
|
|
||||||
mv win-$arch/squirrel-windows*/*.nupkg "packages.element.io/update/win32/$arch/"
|
|
||||||
mv win-$arch/squirrel-windows*/RELEASES "packages.element.io/update/win32/$arch/"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# macOS
|
|
||||||
if [ -d macos ]; then
|
|
||||||
mkdir -p packages.element.io/{install,update}/macos
|
|
||||||
mv macos/*.dmg packages.element.io/install/macos/
|
|
||||||
mv macos/*-mac.zip packages.element.io/update/macos/
|
|
||||||
mv macos/*.json packages.element.io/update/macos/
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
if [ -d linux-amd64-sqlcipher-static ]; then
|
|
||||||
mkdir -p packages.element.io/install/linux/glibc-x86-64
|
|
||||||
mv linux-amd64-sqlcipher-static/*.tar.gz packages.element.io/install/linux/glibc-x86-64
|
|
||||||
fi
|
|
||||||
if [ -d linux-arm64-sqlcipher-static ]; then
|
|
||||||
mkdir -p packages.element.io/install/linux/glibc-aarch64
|
|
||||||
mv linux-arm64-sqlcipher-static/*.tar.gz packages.element.io/install/linux/glibc-aarch64
|
|
||||||
fi
|
|
||||||
|
|
||||||
# We don't wish to store the installer for every nightly ever, so we only keep the latest
|
|
||||||
- name: "[Nightly] Strip version from installer file"
|
|
||||||
if: needs.prepare.outputs.nightly-version != ''
|
|
||||||
run: |
|
|
||||||
set -x
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
for arch in x64 arm64
|
|
||||||
do
|
|
||||||
[ -d "win-$arch" ] && mv packages.element.io/install/win32/$arch/{*,"Element Nightly Setup"}.exe
|
|
||||||
done
|
|
||||||
|
|
||||||
# macOS
|
|
||||||
[ -d macos ] && mv packages.element.io/install/macos/{*,"Element Nightly"}.dmg
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
[ -d linux-amd64-sqlcipher-static ] && mv packages.element.io/install/linux/glibc-x86-64/{*,element-desktop-nightly}.tar.gz
|
|
||||||
[ -d linux-arm64-sqlcipher-static ] && mv packages.element.io/install/linux/glibc-aarch64/{*,element-desktop-nightly}.tar.gz
|
|
||||||
|
|
||||||
- name: "[Release] Prepare release latest symlink"
|
|
||||||
if: needs.prepare.outputs.nightly-version == ''
|
|
||||||
run: |
|
|
||||||
set -x
|
|
||||||
|
|
||||||
# Windows
|
|
||||||
for arch in x64 arm64
|
|
||||||
do
|
|
||||||
if [ -d "win-$arch" ]; then
|
|
||||||
pushd packages.element.io/install/win32/$arch
|
|
||||||
ln -s "$(find . -type f -iname "*.exe" | xargs -0 -n1 -- basename)" "Element Setup.exe"
|
|
||||||
popd
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
|
|
||||||
# macOS
|
|
||||||
if [ -d macos ]; then
|
|
||||||
pushd packages.element.io/install/macos
|
|
||||||
ln -s "$(find . -type f -iname "*.dmg" | xargs -0 -n1 -- basename)" "Element.dmg"
|
|
||||||
popd
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Linux
|
|
||||||
if [ -d linux-amd64-sqlcipher-static ]; then
|
|
||||||
pushd packages.element.io/install/linux/glibc-x86-64
|
|
||||||
ln -s "$(find . -type f -iname "*.tar.gz" | xargs -0 -n1 -- basename)" "element-desktop.tar.gz"
|
|
||||||
popd
|
|
||||||
fi
|
|
||||||
if [ -d linux-arm64-sqlcipher-static ]; then
|
|
||||||
pushd packages.element.io/install/linux/glibc-aarch64
|
|
||||||
ln -s "$(find . -type f -iname "*.tar.gz" | xargs -0 -n1 -- basename)" "element-desktop.tar.gz"
|
|
||||||
popd
|
|
||||||
fi
|
|
||||||
|
|
||||||
- name: Stash packages.element.io
|
|
||||||
if: needs.prepare.outputs.deploy == 'false'
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: packages.element.io
|
|
||||||
path: packages.element.io
|
|
||||||
|
|
||||||
# Checksum algorithm specified as per https://developers.cloudflare.com/r2/examples/aws/aws-cli/
|
|
||||||
- name: Deploy artifacts
|
|
||||||
if: needs.prepare.outputs.deploy == 'true'
|
|
||||||
run: |
|
|
||||||
set -x
|
|
||||||
aws s3 cp --recursive packages.element.io/ s3://$R2_BUCKET/$DEPLOYMENT_DIR --endpoint-url $R2_URL --region auto --checksum-algorithm CRC32
|
|
||||||
env:
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_TOKEN }}
|
|
||||||
R2_URL: ${{ vars.CF_R2_S3_API }}
|
|
||||||
DEPLOYMENT_DIR: ${{ needs.prepare.outputs.packages-dir }}
|
|
||||||
|
|
||||||
- name: Notify packages.element.io of new files
|
|
||||||
if: needs.prepare.outputs.deploy == 'true'
|
|
||||||
uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # v3
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
repository: element-hq/packages.element.io
|
|
||||||
event-type: packages-index
|
|
||||||
|
|
||||||
- name: Find debs
|
|
||||||
id: deb
|
|
||||||
if: needs.linux.result == 'success'
|
|
||||||
run: |
|
|
||||||
set -x
|
|
||||||
|
|
||||||
for arch in amd64 arm64
|
|
||||||
do
|
|
||||||
echo "$arch=$(ls linux-$arch-sqlcipher-static/*.deb | tail -n1)" >> $GITHUB_OUTPUT
|
|
||||||
done
|
|
||||||
|
|
||||||
- name: Stash debs
|
|
||||||
if: needs.prepare.outputs.deploy == 'false' && needs.linux.result == 'success'
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: debs
|
|
||||||
path: |
|
|
||||||
${{ steps.deb.outputs.amd64 }}
|
|
||||||
${{ steps.deb.outputs.arm64 }}
|
|
||||||
|
|
||||||
- name: Publish amd64 deb to packages.element.io
|
|
||||||
uses: element-hq/packages.element.io@master
|
|
||||||
if: needs.prepare.outputs.deploy == 'true' && needs.linux.result == 'success'
|
|
||||||
with:
|
|
||||||
file: ${{ steps.deb.outputs.amd64 }}
|
|
||||||
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 }}
|
|
||||||
|
|
||||||
- name: Publish arm64 deb to packages.element.io
|
|
||||||
uses: element-hq/packages.element.io@master
|
|
||||||
if: needs.prepare.outputs.deploy == 'true' && needs.linux.result == 'success'
|
|
||||||
with:
|
|
||||||
file: ${{ steps.deb.outputs.arm64 }}
|
|
||||||
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 }}
|
|
||||||
|
|
||||||
deploy-ess:
|
|
||||||
needs: deploy
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
name: Deploy builds to ESS
|
|
||||||
if: needs.prepare.outputs.deploy == 'true' && github.event_name == 'release'
|
|
||||||
env:
|
|
||||||
BUCKET_NAME: "element-desktop-msi.onprem.element.io"
|
|
||||||
AWS_REGION: "eu-central-1"
|
|
||||||
permissions:
|
|
||||||
id-token: write # This is required for requesting the JWT
|
|
||||||
steps:
|
|
||||||
- name: Configure AWS credentials
|
|
||||||
uses: aws-actions/configure-aws-credentials@v4
|
|
||||||
with:
|
|
||||||
role-to-assume: arn:aws:iam::264135176173:role/Push-ElementDesktop-MSI
|
|
||||||
role-session-name: githubaction-run-${{ github.run_id }}
|
|
||||||
aws-region: ${{ env.AWS_REGION }}
|
|
||||||
|
|
||||||
- name: Download artifacts
|
|
||||||
uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
pattern: win-*
|
|
||||||
|
|
||||||
- name: Copy files to S3
|
|
||||||
run: |
|
|
||||||
set -x
|
|
||||||
|
|
||||||
PREFIX="${VERSION%.*}"
|
|
||||||
for file in win-*/*.msi; do
|
|
||||||
filename=$(basename "$file")
|
|
||||||
aws s3 cp "$file" "s3://${{ env.BUCKET_NAME }}/$PREFIX/$filename"
|
|
||||||
done
|
|
||||||
env:
|
|
||||||
VERSION: ${{ github.event.release.tag_name }}
|
|
||||||
46
.github/workflows/build_and_test.yaml
vendored
46
.github/workflows/build_and_test.yaml
vendored
@@ -1,50 +1,22 @@
|
|||||||
name: Build and Test
|
name: Build Windows Package
|
||||||
on:
|
on:
|
||||||
pull_request: {}
|
|
||||||
push:
|
push:
|
||||||
branches: [develop, staging, master]
|
branches: [develop, master, pipeline-rework]
|
||||||
concurrency:
|
pull_request: {}
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
workflow_dispatch: {}
|
||||||
cancel-in-progress: true
|
|
||||||
permissions: {} # No permissions required
|
|
||||||
jobs:
|
jobs:
|
||||||
fetch:
|
fetch:
|
||||||
uses: ./.github/workflows/build_prepare.yaml
|
uses: ./.github/workflows/build_prepare.yaml
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
with:
|
with:
|
||||||
config: ${{ (github.event.pull_request.base.ref || github.ref_name) == 'develop' && 'element.io/nightly' || 'element.io/release' }}
|
config: ""
|
||||||
version: ${{ (github.event.pull_request.base.ref || github.ref_name) == 'develop' && 'develop' || '' }}
|
version: custom
|
||||||
|
|
||||||
windows:
|
windows:
|
||||||
needs: fetch
|
needs: fetch
|
||||||
name: Windows
|
name: Windows Build
|
||||||
uses: ./.github/workflows/build_windows.yaml
|
uses: ./.github/workflows/build_windows.yaml
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
arch: [x64, ia32, arm64]
|
|
||||||
with:
|
with:
|
||||||
arch: ${{ matrix.arch }}
|
arch: x64
|
||||||
|
|
||||||
linux:
|
|
||||||
needs: fetch
|
|
||||||
name: "Linux (${{ matrix.arch }}) (sqlcipher: ${{ matrix.sqlcipher }})"
|
|
||||||
uses: ./.github/workflows/build_linux.yaml
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
sqlcipher: [system, static]
|
|
||||||
arch: [amd64, arm64]
|
|
||||||
with:
|
|
||||||
sqlcipher: ${{ matrix.sqlcipher }}
|
|
||||||
arch: ${{ matrix.arch }}
|
|
||||||
|
|
||||||
macos:
|
|
||||||
needs: fetch
|
|
||||||
name: macOS
|
|
||||||
uses: ./.github/workflows/build_macos.yaml
|
|
||||||
|
|
||||||
tests-done:
|
|
||||||
needs: [windows, linux, macos]
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- run: echo "Tests successful"
|
|
||||||
|
|||||||
196
.github/workflows/build_linux.yaml
vendored
196
.github/workflows/build_linux.yaml
vendored
@@ -1,196 +0,0 @@
|
|||||||
# This workflow relies on actions/cache to store the hak dependency artifacts as they take a long time to build
|
|
||||||
# Due to this extra care must be taken to only ever run all build_* scripts against the same branch to ensure
|
|
||||||
# the correct cache scoping, and additional care must be taken to not run untrusted actions on the develop branch.
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
inputs:
|
|
||||||
arch:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "The architecture to build for, one of 'amd64' | 'arm64'"
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
description: "Version string to override the one in package.json, used for non-release builds"
|
|
||||||
sqlcipher:
|
|
||||||
type: string
|
|
||||||
required: true
|
|
||||||
description: "How to link sqlcipher, one of 'system' | 'static'"
|
|
||||||
env:
|
|
||||||
SQLCIPHER_BUNDLED: ${{ inputs.sqlcipher == 'static' && '1' || '' }}
|
|
||||||
MAX_GLIBC: 2.31 # bullseye-era glibc, used by glibc-check.sh
|
|
||||||
permissions: {} # No permissions required
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
# We build on native infrastructure as matrix-seshat fails to cross-compile properly
|
|
||||||
# https://github.com/matrix-org/seshat/issues/135
|
|
||||||
runs-on: ${{ inputs.arch == 'arm64' && 'ubuntu-22.04-arm' || 'ubuntu-22.04' }}
|
|
||||||
env:
|
|
||||||
HAK_DOCKER_IMAGE: ghcr.io/element-hq/element-desktop-dockerbuild
|
|
||||||
steps:
|
|
||||||
- name: Resolve docker image tag for push
|
|
||||||
if: github.event_name == 'push'
|
|
||||||
run: echo "HAK_DOCKER_IMAGE=$HAK_DOCKER_IMAGE:$GITHUB_REF_NAME" >> $GITHUB_ENV
|
|
||||||
- name: Resolve docker image tag for release
|
|
||||||
if: github.event_name == 'release'
|
|
||||||
run: echo "HAK_DOCKER_IMAGE=$HAK_DOCKER_IMAGE:staging" >> $GITHUB_ENV
|
|
||||||
- name: Resolve docker image tag for other triggers
|
|
||||||
if: github.event_name != 'push' && github.event_name != 'release'
|
|
||||||
run: echo "HAK_DOCKER_IMAGE=$HAK_DOCKER_IMAGE:develop" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- uses: nbucic/variable-mapper@0673f6891a0619ba7c002ecfed0f9f4f39017b6f
|
|
||||||
id: config
|
|
||||||
with:
|
|
||||||
key: "${{ inputs.arch }}"
|
|
||||||
export_to: output
|
|
||||||
map: |
|
|
||||||
{
|
|
||||||
"amd64": {
|
|
||||||
"target": "x86_64-unknown-linux-gnu",
|
|
||||||
"arch": "x86-64"
|
|
||||||
},
|
|
||||||
"arm64": {
|
|
||||||
"target": "aarch64-unknown-linux-gnu",
|
|
||||||
"arch": "aarch64",
|
|
||||||
"build-args": "--arm64"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: webapp
|
|
||||||
|
|
||||||
- name: Cache .hak
|
|
||||||
id: cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
key: ${{ runner.os }}-${{ github.ref_name }}-${{ inputs.sqlcipher }}-${{ inputs.arch }}-${{ hashFiles('hakHash', 'electronVersion', 'dockerbuild/*') }}
|
|
||||||
path: |
|
|
||||||
./.hak
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: .node-version
|
|
||||||
cache: "yarn"
|
|
||||||
env:
|
|
||||||
# Workaround for https://github.com/actions/setup-node/issues/317
|
|
||||||
FORCE_COLOR: 0
|
|
||||||
|
|
||||||
- name: Install Deps
|
|
||||||
run: "yarn install --frozen-lockfile"
|
|
||||||
|
|
||||||
- name: "Get modified files"
|
|
||||||
id: changed_files
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true' && github.event_name == 'pull_request'
|
|
||||||
uses: tj-actions/changed-files@823fcebdb31bb35fdf2229d9f769b400309430d0 # v46
|
|
||||||
with:
|
|
||||||
files: |
|
|
||||||
dockerbuild/**
|
|
||||||
|
|
||||||
# This allows contributors to test changes to the dockerbuild image within a pull request
|
|
||||||
- name: Build docker image
|
|
||||||
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
|
|
||||||
if: steps.changed_files.outputs.any_modified == 'true'
|
|
||||||
with:
|
|
||||||
file: dockerbuild/Dockerfile
|
|
||||||
load: true
|
|
||||||
platforms: linux/${{ inputs.arch }}
|
|
||||||
tags: ${{ env.HAK_DOCKER_IMAGE }}
|
|
||||||
|
|
||||||
- name: Build Natives
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
docker run \
|
|
||||||
-v ${{ github.workspace }}:/work -w /work \
|
|
||||||
-e SQLCIPHER_BUNDLED \
|
|
||||||
$HAK_DOCKER_IMAGE \
|
|
||||||
yarn build:native
|
|
||||||
|
|
||||||
- name: Fix permissions on .hak
|
|
||||||
run: sudo chown -R $USER:$USER .hak
|
|
||||||
|
|
||||||
- name: Check native libraries in hak dependencies
|
|
||||||
run: |
|
|
||||||
shopt -s globstar
|
|
||||||
|
|
||||||
for filename in ./.hak/hakModules/**/*.node; do
|
|
||||||
./scripts/glibc-check.sh $filename
|
|
||||||
done
|
|
||||||
|
|
||||||
- name: Generate debian files and arguments
|
|
||||||
run: |
|
|
||||||
if [ -f changelog.Debian ]; then
|
|
||||||
echo "ED_DEBIAN_CHANGELOG=changelog.Debian" >> $GITHUB_ENV
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Workaround for https://github.com/electron-userland/electron-builder/issues/6116
|
|
||||||
- name: Install fpm
|
|
||||||
if: inputs.arch == 'arm64'
|
|
||||||
run: |
|
|
||||||
sudo apt-get install ruby-dev build-essential
|
|
||||||
sudo gem install fpm
|
|
||||||
echo "USE_SYSTEM_FPM=true" >> $GITHUB_ENV
|
|
||||||
|
|
||||||
- name: Build App
|
|
||||||
run: yarn build --publish never -l ${{ steps.config.outputs.build-args }}
|
|
||||||
env:
|
|
||||||
# Only set for Nightly builds
|
|
||||||
ED_NIGHTLY: ${{ inputs.version }}
|
|
||||||
|
|
||||||
- name: Check native libraries
|
|
||||||
run: |
|
|
||||||
set -x
|
|
||||||
shopt -s globstar
|
|
||||||
|
|
||||||
FILES=$(file dist/**/*.node)
|
|
||||||
echo "$FILES"
|
|
||||||
|
|
||||||
if [ grep -v "$ARCH" ]; then
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
LIBS=$(readelf -d dist/**/*.node | grep NEEDED)
|
|
||||||
echo "$LIBS"
|
|
||||||
|
|
||||||
set +x
|
|
||||||
assert_contains_string() { [[ "$1" == *"$2"* ]]; }
|
|
||||||
! assert_contains_string "$LIBS" "libcrypto.so.1.1"
|
|
||||||
if [ "$SQLCIPHER_BUNDLED" == "1" ]; then
|
|
||||||
! assert_contains_string "$LIBS" "libsqlcipher.so.0"
|
|
||||||
else
|
|
||||||
assert_contains_string "$LIBS" "libsqlcipher.so.0"
|
|
||||||
fi
|
|
||||||
|
|
||||||
./scripts/glibc-check.sh dist/linux-*unpacked/element-desktop*
|
|
||||||
env:
|
|
||||||
ARCH: ${{ steps.config.outputs.arch }}
|
|
||||||
|
|
||||||
# We exclude *-unpacked as it loses permissions and the tarball contains it with correct permissions
|
|
||||||
- name: Upload Artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: linux-${{ inputs.arch }}-sqlcipher-${{ inputs.sqlcipher }}
|
|
||||||
path: |
|
|
||||||
dist
|
|
||||||
!dist/*-unpacked/**
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
- name: Assert all required files are present
|
|
||||||
run: |
|
|
||||||
test -f ./dist/element-desktop*$ARCH.deb
|
|
||||||
test -f ./dist/element-desktop*.tar.gz
|
|
||||||
env:
|
|
||||||
ARCH: ${{ inputs.arch }}
|
|
||||||
|
|
||||||
test:
|
|
||||||
needs: build
|
|
||||||
uses: ./.github/workflows/build_test.yaml
|
|
||||||
with:
|
|
||||||
artifact: linux-${{ inputs.arch }}-sqlcipher-${{ inputs.sqlcipher }}
|
|
||||||
runs-on: ${{ inputs.arch == 'arm64' && 'ubuntu-22.04-arm' || 'ubuntu-22.04' }}
|
|
||||||
executable: /opt/Element*/element-desktop*
|
|
||||||
prepare_cmd: |
|
|
||||||
sudo apt-get -qq update
|
|
||||||
sudo apt install ./dist/*.deb
|
|
||||||
161
.github/workflows/build_macos.yaml
vendored
161
.github/workflows/build_macos.yaml
vendored
@@ -1,161 +0,0 @@
|
|||||||
# This workflow relies on actions/cache to store the hak dependency artifacts as they take a long time to build
|
|
||||||
# Due to this extra care must be taken to only ever run all build_* scripts against the same branch to ensure
|
|
||||||
# the correct cache scoping, and additional care must be taken to not run untrusted actions on the develop branch.
|
|
||||||
on:
|
|
||||||
workflow_call:
|
|
||||||
secrets:
|
|
||||||
APPLE_ID:
|
|
||||||
required: false
|
|
||||||
APPLE_ID_PASSWORD:
|
|
||||||
required: false
|
|
||||||
APPLE_TEAM_ID:
|
|
||||||
required: false
|
|
||||||
APPLE_CSC_KEY_PASSWORD:
|
|
||||||
required: false
|
|
||||||
APPLE_CSC_LINK:
|
|
||||||
required: false
|
|
||||||
inputs:
|
|
||||||
version:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
description: "Version string to override the one in package.json, used for non-release builds"
|
|
||||||
sign:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
description: "Whether to sign & notarise the build, requires 'packages.element.io' environment"
|
|
||||||
base-url:
|
|
||||||
type: string
|
|
||||||
required: false
|
|
||||||
description: "The URL to which the output will be deployed."
|
|
||||||
permissions: {} # No permissions required
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: macos-14 # M1
|
|
||||||
environment: ${{ inputs.sign && 'packages.element.io' || '' }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- uses: actions/download-artifact@v4
|
|
||||||
with:
|
|
||||||
name: webapp
|
|
||||||
|
|
||||||
- name: Cache .hak
|
|
||||||
id: cache
|
|
||||||
uses: actions/cache@v4
|
|
||||||
with:
|
|
||||||
key: ${{ runner.os }}-${{ hashFiles('hakHash', 'electronVersion') }}
|
|
||||||
path: |
|
|
||||||
./.hak
|
|
||||||
|
|
||||||
- name: Install Rust
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
run: |
|
|
||||||
rustup toolchain install stable --profile minimal --no-self-update
|
|
||||||
rustup default stable
|
|
||||||
rustup target add aarch64-apple-darwin
|
|
||||||
rustup target add x86_64-apple-darwin
|
|
||||||
|
|
||||||
# M1 macos-14 comes without Python preinstalled
|
|
||||||
- uses: actions/setup-python@v5
|
|
||||||
with:
|
|
||||||
python-version: "3.13"
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: .node-version
|
|
||||||
cache: "yarn"
|
|
||||||
|
|
||||||
- name: Install Deps
|
|
||||||
run: "yarn install --frozen-lockfile"
|
|
||||||
|
|
||||||
# Python 3.12 drops distutils which keytar relies on
|
|
||||||
- name: Install setuptools
|
|
||||||
run: pip3 install setuptools
|
|
||||||
|
|
||||||
- name: Build Natives
|
|
||||||
if: steps.cache.outputs.cache-hit != 'true'
|
|
||||||
run: yarn build:native:universal
|
|
||||||
|
|
||||||
# We split these because electron-builder gets upset if we set CSC_LINK even to an empty string
|
|
||||||
- name: "[Signed] Build App"
|
|
||||||
if: inputs.sign != ''
|
|
||||||
run: |
|
|
||||||
yarn build:universal --publish never
|
|
||||||
env:
|
|
||||||
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
|
|
||||||
APPLE_ID: ${{ secrets.APPLE_ID }}
|
|
||||||
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }}
|
|
||||||
CSC_KEY_PASSWORD: ${{ secrets.APPLE_CSC_KEY_PASSWORD }}
|
|
||||||
CSC_LINK: ${{ secrets.APPLE_CSC_LINK }}
|
|
||||||
# Only set for Nightly builds
|
|
||||||
ED_NIGHTLY: ${{ inputs.version }}
|
|
||||||
|
|
||||||
- name: Check app was signed & notarised successfully
|
|
||||||
if: inputs.sign != ''
|
|
||||||
run: |
|
|
||||||
hdiutil attach dist/*.dmg -mountpoint /Volumes/Element
|
|
||||||
codesign -dv --verbose=4 /Volumes/Element/*.app
|
|
||||||
spctl -a -vvv -t install /Volumes/Element/*.app
|
|
||||||
hdiutil detach /Volumes/Element
|
|
||||||
|
|
||||||
- name: "[Unsigned] Build App"
|
|
||||||
if: inputs.sign == ''
|
|
||||||
run: |
|
|
||||||
yarn build:universal --publish never
|
|
||||||
env:
|
|
||||||
CSC_IDENTITY_AUTO_DISCOVERY: false
|
|
||||||
|
|
||||||
- name: Generate releases.json
|
|
||||||
if: inputs.base-url
|
|
||||||
run: |
|
|
||||||
PKG_JSON_VERSION=$(cat package.json | jq -r .version)
|
|
||||||
LATEST=$(find dist -type f -iname "*-mac.zip" | xargs -0 -n1 -- basename)
|
|
||||||
# Encode spaces in the URL as Squirrel.Mac complains about bad JSON otherwise
|
|
||||||
URL="${{ inputs.base-url }}/update/macos/${LATEST// /%20}"
|
|
||||||
|
|
||||||
jq -n --arg version "${VERSION:-$PKG_JSON_VERSION}" --arg url "$URL" '
|
|
||||||
{
|
|
||||||
currentRelease: $version,
|
|
||||||
releases: [{
|
|
||||||
version: $version,
|
|
||||||
updateTo: {
|
|
||||||
version: $version,
|
|
||||||
url: $url,
|
|
||||||
},
|
|
||||||
}],
|
|
||||||
}
|
|
||||||
' > dist/releases.json
|
|
||||||
jq -n --arg url "$URL" '
|
|
||||||
{ url: $url }
|
|
||||||
' > dist/releases-legacy.json
|
|
||||||
env:
|
|
||||||
VERSION: ${{ inputs.version }}
|
|
||||||
|
|
||||||
# We exclude mac-universal as the unpacked app takes forever to upload and zip and dmg already contains it
|
|
||||||
- name: Upload Artifacts
|
|
||||||
uses: actions/upload-artifact@v4
|
|
||||||
with:
|
|
||||||
name: macos
|
|
||||||
path: |
|
|
||||||
dist
|
|
||||||
!dist/mac-universal/**
|
|
||||||
retention-days: 1
|
|
||||||
|
|
||||||
- name: Assert all required files are present
|
|
||||||
run: |
|
|
||||||
test -f ./dist/Element*.dmg
|
|
||||||
test -f ./dist/Element*-mac.zip
|
|
||||||
|
|
||||||
test:
|
|
||||||
needs: build
|
|
||||||
uses: ./.github/workflows/build_test.yaml
|
|
||||||
with:
|
|
||||||
artifact: macos
|
|
||||||
runs-on: macos-14
|
|
||||||
executable: /Users/runner/Applications/Element*.app/Contents/MacOS/Element*
|
|
||||||
# We need to mount the DMG and copy the app to the Applications folder as a mounted DMG is
|
|
||||||
# read-only and thus would not allow us to override the fuses as is required for Playwright.
|
|
||||||
prepare_cmd: |
|
|
||||||
hdiutil attach ./dist/*.dmg -mountpoint /Volumes/Element &&
|
|
||||||
rsync -a /Volumes/Element/Element*.app ~/Applications/ &&
|
|
||||||
hdiutil detach /Volumes/Element
|
|
||||||
101
.github/workflows/build_prepare.yaml
vendored
101
.github/workflows/build_prepare.yaml
vendored
@@ -10,44 +10,20 @@ on:
|
|||||||
type: string
|
type: string
|
||||||
required: false
|
required: false
|
||||||
description: "The version tag to fetch, or 'develop', will pick automatically if not passed"
|
description: "The version tag to fetch, or 'develop', will pick automatically if not passed"
|
||||||
nightly:
|
|
||||||
type: boolean
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
description: "Whether the build is a Nightly and to calculate the version strings new builds should use"
|
|
||||||
deploy:
|
|
||||||
type: boolean
|
|
||||||
required: false
|
|
||||||
default: false
|
|
||||||
description: "Whether the build should be deployed to production"
|
|
||||||
secrets:
|
|
||||||
# Required if `nightly` is set
|
|
||||||
CF_R2_ACCESS_KEY_ID:
|
|
||||||
required: false
|
|
||||||
# Required if `nightly` is set
|
|
||||||
CF_R2_TOKEN:
|
|
||||||
required: false
|
|
||||||
outputs:
|
outputs:
|
||||||
nightly-version:
|
|
||||||
description: "The version string the next Nightly should use, only output for nightly"
|
|
||||||
value: ${{ jobs.prepare.outputs.nightly-version }}
|
|
||||||
packages-dir:
|
packages-dir:
|
||||||
description: "The directory non-deb packages for this run should live in within packages.element.io"
|
description: "The directory non-deb packages for this run should live in"
|
||||||
value: ${{ inputs.nightly && 'nightly' || 'desktop' }}
|
value: "desktop"
|
||||||
# This is just a simple pass-through of the input to simplify reuse of complex inline conditions
|
|
||||||
deploy:
|
deploy:
|
||||||
description: "Whether the build should be deployed to production"
|
description: "Whether the build should be deployed to production"
|
||||||
value: ${{ inputs.deploy }}
|
value: false
|
||||||
permissions: {}
|
permissions: {}
|
||||||
jobs:
|
jobs:
|
||||||
prepare:
|
prepare:
|
||||||
name: Prepare
|
name: Prepare
|
||||||
environment: ${{ inputs.nightly && 'packages.element.io' || '' }}
|
runs-on: windows-gp
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
outputs:
|
|
||||||
nightly-version: ${{ steps.versions.outputs.nightly }}
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v4
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
@@ -62,81 +38,13 @@ jobs:
|
|||||||
- name: Fetch Element Web
|
- name: Fetch Element Web
|
||||||
run: yarn run fetch --noverify -d ${{ inputs.config }} ${{ inputs.version }}
|
run: yarn run fetch --noverify -d ${{ inputs.config }} ${{ inputs.version }}
|
||||||
|
|
||||||
# We split this out to save the build_* scripts having to do it to make use of `hashFiles` in the cache action
|
|
||||||
- name: Generate cache hash files
|
- name: Generate cache hash files
|
||||||
run: |
|
run: |
|
||||||
# Add --no-sandbox as otherwise it fails because the helper isn't setuid root. It's only getting the version.
|
|
||||||
yarn run --silent electron --no-sandbox --version > electronVersion
|
yarn run --silent electron --no-sandbox --version > electronVersion
|
||||||
cat package.json | jq -c .hakDependencies | sha1sum > hakHash
|
cat package.json | jq -c .hakDependencies | sha1sum > hakHash
|
||||||
find hak -type f -print0 | xargs -0 sha1sum >> hakHash
|
find hak -type f -print0 | xargs -0 sha1sum >> hakHash
|
||||||
find scripts/hak -type f -print0 | xargs -0 sha1sum >> hakHash
|
find scripts/hak -type f -print0 | xargs -0 sha1sum >> hakHash
|
||||||
|
|
||||||
- name: "[Nightly] Calculate version"
|
|
||||||
id: versions
|
|
||||||
if: inputs.nightly
|
|
||||||
run: |
|
|
||||||
# Find all latest Nightly versions
|
|
||||||
aws s3 cp s3://$R2_BUCKET/nightly/update/macos/releases.json - --endpoint-url $R2_URL --region auto | jq -r .currentRelease >> VERSIONS
|
|
||||||
aws s3 cp s3://$R2_BUCKET/debian/dists/default/main/binary-amd64/Packages - --endpoint-url $R2_URL --region auto | grep "Package: element-nightly" -A 50 | grep Version -m1 | sed -n 's/Version: //p' >> VERSIONS
|
|
||||||
aws s3 cp s3://$R2_BUCKET/debian/dists/default/main/binary-arm64/Packages - --endpoint-url $R2_URL --region auto | grep "Package: element-nightly" -A 50 | grep Version -m1 | sed -n 's/Version: //p' >> VERSIONS
|
|
||||||
aws s3 cp s3://$R2_BUCKET/nightly/update/win32/x64/RELEASES - --endpoint-url $R2_URL --region auto | awk '{print $2}' | cut -d "-" -f 5 | cut -c 8- >> VERSIONS
|
|
||||||
aws s3 cp s3://$R2_BUCKET/nightly/update/win32/arm64/RELEASES - --endpoint-url $R2_URL --region auto | awk '{print $2}' | cut -d "-" -f 5 | cut -c 8- >> VERSIONS
|
|
||||||
|
|
||||||
# Pick the greatest one
|
|
||||||
VERSION=$(cat VERSIONS | sort -uf | tail -n1)
|
|
||||||
echo "Found latest nightly version $VERSION"
|
|
||||||
# Increment it
|
|
||||||
echo "nightly=$(scripts/generate-nightly-version.ts --latest $VERSION)" >> $GITHUB_OUTPUT
|
|
||||||
env:
|
|
||||||
AWS_ACCESS_KEY_ID: ${{ secrets.CF_R2_ACCESS_KEY_ID }}
|
|
||||||
AWS_SECRET_ACCESS_KEY: ${{ secrets.CF_R2_TOKEN }}
|
|
||||||
R2_BUCKET: ${{ vars.R2_BUCKET }}
|
|
||||||
R2_URL: ${{ vars.CF_R2_S3_API }}
|
|
||||||
|
|
||||||
- name: Check version
|
|
||||||
id: package
|
|
||||||
run: |
|
|
||||||
echo "version=$(cat package.json | jq -r .version)" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: "[Release] Fetch release"
|
|
||||||
id: release
|
|
||||||
if: ${{ !inputs.nightly && inputs.version != 'develop' }}
|
|
||||||
uses: cardinalby/git-get-release-action@cedef2faf69cb7c55b285bad07688d04430b7ada # v1
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ github.token }}
|
|
||||||
with:
|
|
||||||
tag: v${{ steps.package.outputs.version }}
|
|
||||||
|
|
||||||
- name: "[Release] Write changelog"
|
|
||||||
if: ${{ !inputs.nightly && inputs.version != 'develop' }}
|
|
||||||
run: |
|
|
||||||
TIME=$(date -d "$PUBLISHED_AT" -R)
|
|
||||||
echo "element-desktop ($VERSION) default; urgency=medium" >> changelog.Debian
|
|
||||||
echo "$BODY" | sed 's/^##/\n */g;s/^\*/ */g' | perl -pe 's/\[.+?]\((.+?)\)/\1/g' >> changelog.Debian
|
|
||||||
echo "" >> changelog.Debian
|
|
||||||
echo " -- $ACTOR <support@element.io> $TIME" >> changelog.Debian
|
|
||||||
env:
|
|
||||||
ACTOR: ${{ github.actor }}
|
|
||||||
VERSION: v${{ steps.package.outputs.version }}
|
|
||||||
BODY: ${{ steps.release.outputs.body }}
|
|
||||||
PUBLISHED_AT: ${{ steps.release.outputs.published_at }}
|
|
||||||
|
|
||||||
- name: "[Nightly] Write summary"
|
|
||||||
if: inputs.nightly
|
|
||||||
run: |
|
|
||||||
BUNDLE_HASH=$(npx asar l webapp.asar | grep /bundles/ | head -n 1 | sed 's|.*/||')
|
|
||||||
WEBAPP_VERSION=$(./scripts/get-version.ts)
|
|
||||||
WEB_VERSION=${WEBAPP_VERSION:0:12}
|
|
||||||
JS_VERSION=${WEBAPP_VERSION:16:12}
|
|
||||||
|
|
||||||
echo "### Nightly build ${{ steps.versions.outputs.nightly }}" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| Component | Version |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| ----------- | ------- |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| Bundle Hash | $BUNDLE_HASH |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| Element Web | [$WEB_VERSION](https://github.com/element-hq/element-web/commit/$WEB_VERSION) |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
echo "| JS SDK | [$JS_VERSION](https://github.com/matrix-org/matrix-js-sdk/commit/$JS_VERSION) |" >> $GITHUB_STEP_SUMMARY
|
|
||||||
|
|
||||||
- uses: actions/upload-artifact@v4
|
- uses: actions/upload-artifact@v4
|
||||||
with:
|
with:
|
||||||
name: webapp
|
name: webapp
|
||||||
@@ -146,4 +54,3 @@ jobs:
|
|||||||
package.json
|
package.json
|
||||||
electronVersion
|
electronVersion
|
||||||
hakHash
|
hakHash
|
||||||
changelog.Debian
|
|
||||||
|
|||||||
20
.github/workflows/build_windows.yaml
vendored
20
.github/workflows/build_windows.yaml
vendored
@@ -33,7 +33,7 @@ on:
|
|||||||
permissions: {} # No permissions required
|
permissions: {} # No permissions required
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: windows-2025
|
runs-on: windows-gp
|
||||||
environment: ${{ inputs.sign && 'packages.element.io' || '' }}
|
environment: ${{ inputs.sign && 'packages.element.io' || '' }}
|
||||||
env:
|
env:
|
||||||
SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.26100.0/x86/signtool.exe"
|
SIGNTOOL_PATH: "C:/Program Files (x86)/Windows Kits/10/bin/10.0.26100.0/x86/signtool.exe"
|
||||||
@@ -106,6 +106,16 @@ jobs:
|
|||||||
- name: Install Deps
|
- name: Install Deps
|
||||||
run: "yarn install --frozen-lockfile"
|
run: "yarn install --frozen-lockfile"
|
||||||
|
|
||||||
|
- name: Append Piskot to version
|
||||||
|
run: |
|
||||||
|
$Version = $(Get-Content package.json | ConvertFrom-Json).version
|
||||||
|
if (-not $Version.EndsWith("-piskot")) {
|
||||||
|
$Version = "$Version-piskot"
|
||||||
|
$Package = Get-Content package.json | ConvertFrom-Json
|
||||||
|
$Package.version = $Version
|
||||||
|
$Package | ConvertTo-Json -Depth 100 | Set-Content package.json
|
||||||
|
}
|
||||||
|
|
||||||
- name: Insert config snippet
|
- name: Insert config snippet
|
||||||
if: steps.config.outputs.extra_config != ''
|
if: steps.config.outputs.extra_config != ''
|
||||||
shell: bash
|
shell: bash
|
||||||
@@ -216,11 +226,3 @@ jobs:
|
|||||||
Test-Path './dist/squirrel-windows*/element-desktop-*-full.nupkg'
|
Test-Path './dist/squirrel-windows*/element-desktop-*-full.nupkg'
|
||||||
Test-Path './dist/squirrel-windows*/RELEASES'
|
Test-Path './dist/squirrel-windows*/RELEASES'
|
||||||
Test-Path './dist/Element*.msi'
|
Test-Path './dist/Element*.msi'
|
||||||
|
|
||||||
test:
|
|
||||||
needs: build
|
|
||||||
uses: ./.github/workflows/build_test.yaml
|
|
||||||
with:
|
|
||||||
artifact: win-${{ inputs.arch }}
|
|
||||||
runs-on: ${{ inputs.arch == 'arm64' && 'windows-11-arm' || 'windows-2022' }}
|
|
||||||
executable: ./dist/win*-unpacked/Element*.exe
|
|
||||||
|
|||||||
70
.github/workflows/dockerbuild.yaml
vendored
70
.github/workflows/dockerbuild.yaml
vendored
@@ -1,70 +0,0 @@
|
|||||||
name: Dockerbuild
|
|
||||||
on:
|
|
||||||
workflow_dispatch: {}
|
|
||||||
push:
|
|
||||||
branches: [master, staging, develop]
|
|
||||||
paths:
|
|
||||||
- "dockerbuild/**"
|
|
||||||
pull_request:
|
|
||||||
concurrency: ${{ github.workflow }}-${{ github.ref_name }}
|
|
||||||
env:
|
|
||||||
REGISTRY: ghcr.io
|
|
||||||
IMAGE_NAME: ${{ github.repository }}-dockerbuild
|
|
||||||
permissions: {}
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
name: Docker Build
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
packages: write
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- name: Set up QEMU
|
|
||||||
uses: docker/setup-qemu-action@29109295f81e9208d7d86ff1c6c12d2833863392 # v3
|
|
||||||
|
|
||||||
- name: Set up Docker Buildx
|
|
||||||
uses: docker/setup-buildx-action@b5ca514318bd6ebac0fb2aedd5d36ec1b5c232a2 # v3
|
|
||||||
with:
|
|
||||||
install: true
|
|
||||||
|
|
||||||
- name: Build test image
|
|
||||||
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
|
|
||||||
with:
|
|
||||||
file: dockerbuild/Dockerfile
|
|
||||||
push: false
|
|
||||||
load: true
|
|
||||||
tags: element-desktop-dockerbuild
|
|
||||||
platforms: linux/amd64
|
|
||||||
|
|
||||||
- name: Test image
|
|
||||||
run: docker run -v $PWD:/project element-desktop-dockerbuild yarn install
|
|
||||||
|
|
||||||
- name: Log in to the Container registry
|
|
||||||
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772
|
|
||||||
if: github.event_name != 'pull_request'
|
|
||||||
with:
|
|
||||||
registry: ${{ env.REGISTRY }}
|
|
||||||
username: ${{ github.actor }}
|
|
||||||
password: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
|
|
||||||
- name: Extract metadata for Docker
|
|
||||||
id: meta
|
|
||||||
if: github.event_name != 'pull_request'
|
|
||||||
uses: docker/metadata-action@902fa8ec7d6ecbf8d84d538b9b233a880e428804 # v5
|
|
||||||
with:
|
|
||||||
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
|
|
||||||
tags: |
|
|
||||||
type=ref,event=branch
|
|
||||||
type=ref,event=pr
|
|
||||||
|
|
||||||
- name: Build and push Docker image
|
|
||||||
if: github.event_name != 'pull_request'
|
|
||||||
uses: docker/build-push-action@471d1dc4e07e5cdedd4c2171150001c434f0b7a4 # v6
|
|
||||||
with:
|
|
||||||
file: dockerbuild/Dockerfile
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
platforms: linux/amd64,linux/arm64
|
|
||||||
12
.github/workflows/localazy_download.yaml
vendored
12
.github/workflows/localazy_download.yaml
vendored
@@ -1,12 +0,0 @@
|
|||||||
name: Localazy Download
|
|
||||||
on:
|
|
||||||
workflow_dispatch: {}
|
|
||||||
schedule:
|
|
||||||
- cron: "0 6 * * 1,3,5" # Every Monday, Wednesday and Friday at 6am UTC
|
|
||||||
permissions:
|
|
||||||
pull-requests: write # needed to auto-approve PRs
|
|
||||||
jobs:
|
|
||||||
download:
|
|
||||||
uses: matrix-org/matrix-web-i18n/.github/workflows/localazy_download.yaml@main
|
|
||||||
secrets:
|
|
||||||
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
12
.github/workflows/localazy_upload.yaml
vendored
12
.github/workflows/localazy_upload.yaml
vendored
@@ -1,12 +0,0 @@
|
|||||||
name: Localazy Upload
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [develop]
|
|
||||||
paths:
|
|
||||||
- "src/i18n/strings/en_EN.json"
|
|
||||||
permissions: {} # No permissions needed
|
|
||||||
jobs:
|
|
||||||
upload:
|
|
||||||
uses: matrix-org/matrix-web-i18n/.github/workflows/localazy_upload.yaml@main
|
|
||||||
secrets:
|
|
||||||
LOCALAZY_WRITE_KEY: ${{ secrets.LOCALAZY_WRITE_KEY }}
|
|
||||||
14
.github/workflows/release-drafter.yml
vendored
14
.github/workflows/release-drafter.yml
vendored
@@ -1,14 +0,0 @@
|
|||||||
name: Release Drafter
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [staging]
|
|
||||||
workflow_dispatch: {}
|
|
||||||
concurrency: ${{ github.workflow }}
|
|
||||||
permissions: {}
|
|
||||||
jobs:
|
|
||||||
draft:
|
|
||||||
uses: matrix-org/matrix-js-sdk/.github/workflows/release-drafter-workflow.yml@develop
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
with:
|
|
||||||
include-changes: element-hq/element-web~$VERSION
|
|
||||||
12
.github/workflows/release-gitflow.yml
vendored
12
.github/workflows/release-gitflow.yml
vendored
@@ -1,12 +0,0 @@
|
|||||||
# Gitflow merge-back master->develop
|
|
||||||
name: Merge master -> develop
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [master]
|
|
||||||
concurrency: ${{ github.repository }}-${{ github.workflow }}
|
|
||||||
permissions: {} # Uses ELEMENT_BOT_TOKEN
|
|
||||||
jobs:
|
|
||||||
merge:
|
|
||||||
uses: matrix-org/matrix-js-sdk/.github/workflows/release-gitflow.yml@develop
|
|
||||||
secrets:
|
|
||||||
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
85
.github/workflows/static_analysis.yaml
vendored
85
.github/workflows/static_analysis.yaml
vendored
@@ -1,85 +0,0 @@
|
|||||||
name: Static Analysis
|
|
||||||
on:
|
|
||||||
pull_request: {}
|
|
||||||
push:
|
|
||||||
branches: [develop, master]
|
|
||||||
permissions: {} # No permissions needed
|
|
||||||
jobs:
|
|
||||||
ts_lint:
|
|
||||||
name: "Typescript Syntax Check"
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: package.json
|
|
||||||
cache: "yarn"
|
|
||||||
|
|
||||||
# Does not need branch matching as only analyses this layer
|
|
||||||
- name: Install Deps
|
|
||||||
run: "yarn install --frozen-lockfile"
|
|
||||||
|
|
||||||
- name: Typecheck
|
|
||||||
run: "yarn run lint:types"
|
|
||||||
|
|
||||||
i18n_lint:
|
|
||||||
name: "i18n Check"
|
|
||||||
uses: matrix-org/matrix-web-i18n/.github/workflows/i18n_check.yml@main
|
|
||||||
permissions:
|
|
||||||
pull-requests: read
|
|
||||||
with:
|
|
||||||
hardcoded-words: "Element"
|
|
||||||
|
|
||||||
js_lint:
|
|
||||||
name: "ESLint"
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: package.json
|
|
||||||
cache: "yarn"
|
|
||||||
|
|
||||||
# Does not need branch matching as only analyses this layer
|
|
||||||
- name: Install Deps
|
|
||||||
run: "yarn install --frozen-lockfile"
|
|
||||||
|
|
||||||
- name: Run Linter
|
|
||||||
run: "yarn run lint:js"
|
|
||||||
|
|
||||||
workflow_lint:
|
|
||||||
name: "Workflow Lint"
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: package.json
|
|
||||||
cache: "yarn"
|
|
||||||
|
|
||||||
# Does not need branch matching as only analyses this layer
|
|
||||||
- name: Install Deps
|
|
||||||
run: "yarn install --frozen-lockfile"
|
|
||||||
|
|
||||||
- name: Run Linter
|
|
||||||
run: "yarn lint:workflows"
|
|
||||||
|
|
||||||
analyse_dead_code:
|
|
||||||
name: "Analyse Dead Code"
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v4
|
|
||||||
|
|
||||||
- uses: actions/setup-node@v4
|
|
||||||
with:
|
|
||||||
node-version-file: package.json
|
|
||||||
cache: "yarn"
|
|
||||||
|
|
||||||
- name: Install Deps
|
|
||||||
run: "yarn install --frozen-lockfile"
|
|
||||||
|
|
||||||
- name: Run linter
|
|
||||||
run: "yarn run lint:knip"
|
|
||||||
22
.github/workflows/sync-labels.yml
vendored
22
.github/workflows/sync-labels.yml
vendored
@@ -1,22 +0,0 @@
|
|||||||
name: Sync labels
|
|
||||||
on:
|
|
||||||
workflow_dispatch: {}
|
|
||||||
schedule:
|
|
||||||
- cron: "0 2 * * *" # 2am every day
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- develop
|
|
||||||
paths:
|
|
||||||
- .github/labels.yml
|
|
||||||
permissions: {} # Uses ELEMENT_BOT_TOKEN
|
|
||||||
jobs:
|
|
||||||
sync-labels:
|
|
||||||
uses: element-hq/element-meta/.github/workflows/sync-labels.yml@develop
|
|
||||||
with:
|
|
||||||
LABELS: |
|
|
||||||
element-hq/element-web
|
|
||||||
.github/labels.yml
|
|
||||||
DELETE: true
|
|
||||||
WET: true
|
|
||||||
secrets:
|
|
||||||
ELEMENT_BOT_TOKEN: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
16
.github/workflows/triage-incoming.yml
vendored
16
.github/workflows/triage-incoming.yml
vendored
@@ -1,16 +0,0 @@
|
|||||||
name: Move new issues into Issue triage board
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [opened]
|
|
||||||
|
|
||||||
permissions: {} # Uses ELEMENT_BOT_TOKEN
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
automate-project-columns-next:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
steps:
|
|
||||||
- uses: actions/add-to-project@main
|
|
||||||
with:
|
|
||||||
project-url: https://github.com/orgs/element-hq/projects/120
|
|
||||||
github-token: ${{ secrets.ELEMENT_BOT_TOKEN }}
|
|
||||||
12
.github/workflows/triage-labelled.yml
vendored
12
.github/workflows/triage-labelled.yml
vendored
@@ -1,12 +0,0 @@
|
|||||||
name: Move labelled issues to correct projects
|
|
||||||
|
|
||||||
on:
|
|
||||||
issues:
|
|
||||||
types: [labeled]
|
|
||||||
|
|
||||||
permissions: {} # Uses ELEMENT_BOT_TOKEN
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
call-triage-labelled:
|
|
||||||
uses: element-hq/element-web/.github/workflows/triage-labelled.yml@develop
|
|
||||||
secrets: inherit
|
|
||||||
22
.github/workflows/triage-stale.yml
vendored
22
.github/workflows/triage-stale.yml
vendored
@@ -1,22 +0,0 @@
|
|||||||
name: Close stale PRs
|
|
||||||
on:
|
|
||||||
workflow_dispatch: {}
|
|
||||||
schedule:
|
|
||||||
- cron: "30 1 * * *"
|
|
||||||
permissions: {}
|
|
||||||
jobs:
|
|
||||||
close:
|
|
||||||
runs-on: ubuntu-24.04
|
|
||||||
permissions:
|
|
||||||
actions: write
|
|
||||||
issues: write
|
|
||||||
pull-requests: write
|
|
||||||
steps:
|
|
||||||
- uses: actions/stale@v9
|
|
||||||
with:
|
|
||||||
operations-per-run: 250
|
|
||||||
days-before-issue-stale: -1
|
|
||||||
days-before-issue-close: -1
|
|
||||||
days-before-pr-stale: 180
|
|
||||||
days-before-pr-close: 0
|
|
||||||
close-pr-message: "This PR has been automatically closed because it has been stale for 180 days. If you wish to continue working on this PR, please ping a maintainer to reopen it."
|
|
||||||
53
config.json
Normal file
53
config.json
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
{
|
||||||
|
"default_server_config": {
|
||||||
|
"m.homeserver": {
|
||||||
|
"base_url": "https://matrix.org",
|
||||||
|
"server_name": "matrix.org"
|
||||||
|
},
|
||||||
|
"m.identity_server": {
|
||||||
|
"base_url": "https://vector.im"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"disable_custom_urls": false,
|
||||||
|
"disable_guests": false,
|
||||||
|
"disable_login_language_selector": false,
|
||||||
|
"disable_3pid_login": false,
|
||||||
|
"force_verification": false,
|
||||||
|
"brand": "Element",
|
||||||
|
"integrations_ui_url": "https://scalar.vector.im/",
|
||||||
|
"integrations_rest_url": "https://scalar.vector.im/api",
|
||||||
|
"integrations_widgets_urls": [],
|
||||||
|
"default_widget_container_height": 280,
|
||||||
|
"default_country_code": "GB",
|
||||||
|
"show_labs_settings": true,
|
||||||
|
"features": {
|
||||||
|
"threadsActivityCentre": true,
|
||||||
|
"feature_video_rooms": true,
|
||||||
|
"feature_group_calls": true,
|
||||||
|
"feature_element_call_video_rooms": true
|
||||||
|
},
|
||||||
|
"default_federate": true,
|
||||||
|
"default_theme": "light",
|
||||||
|
"room_directory": {
|
||||||
|
"servers": ["matrix.org"]
|
||||||
|
},
|
||||||
|
"enable_presence_by_hs_url": {
|
||||||
|
"https://matrix.org": true,
|
||||||
|
"https://matrix-client.matrix.org": true,
|
||||||
|
"https://dev.element.piskot.si": true
|
||||||
|
},
|
||||||
|
"setting_defaults": {
|
||||||
|
"breadcrumbs": true,
|
||||||
|
"showPresenceByDefault": true
|
||||||
|
},
|
||||||
|
"jitsi": {
|
||||||
|
"preferred_domain": "meet.element.io"
|
||||||
|
},
|
||||||
|
"element_call": {
|
||||||
|
"url": "https://call.element.io",
|
||||||
|
"participant_limit": 8,
|
||||||
|
"brand": "Element Call"
|
||||||
|
},
|
||||||
|
"map_style_url": "https://api.maptiler.com/maps/streets/style.json?key=fU3vlMsMn4Jb6dnEIFsx",
|
||||||
|
"giphy_api_key": "rgvNLrQ9ZhguRGtN4pijScKbft0XLV8X"
|
||||||
|
}
|
||||||
@@ -1,15 +1,15 @@
|
|||||||
{
|
{
|
||||||
"name": "element-desktop",
|
"name": "element-desktop",
|
||||||
"productName": "Element",
|
"productName": "Element Piskot",
|
||||||
"main": "lib/electron-main.js",
|
"main": "lib/electron-main.js",
|
||||||
"exports": "./lib/electron-main.js",
|
"exports": "./lib/electron-main.js",
|
||||||
"version": "1.11.97",
|
"version": "1.11.97-piskot",
|
||||||
"description": "Element: the future of secure communication",
|
"description": "Element: the future of secure communication",
|
||||||
"author": "Element",
|
"author": "Element",
|
||||||
"homepage": "https://element.io",
|
"homepage": "https://element.io",
|
||||||
"repository": {
|
"repository": {
|
||||||
"type": "git",
|
"type": "git",
|
||||||
"url": "https://github.com/vector-im/element-desktop"
|
"url": "https://git.piskot.si/nikrozman/element-desktop"
|
||||||
},
|
},
|
||||||
"license": "SEE LICENSE IN README.md",
|
"license": "SEE LICENSE IN README.md",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|||||||
Reference in New Issue
Block a user