Compare commits

..

3 Commits

Author SHA1 Message Date
Travis Ralston
fc698d63dd Update jenkins.sh 2019-04-17 12:29:44 -06:00
Travis Ralston
b893ea3bdb Update jenkins.sh 2019-04-17 12:22:40 -06:00
Travis Ralston
a5592d5c1f Update jenkins.sh 2019-04-17 12:18:05 -06:00
29 changed files with 1690 additions and 1995 deletions

View File

@@ -1,21 +1,4 @@
{
"presets": [
"react",
"es2015",
"es2016"
],
"plugins": [
[
"transform-builtin-extend",
{
"globals": ["Error"]
}
],
"transform-class-properties",
"transform-object-rest-spread",
"transform-async-to-bluebird",
"transform-runtime",
"add-module-exports",
"syntax-dynamic-import"
]
"presets": ["react", "es2015", "es2016"],
"plugins": ["transform-class-properties", "transform-object-rest-spread", "transform-async-to-bluebird", "transform-runtime", "add-module-exports"]
}

View File

@@ -31,16 +31,3 @@ steps:
- docker#v3.0.1:
image: "node:10"
propagate-environment: true
- label: ":hammer: Package"
command:
- "echo '--- Fetching Dependencies'"
- "./scripts/fetch-develop.deps.sh --depth 1"
- "yarn install"
- "echo '+++ Packaging'"
- "./scripts/ci_package.sh"
branches: "develop"
artifact_paths: "dist/riot-*.tar.gz"
plugins:
- docker#v3.0.1:
image: "node:10"

View File

@@ -1,11 +0,0 @@
# Exclude a bunch of stuff which can make the build context a larger than it needs to be
.git/
test/
webapp/
lib/
node_modules/
electron_app/
karma-reports/
.idea/
.tmp/
config.json*

View File

@@ -2,7 +2,7 @@
name: User Interface or Usability Bug report
about: Please include screenshots in UI/UX bug reports
title: ''
labels: bug, ui/ux
labels: ''
assignees: ''
---

1
.gitignore vendored
View File

@@ -1,6 +1,7 @@
/build
/cert.pem
/dist
/karma-reports
/key.pem
/lib
/node_modules

View File

@@ -1,104 +1,3 @@
Changes in [1.2.0](https://github.com/vector-im/riot-web/releases/tag/v1.2.0) (2019-05-29)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.2.0-rc.1...v1.2.0)
* Upgrade to JS SDK v1.2.0 and React SDK v1.2.0 to fix some regressions
Changes in [1.2.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.2.0-rc.1) (2019-05-23)
====================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.2...v1.2.0-rc.1)
* Update from Weblate
[\#9802](https://github.com/vector-im/riot-web/pull/9802)
* remove emojione
[\#9766](https://github.com/vector-im/riot-web/pull/9766)
* Make Dockerfile work for develop and other branches
[\#9736](https://github.com/vector-im/riot-web/pull/9736)
* add description of new labs feature for message editing
[\#9728](https://github.com/vector-im/riot-web/pull/9728)
* Remove karma junit output
[\#9628](https://github.com/vector-im/riot-web/pull/9628)
* yarn upgrade
[\#9626](https://github.com/vector-im/riot-web/pull/9626)
* Respond quickly to buildkite pokes
[\#9617](https://github.com/vector-im/riot-web/pull/9617)
* Delay creating the `Favico` instance
[\#9616](https://github.com/vector-im/riot-web/pull/9616)
* Add reactions feature to config sample
[\#9598](https://github.com/vector-im/riot-web/pull/9598)
Changes in [1.1.2](https://github.com/vector-im/riot-web/releases/tag/v1.1.2) (2019-05-15)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.1...v1.1.2)
* react-sdk v1.1.2 to fix single sign-on and GIF autoplaying
Changes in [1.1.1](https://github.com/vector-im/riot-web/releases/tag/v1.1.1) (2019-05-14)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.0...v1.1.1)
* react-sdk v1.1.1 to fix regressions with registration
Changes in [1.1.0](https://github.com/vector-im/riot-web/releases/tag/v1.1.0) (2019-05-07)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.1.0-rc.1...v1.1.0)
* Add Dockerfile
[\#9632](https://github.com/vector-im/riot-web/pull/9632)
* Add Dockerfile (part 2)
[\#9426](https://github.com/vector-im/riot-web/pull/9426)
* Add new scalar staging url
[\#9601](https://github.com/vector-im/riot-web/pull/9601)
Changes in [1.1.0-rc.1](https://github.com/vector-im/riot-web/releases/tag/v1.1.0-rc.1) (2019-04-30)
====================================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.8...v1.1.0-rc.1)
* Convert redeploy.py to buildkite
[\#9577](https://github.com/vector-im/riot-web/pull/9577)
* Add package step to buildkite pipeline
[\#9568](https://github.com/vector-im/riot-web/pull/9568)
* Don't fail if there's no local config to remove
[\#9571](https://github.com/vector-im/riot-web/pull/9571)
* Change jenkins script to package script
[\#9567](https://github.com/vector-im/riot-web/pull/9567)
* Remove config.json from package dir
[\#9555](https://github.com/vector-im/riot-web/pull/9555)
* use the release version of olm 3.1.0
[\#9550](https://github.com/vector-im/riot-web/pull/9550)
* Fix default for --include arg
[\#9517](https://github.com/vector-im/riot-web/pull/9517)
* update installation instructions with new repo
[\#9500](https://github.com/vector-im/riot-web/pull/9500)
* Use packages.matrix.org for Olm
[\#9498](https://github.com/vector-im/riot-web/pull/9498)
* Add separate platform electron build commands
[\#9412](https://github.com/vector-im/riot-web/pull/9412)
* Add support for custom profile directory
[\#9408](https://github.com/vector-im/riot-web/pull/9408)
* Improved mobile install guide
[\#9410](https://github.com/vector-im/riot-web/pull/9410)
* Remove vector-electron-desktop from README
[\#9404](https://github.com/vector-im/riot-web/pull/9404)
* Update from Weblate
[\#9398](https://github.com/vector-im/riot-web/pull/9398)
* bump olm version to 3.1.0-pre3
[\#9392](https://github.com/vector-im/riot-web/pull/9392)
* Add expiration to mobile guide cookie
[\#9383](https://github.com/vector-im/riot-web/pull/9383)
* Fix autolaunch setting appearing toggled off
[\#9368](https://github.com/vector-im/riot-web/pull/9368)
* Don't try to save files the user didn't want to save
[\#9352](https://github.com/vector-im/riot-web/pull/9352)
* Setup crypto store for restore session tests
[\#9325](https://github.com/vector-im/riot-web/pull/9325)
* Update from Weblate
[\#9333](https://github.com/vector-im/riot-web/pull/9333)
* Add "Save image as..." button to context menu on images
[\#9326](https://github.com/vector-im/riot-web/pull/9326)
* Configure auth footer links through Riot config
[\#9297](https://github.com/vector-im/riot-web/pull/9297)
Changes in [1.0.8](https://github.com/vector-im/riot-web/releases/tag/v1.0.8) (2019-04-16)
==========================================================================================
[Full Changelog](https://github.com/vector-im/riot-web/compare/v1.0.7...v1.0.8)

View File

@@ -1,31 +0,0 @@
# Builder
FROM node:10-alpine as builder
# Support custom branches of the react-sdk and js-sdk. This also helps us build
# images of riot-web develop.
ARG USE_CUSTOM_SDKS=false
ARG REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git"
ARG REACT_SDK_BRANCH="master"
ARG JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git"
ARG JS_SDK_BRANCH="master"
RUN apk add --no-cache git dos2unix
WORKDIR /src
COPY . /src
RUN dos2unix /src/scripts/docker-link-repos.sh && sh /src/scripts/docker-link-repos.sh
RUN yarn --network-timeout=100000 install
RUN yarn build
# Copy the config now so that we don't create another layer in the app image
RUN cp /src/config.sample.json /src/webapp/config.json
# App
FROM nginx:latest
COPY --from=builder /src/webapp /app
RUN rm -rf /usr/share/nginx/html \
&& ln -s /app /usr/share/nginx/html

View File

@@ -31,8 +31,21 @@ Note that Chrome does not allow microphone or webcam access for sites served
over http (except localhost), so for working VoIP you will need to serve Riot
over https.
To install Riot as a desktop application, see [Running as a desktop
app](#running-as-a-desktop-app) below.
### Desktop Installation for Debian Stretch
1. Add the repository to your sources.list using either of the following two options:
- Directly to sources.list:
`echo "deb https://packages.riot.im/debian/ stretch main" | sudo tee -a /etc/apt/sources.list`
- As a separate entry in sources.list.d:
`echo "deb https://packages.riot.im/debian/ stretch main" | sudo tee /etc/apt/sources.list.d/riot.list`
2. Download and add the gpg signing key used to authenticate the packages from the riot repository to your system's list of trusted keys:
`curl -s https://packages.riot.im/debian/riot-im-archive-keyring.asc | sudo apt-key add -`
- Optional: if you had the old Riot.im signing key in your apt keyring, delete it, as it is no longer considered trusted:
`sudo apt-key del 0x48E8F4A1`
3. Update your package lists:
`sudo apt update`
4. Install Riot:
`sudo apt install riot-web`
Important Security Note
=======================
@@ -189,10 +202,10 @@ Running as a Desktop app
========================
Riot can also be run as a desktop app, wrapped in electron. You can download a
pre-built version from https://riot.im/download/desktop/ or, if you prefer,
build it yourself.
pre-built version from https://riot.im/desktop.html or, if you prefer,
build it yourself. Requires Electron >=1.6.0
To build it yourself, follow the instructions below.
To run as a desktop app:
1. Follow the instructions in 'Building From Source' above, but run
`yarn build` instead of `yarn dist` (since we don't need the tarball).
@@ -253,42 +266,6 @@ To change the config.json for the desktop app, create a config file which will b
In the paths above, `$NAME` is typically `Riot`, unless you use `--profile $PROFILE` in which case it becomes `Riot-$PROFILE`.
Running from Docker
===================
The Docker image can be used to serve riot-web as a web server. The easiest way to use
it is to use the prebuilt image:
```bash
docker run -p 80:80 vectorim/riot-web
```
To supply your own custom `config.json`, map a volume to `/app/config.json`. For example,
if your custom config was located at `/etc/riot-web/config.json` then your Docker command
would be:
```bash
docker run -p 80:80 -v /etc/riot-web/config.json:/app/config.json vectorim/riot-web
```
To build the image yourself:
```bash
git clone https://github.com/vector-im/riot-web.git riot-web
cd riot-web
git checkout master
docker build -t vectorim/riot-web .
```
If you're building a custom branch, or want to use the develop branch, check out the appropriate
riot-web branch and then run:
```bash
docker build -t vectorim/riot-web:develop \
--build-arg USE_CUSTOM_SDKS=true \
--build-arg REACT_SDK_REPO="https://github.com/matrix-org/matrix-react-sdk.git" \
--build-arg REACT_SDK_BRANCH="develop" \
--build-arg JS_SDK_REPO="https://github.com/matrix-org/matrix-js-sdk.git" \
--build-arg JS_SDK_BRANCH="develop" \
.
```
Labs Features
=============

View File

@@ -12,9 +12,7 @@
"bug_report_endpoint_url": "https://riot.im/bugreports/submit",
"features": {
"feature_groups": "labs",
"feature_pinning": "labs",
"feature_reactions": "labs",
"feature_message_editing": "labs"
"feature_pinning": "labs"
},
"default_federate": true,
"default_theme": "light",

View File

@@ -1,4 +1,4 @@
# Labs features
# riot-web Labs features
Some notes on the features you can enable by going to `Settings->Labs`. Not exhaustive, chat in
[#riot-web:matrix.org] for more information.
@@ -29,17 +29,4 @@ Once enabled, send a custom state event to a room to set values:
That's it. Now should see your new counter under the header.
## Reactions
`feature_reactions` allows reacting to messages with emoji and displaying
reactions from other people. This feature is currently under active development,
and only portions have been implemented so far.
## Message editing
`feature_message_editing` allows editing messages after they have been sent,
accessible from the reaction/context bar when hovering a message.
This feature is currently under active development,
and only portions have been implemented so far.
[#riot-web:matrix.org]: https://matrix.to/#/#riot-web:matrix.org
[#riot-web:matrix.org]: https://matrix.to/#/#riot-web:matrix.org

View File

@@ -2,7 +2,7 @@
"name": "riot-web",
"productName": "Riot",
"main": "src/electron-main.js",
"version": "1.2.0",
"version": "1.0.8",
"description": "A feature-rich client for Matrix.org",
"author": "New Vector Ltd.",
"dependencies": {

View File

@@ -6,7 +6,6 @@
"integrations_ui_url": "https://scalar.vector.im/",
"integrations_rest_url": "https://scalar.vector.im/api",
"integrations_widgets_urls": [
"https://scalar-staging.vector.im/api",
"https://scalar-staging.riot.im/scalar/api",
"https://scalar.vector.im/api"
],

View File

@@ -100,7 +100,7 @@ module.exports = function (config) {
// test results reporter to use
// available reporters: https://npmjs.org/browse/keyword/karma-reporter
reporters: ['logcapture', 'spec', 'summary'],
reporters: ['logcapture', 'spec', 'junit', 'summary'],
specReporter: {
suppressErrorSummary: false, // do print error summary
@@ -159,6 +159,10 @@ module.exports = function (config) {
// how many browser should be started simultaneous
concurrency: Infinity,
junitReporter: {
outputDir: 'karma-reports',
},
webpack: webpack_config,
webpackMiddleware: {

View File

@@ -2,7 +2,7 @@
"name": "riot-web",
"productName": "Riot",
"main": "electron_app/src/electron-main.js",
"version": "1.2.0",
"version": "1.0.8",
"description": "A feature-rich client for Matrix.org",
"author": "New Vector Ltd.",
"repository": {
@@ -73,10 +73,10 @@
"gemini-scrollbar": "github:matrix-org/gemini-scrollbar#b302279",
"gfm.css": "^1.1.2",
"highlight.js": "^9.13.1",
"matrix-js-sdk": "1.2.0",
"matrix-react-sdk": "1.2.0",
"matrix-js-sdk": "1.0.4",
"matrix-react-sdk": "1.0.7",
"modernizr": "^3.6.0",
"olm": "https://packages.matrix.org/npm/olm/olm-3.1.0.tgz",
"olm": "https://packages.matrix.org/npm/olm/olm-3.1.0-pre3.tgz",
"prop-types": "^15.6.2",
"react": "^15.6.0",
"react-dom": "^15.6.0",
@@ -91,9 +91,7 @@
"babel-eslint": "^8.1.1",
"babel-loader": "^7.1.5",
"babel-plugin-add-module-exports": "^0.2.1",
"babel-plugin-syntax-dynamic-import": "^6.18.0",
"babel-plugin-transform-async-to-bluebird": "^1.1.1",
"babel-plugin-transform-builtin-extend": "^1.1.2",
"babel-plugin-transform-class-properties": "^6.24.1",
"babel-plugin-transform-object-rest-spread": "^6.26.0",
"babel-plugin-transform-runtime": "^6.23.0",
@@ -110,6 +108,7 @@
"electron-builder": "^20.38.5",
"electron-builder-squirrel-windows": "^20.38.5",
"electron-devtools-installer": "^2.2.4",
"emojione": "^2.2.7",
"eslint": "^5.8.0",
"eslint-config-google": "^0.7.1",
"eslint-plugin-babel": "^4.1.2",
@@ -123,6 +122,7 @@
"karma": "^3.1.2",
"karma-chrome-launcher": "^2.2.0",
"karma-cli": "^1.0.1",
"karma-junit-reporter": "^2.0.0",
"karma-logcapture-reporter": "0.0.1",
"karma-mocha": "^1.3.0",
"karma-sourcemap-loader": "^0.3.7",
@@ -153,7 +153,7 @@
},
"build": {
"appId": "im.riot.app",
"electronVersion": "4.2.2",
"electronVersion": "4.1.3",
"files": [
"node_modules/**",
"src/**",

View File

@@ -1 +1 @@
signing_id: releases@riot.im
signing_id: packages@riot.im

View File

@@ -57,6 +57,8 @@ const COPY_LIST = [
["res/themes/**", "webapp/themes"],
["res/vector-icons/**", "webapp/vector-icons"],
["node_modules/matrix-react-sdk/res/media/**", "webapp/media"],
["node_modules/emojione/assets/svg/*", "webapp/emojione/svg/"],
["node_modules/emojione/assets/png/*", "webapp/emojione/png/"],
["node_modules/olm/olm_legacy.js", "webapp", { directwatch: 1 }],
["./config.json", "webapp", { directwatch: 1 }],
];

View File

@@ -1,30 +0,0 @@
#!/bin/sh
set -ex
if [ $USE_CUSTOM_SDKS == false ]
then
echo "skipping react-sdk and js-sdk installs: USE_CUSTOM_SDKS is false"
exit 0
fi
echo "Linking js-sdk"
git clone $JS_SDK_REPO js-sdk
cd js-sdk
git checkout $JS_SDK_BRANCH
yarn link
yarn --network-timeout=100000 install
cd ../
echo "Linking react-sdk"
git clone $REACT_SDK_REPO react-sdk
cd react-sdk
git checkout $REACT_SDK_BRANCH
yarn link
yarn link matrix-js-sdk
yarn --network-timeout=100000 install
cd ../
echo "Setting up riot-web with react-sdk and js-sdk packages"
yarn link matrix-js-sdk
yarn link matrix-react-sdk

View File

@@ -1,11 +1,13 @@
#!/bin/bash
# Runs package.sh setting the version to git hashes of the riot-web,
# react-sdk & js-sdk checkouts, for the case where these dependencies
# are git checkouts.
set -ex
# check out corresponding branches of dependencies.
# clone the deps with depth 1: we know we will only ever need that one commit.
`dirname $0`/fetch-develop.deps.sh --depth 1
yarn install
rm dist/riot-*.tar.gz || true # rm previous artifacts without failing if it doesn't exist
# Since the deps are fetched from git, we can rev-parse

View File

@@ -23,9 +23,6 @@ cp config.sample.json webapp/
mkdir -p dist
cp -r webapp riot-$version
# Just in case you have a local config, remove it before packaging
rm riot-$version/config.json || true
# if $version looks like semver with leading v, strip it before writing to file
if [[ ${version} =~ ^v[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+(-.+)?$ ]]; then
echo ${version:1} > riot-$version/version

View File

@@ -2,8 +2,7 @@
#
# auto-deploy script for https://riot.im/develop
#
# Listens for buildkite webhook pokes (https://buildkite.com/docs/apis/webhooks)
# When it gets one, downloads the artifact from buildkite
# Listens for HTTP hits. When it gets one, downloads the artifact from jenkins
# and deploys it as the new version.
#
# Requires the following python packages:
@@ -17,10 +16,6 @@ import time
import traceback
from urlparse import urljoin
import glob
import re
import shutil
import threading
from Queue import Queue
from flask import Flask, jsonify, request, abort
@@ -28,13 +23,10 @@ from deploy import Deployer, DeployException
app = Flask(__name__)
arg_jenkins_url = None
deployer = None
arg_extract_path = None
arg_symlink = None
arg_webhook_token = None
arg_api_token = None
workQueue = Queue()
def create_symlink(source, linkname):
try:
@@ -47,117 +39,81 @@ def create_symlink(source, linkname):
else:
raise e
def req_headers():
return {
"Authorization": "Bearer %s" % (arg_api_token,),
}
# Buildkite considers a poke to have failed if it has to wait more than 10s for
# data (any data, not just the initial response) and it normally takes longer than
# that to download an artifact from buildkite. Apparently there is no way in flask
# to finish the response and then keep doing stuff, so instead this has to involve
# threading. Sigh.
def worker_thread():
while True:
toDeploy = workQueue.get()
deploy_buildkite_artifact(*toDeploy)
@app.route("/", methods=["POST"])
def on_receive_buildkite_poke():
got_webhook_token = request.headers.get('X-Buildkite-Token')
if got_webhook_token != arg_webbook_token:
print("Denying request with incorrect webhook token: %s" % (got_webhook_token,))
abort(400, "Incorrect webhook token")
return
required_api_prefix = None
if arg_buildkite_org is not None:
required_api_prefix = 'https://api.buildkite.com/v2/organizations/%s' % (arg_buildkite_org,)
def on_receive_jenkins_poke():
# {
# "name": "VectorWebDevelop",
# "build": {
# "number": 8
# }
# }
incoming_json = request.get_json()
if not incoming_json:
abort(400, "No JSON provided!")
return
print("Incoming JSON: %s" % (incoming_json,))
event = incoming_json.get("event")
if event is None:
abort(400, "No 'event' specified")
job_name = incoming_json.get("name")
if not isinstance(job_name, basestring):
abort(400, "Bad job name: %s" % (job_name,))
return
if event == 'ping':
print("Got ping request - responding")
return jsonify({'response': 'pong!'})
if event != 'build.finished':
print("Rejecting '%s' event")
abort(400, "Unrecognised event")
build_num = incoming_json.get("build", {}).get("number", 0)
if not build_num or build_num <= 0 or not isinstance(build_num, int):
abort(400, "Missing or bad build number")
return
build_obj = incoming_json.get("build")
if build_obj is None:
abort(400, "No 'build' object")
return fetch_jenkins_build(job_name, build_num)
def fetch_jenkins_build(job_name, build_num):
artifact_url = urljoin(
arg_jenkins_url, "job/%s/%s/api/json" % (job_name, build_num)
)
artifact_response = requests.get(artifact_url).json()
# {
# "actions": [],
# "artifacts": [
# {
# "displayPath": "vector-043f6991a4ed-react-20f77d1224ef-js-0a7efe3e8bd5.tar.gz",
# "fileName": "vector-043f6991a4ed-react-20f77d1224ef-js-0a7efe3e8bd5.tar.gz",
# "relativePath": "vector-043f6991a4ed-react-20f77d1224ef-js-0a7efe3e8bd5.tar.gz"
# }
# ],
# "building": false,
# "description": null,
# "displayName": "#11",
# "duration": 137976,
# "estimatedDuration": 132008,
# "executor": null,
# "fullDisplayName": "VectorWebDevelop #11",
# "id": "11",
# "keepLog": false,
# "number": 11,
# "queueId": 12254,
# "result": "SUCCESS",
# "timestamp": 1454432640079,
# "url": "http://matrix.org/jenkins/job/VectorWebDevelop/11/",
# "builtOn": "",
# "changeSet": {},
# "culprits": []
# }
if artifact_response.get("result") != "SUCCESS":
abort(404, "Not deploying. Build was not marked as SUCCESS.")
return
build_url = build_obj.get('url')
if build_url is None:
abort(400, "build has no url")
if len(artifact_response.get("artifacts", [])) != 1:
abort(404, "Not deploying. Build has an unexpected number of artifacts.")
return
if required_api_prefix is not None and not build_url.startswith(required_api_prefix):
print("Denying poke for build url with incorrect prefix: %s" % (build_url,))
abort(400, "Invalid build url")
tar_gz_path = artifact_response["artifacts"][0]["relativePath"]
if not tar_gz_path.endswith(".tar.gz"):
abort(404, "Not deploying. Artifact is not a .tar.gz file")
return
build_num = build_obj.get('number')
if build_num is None:
abort(400, "build has no number")
return
pipeline_obj = incoming_json.get("pipeline")
if pipeline_obj is None:
abort(400, "No 'pipeline' object")
return
pipeline_name = pipeline_obj.get('name')
if pipeline_name is None:
abort(400, "pipeline has no name")
return
artifacts_url = build_url + "/artifacts"
artifacts_resp = requests.get(artifacts_url, headers=req_headers())
artifacts_resp.raise_for_status()
artifacts_array = artifacts_resp.json()
artifact_to_deploy = None
for artifact in artifacts_array:
if re.match(r"dist/.*.tar.gz", artifact['path']):
artifact_to_deploy = artifact
if artifact_to_deploy is None:
print("No suitable artifacts found")
return jsonify({})
# double paranoia check: make sure the artifact is on the right org too
if required_api_prefix is not None and not artifact_to_deploy['url'].startswith(required_api_prefix):
print("Denying poke for build url with incorrect prefix: %s" % (artifact_to_deploy['url'],))
abort(400, "Refusing to deploy artifact from URL %s", artifact_to_deploy['url'])
return
# there's no point building up a queue of things to deploy, so if there are any pending jobs,
# remove them
while not workQueue.empty():
try:
workQueue.get(False)
except:
pass
workQueue.put([artifact_to_deploy, pipeline_name, build_num])
return jsonify({})
def deploy_buildkite_artifact(artifact, pipeline_name, build_num):
artifact_response = requests.get(artifact['url'], headers=req_headers())
artifact_response.raise_for_status()
artifact_obj = artifact_response.json()
tar_gz_url = urljoin(
arg_jenkins_url, "job/%s/%s/artifact/%s" % (job_name, build_num, tar_gz_path)
)
# we extract into a directory based on the build number. This avoids the
# problem of multiple builds building the same git version and thus having
@@ -166,16 +122,18 @@ def deploy_buildkite_artifact(artifact, pipeline_name, build_num):
# a good deploy with a bad one
# (b) we'll be overwriting the live deployment, which means people might
# see half-written files.
build_dir = os.path.join(arg_extract_path, "%s-#%s" % (pipeline_name, build_num))
build_dir = os.path.join(arg_extract_path, "%s-#%s" % (job_name, build_num))
try:
extracted_dir = deploy_tarball(artifact_obj, build_dir)
extracted_dir = deploy_tarball(tar_gz_url, build_dir)
except DeployException as e:
traceback.print_exc()
abort(400, e.message)
create_symlink(source=extracted_dir, linkname=arg_symlink)
def deploy_tarball(artifact, build_dir):
return jsonify({})
def deploy_tarball(tar_gz_url, build_dir):
"""Download a tarball from jenkins and unpack it
Returns:
@@ -187,25 +145,20 @@ def deploy_tarball(artifact, build_dir):
)
os.mkdir(build_dir)
print("Fetching artifact %s -> %s..." % (artifact['download_url'], artifact['filename']))
# Download the tarball here as buildkite needs auth to do this
# we don't pgp-sign buildkite artifacts, relying on HTTPS and buildkite
# not being evil. If that's not good enough for you, don't use riot.im/develop.
resp = requests.get(artifact['download_url'], stream=True, headers=req_headers())
resp.raise_for_status()
with open(artifact['filename'], 'wb') as ofp:
shutil.copyfileobj(resp.raw, ofp)
print("...download complete. Deploying...")
# we rely on the fact that flask only serves one request at a time to
# ensure that we do not overwrite a tarball from a concurrent request.
return deployer.deploy(artifact['filename'], build_dir)
return deployer.deploy(tar_gz_url, build_dir)
if __name__ == "__main__":
parser = argparse.ArgumentParser("Runs a Vector redeployment server.")
parser.add_argument(
"-j", "--jenkins", dest="jenkins", default="https://matrix.org/jenkins/", help=(
"The base URL of the Jenkins web server. This will be hit to get the\
built artifacts (the .gz file) for redeploying."
)
)
parser.add_argument(
"-p", "--port", dest="port", default=4000, type=int, help=(
"The port to listen on for requests from Jenkins."
@@ -251,33 +204,13 @@ if __name__ == "__main__":
),
)
parser.add_argument(
"--webhook-token", dest="webhook_token", help=(
"Only accept pokes with this buildkite token."
), required=True,
)
parser.add_argument(
"--api-token", dest="api_token", help=(
"API access token for buildkite. Require read_artifacts scope."
), required=True,
)
# We require a matching webhook token, but because we take everything else
# about what to deploy from the poke body, we can be a little more paranoid
# and only accept builds / artifacts from a specific buildkite org
parser.add_argument(
"--org", dest="buildkite_org", help=(
"Lock down to this buildkite org"
)
)
args = parser.parse_args()
if args.jenkins.endswith("/"): # important for urljoin
arg_jenkins_url = args.jenkins
else:
arg_jenkins_url = args.jenkins + "/"
arg_extract_path = args.extract
arg_symlink = args.symlink
arg_webbook_token = args.webhook_token
arg_api_token = args.api_token
arg_buildkite_org = args.buildkite_org
if not os.path.isdir(arg_extract_path):
os.mkdir(arg_extract_path)
@@ -289,20 +222,25 @@ if __name__ == "__main__":
for include in args.include:
deployer.symlink_paths.update({ os.path.basename(pth): pth for pth in glob.iglob(include) })
# we don't pgp-sign jenkins artifacts; instead we rely on HTTPS access to
# the jenkins server (and the jenkins server not being compromised and/or
# github not serving it compromised source). If that's not good enough for
# you, don't use riot.im/develop.
deployer.verify_signature = False
if args.tarball_uri is not None:
build_dir = os.path.join(arg_extract_path, "test-%i" % (time.time()))
deploy_tarball(args.tarball_uri, build_dir)
else:
print(
"Listening on port %s. Extracting to %s%s. Symlinking to %s. Include files: %s" %
"Listening on port %s. Extracting to %s%s. Symlinking to %s. Jenkins URL: %s. Include files: %s" %
(args.port,
arg_extract_path,
" (clean after)" if deployer.should_clean else "",
arg_symlink,
arg_jenkins_url,
deployer.symlink_paths,
)
)
fred = threading.Thread(target=worker_thread)
fred.daemon = True
fred.start()
app.run(port=args.port, debug=False)
app.run(host="0.0.0.0", port=args.port, debug=True)

View File

@@ -41,6 +41,5 @@
"Create Account": "Krei konton",
"Need help?": "Ĉu vi bezonas helpon?",
"Explore rooms": "Esplori ĉambrojn",
"Room Directory": "Ĉambra dosierujo",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Vi povas uzi proprajn servilajn elekteblojn por saluti aliajn servilojn de Matrix, donante alian hejmeservilan URL-on. Tio povigos vin uzi programon Riot kun jama konto de Matrix en alia hejmservilo."
"Room Directory": "Ĉambra dosierujo"
}

View File

@@ -37,7 +37,7 @@
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit käyttää edistyksellisiä asetuksia kirjautuaksesi muille Matrix palvelimille, määrittelemällä kotipalvelimen URL-osoitteen.<br/>Tämän avulla voit käyttää Riot:ia olemassa olevalla toisen Matrix palvelimen käyttäjätilillä.<br/><br/>Voit myös asettaa valinnaisen identiteettipalvelimen, mutta et voi kutsua käyttäjiä sähköpostiosoitteella tai tulla kutsutuksi.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Voit käyttää mukautettuja palvelinasetuksia kirjautuaksesi muihin Matrix-palvelimiin. Tämä mahdollistaa Riotin käyttämisen toisella kotipalvelimella olevalla Matrix-tilillä.",
"You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Voit myös määrittää toisen identiteettipalvelimen, mutta et voi kutsua muita käyttäjiä sähköpostin perusteella tai saada itse kutsua sähköpostin perusteella.",
"Sign In": "Kirjaudu",
"Sign In": "Kirjaudu sisään",
"Create Account": "Luo tili",
"Need help?": "Tarvitsetko apua?",
"Explore rooms": "Etsi huoneita",

View File

@@ -34,12 +34,5 @@
"Dev chat for the Riot/Web dev team": "Riot/Web izstrādātāju komandas čats",
"Dev chat for the Dendrite dev team": "Dendrite izstrādatāju komandas čats",
"Lots of rooms already exist in Matrix, linked to existing networks (Slack, IRC, Gitter etc) or independent. Check out the directory!": "Matrix-ā pastāv daudzas neatkarīgas un/vai eksistējošiem tīmekļa resursiem (Slack, IRC, Gitter u.tml.) piesaistītas istabas. Ieskaties katalogā!",
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Tu vari lietot \"custom\" servera opcijas, lai ielogotos citos Matrix serveros, norādot citu Bāzes servera URL.<br> Tas atļaus tev lietot Riot ar esošo Matrix kontu uz cita Bāzes servera.<br/><br/>Tu arī vari uzstādīt atsevišķu Identitāšu serveri, taču tad Tev nebūs iespēju uzaicināt lietotājus, izmantojot epasta adresi, vai pašam tikt uzaicinātam, izmantojot epasta adresi.",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Varat izmantot pielāgotās servera opcijas, lai pierakstītos citos Matrix serveros, norādot citu mājas servera URL. Tas ļauj jums izmantot Riot ar esošu Matrix kontu citā mājas serverī.",
"You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Varat arī iestatīt pielāgotu identitātes serveri, bet jūs nevarēsiet uzaicināt lietotājus izmantojot e-pasta adresi, kā arī tikt uzaicināts pēc e-pasta adreses.",
"Sign In": "Ienākt",
"Create Account": "Izveidot kontu",
"Need help?": "Nepieciešama palīdzība?",
"Explore rooms": "Atklāt istabas",
"Room Directory": "Istabu Katalogs"
"You can use the custom server options to sign into other Matrix servers by specifying a different Home server URL.<br/>This allows you to use Riot with an existing Matrix account on a different home server.<br/><br/>You can also set a custom identity server but you won't be able to invite users by email address, or be invited by email address yourself.": "Tu vari lietot \"custom\" servera opcijas, lai ielogotos citos Matrix serveros, norādot citu Bāzes servera URL.<br> Tas atļaus tev lietot Riot ar esošo Matrix kontu uz cita Bāzes servera.<br/><br/>Tu arī vari uzstādīt atsevišķu Identitāšu serveri, taču tad Tev nebūs iespēju uzaicināt lietotājus, izmantojot epasta adresi, vai pašam tikt uzaicinātam, izmantojot epasta adresi."
}

View File

@@ -39,6 +39,5 @@
"Create Account": "Stwórz konto",
"Sign In": "Zaloguj",
"Need help?": "Potrzebujesz pomocy?",
"Room Directory": "Katalog pokojów",
"Explore rooms": "Przeglądaj pokoje"
"Room Directory": "Katalog pokojów"
}

View File

@@ -1,21 +1 @@
{
"Riot Desktop on %(platformName)s": "Namizni Riot za %(platformName)s",
"Unknown device": "Neznana naprava",
"%(appName)s via %(browserName)s on %(osName)s": "%(appName)s s %(browserName)s na %(osName)s",
"You need to be using HTTPS to place a screen-sharing call.": "Za klic s skupno rabo zaslona potrebujete HTTPS.",
"powered by Matrix": "poganja Matrix",
"Custom Server Options": "Možnosti strežnika po meri",
"You can use the custom server options to sign into other Matrix servers by specifying a different homeserver URL. This allows you to use Riot with an existing Matrix account on a different homeserver.": "Možnosti strežnika po meri lahko uporabite za prijavo v druge Matrix strežnike, s tem da podate drug URL domačega strežnika. To vam omogoča, da uporabljate Riot z obstoječim Matrix računom na drugem strežniku.",
"You can also set a custom identity server, but you won't be able to invite users by email address, or be invited by email address yourself.": "Nastavite lahko tudi strežnik za identiteto po meri, vendar ne boste mogli povabiti uporabnikov prek e-pošte, prav tako pa vas ne bodo mogli povabiti drugi.",
"Dismiss": "Opusti",
"Welcome to Riot.im": "Dobrodošli v Riot.im",
"Decentralised, encrypted chat &amp; collaboration powered by [matrix]": "Decentralizirano šifrirano sporočanje &amp; sodelovanje s pomočjo [matrix]",
"Sign In": "Prijava",
"Create Account": "Registracija",
"Need help?": "Potrebujete pomoč?",
"Chat with Riot Bot": "Klepetajte z Riot Botom",
"Explore rooms": "Raziščite sobe",
"Room Directory": "Imenik sob",
"Search the room directory": "Preiščite imenik sob",
"Get started with some tips from Riot Bot!": "Začnite z nekaterimi nasveti Riot Bota!"
}
{}

View File

@@ -235,7 +235,7 @@ body {
</a>
<h3 class="mx_Spacer">Android</h3>
<p>If you have an Android device, install the Android Riot app from Google Play or F-droid.</p>
<a href="https://play.google.com/store/apps/details?id=im.vector.app" target="_blank" class="mx_ClearDecoration">
<a href="https://play.google.com/store/apps/details?id=im.vector.alpha" target="_blank" class="mx_ClearDecoration">
<svg width="162px" height="48px" viewBox="0 0 162 48" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 51.2 (57519) - http://www.bohemiancoding.com/sketch -->
<desc>Created with Sketch.</desc>

View File

@@ -39,7 +39,14 @@ export default class VectorBasePlatform extends BasePlatform {
constructor() {
super();
// The 'animations' are really low framerate and look terrible.
// Also it re-starts the animation every time you set the badge,
// and we set the state each time, even if the value hasn't changed,
// so we'd need to fix that if enabling the animation.
this.favicon = new Favico({animation: 'none'});
this.showUpdateCheck = false;
this._updateFavicon();
this.startUpdateCheck = this.startUpdateCheck.bind(this);
this.stopUpdateCheck = this.stopUpdateCheck.bind(this);
}
@@ -48,24 +55,6 @@ export default class VectorBasePlatform extends BasePlatform {
return 'Vector Base Platform'; // no translation required: only used for analytics
}
/**
* Delay creating the `Favico` instance until first use (on the first notification) as
* it uses canvas, which can trigger a permission prompt in Firefox's resist
* fingerprinting mode.
* See https://github.com/vector-im/riot-web/issues/9605.
*/
get favicon() {
if (this._favicon) {
return this._favicon;
}
// The 'animations' are really low framerate and look terrible.
// Also it re-starts the animation every time you set the badge,
// and we set the state each time, even if the value hasn't changed,
// so we'd need to fix that if enabling the animation.
this._favicon = new Favico({ animation: 'none' });
return this._favicon;
}
_updateFavicon() {
try {
// This needs to be in in a try block as it will throw

View File

@@ -71,7 +71,7 @@ module.exports = {
},
},
{
test: /\.(gif|png|svg|ttf|woff|woff2|xml|ico)$/,
test: /\.(gif|png|svg|ttf|xml|ico)$/,
// Use a content-based hash in the name so that we can set a long cache
// lifetime for assets while still delivering changes quickly.
oneOf: [

3053
yarn.lock

File diff suppressed because it is too large Load Diff