Compare commits
1 commit
Author | SHA1 | Date | |
---|---|---|---|
|
bfd54f2764 |
8 changed files with 21 additions and 202 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -10,4 +10,3 @@ lib
|
||||||
*.tar.gz
|
*.tar.gz
|
||||||
.eslintcache
|
.eslintcache
|
||||||
.tmp
|
.tmp
|
||||||
tmp/
|
|
||||||
|
|
|
@ -1,18 +0,0 @@
|
||||||
pipeline:
|
|
||||||
buildfrontend:
|
|
||||||
image: node:16
|
|
||||||
commands:
|
|
||||||
- yarn install --prefer-offline --frozen-lockfile
|
|
||||||
- yarn test
|
|
||||||
- yarn run lint-ci
|
|
||||||
- yarn run tsc
|
|
||||||
- yarn build
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
image: python
|
|
||||||
when:
|
|
||||||
event: push
|
|
||||||
branch: master
|
|
||||||
commands:
|
|
||||||
- make ci-deploy
|
|
||||||
secrets: [ GITEA_WRITE_DEPLOY_KEY, LIBREPAGES_DEPLOY_SECRET ]
|
|
14
Makefile
14
Makefile
|
@ -1,14 +0,0 @@
|
||||||
ci-deploy: ## Deploy from CI/CD. Only call from within CI
|
|
||||||
@if [ "${CI}" != "woodpecker" ]; \
|
|
||||||
then echo "Only call from within CI. Will re-write your local Git configuration. To override, set export CI=woodpecker"; \
|
|
||||||
exit 1; \
|
|
||||||
fi
|
|
||||||
git config --global user.email "${CI_COMMIT_AUTHOR_EMAIL}"
|
|
||||||
git config --global user.name "${CI_COMMIT_AUTHOR}"
|
|
||||||
./scripts/ci.sh --commit-files librepages target "${CI_COMMIT_AUTHOR} <${CI_COMMIT_AUTHOR_EMAIL}>"
|
|
||||||
./scripts/ci.sh --init "$$GITEA_WRITE_DEPLOY_KEY"
|
|
||||||
./scripts/ci.sh --deploy ${LIBREPAGES_DEPLOY_SECRET} librepages
|
|
||||||
./scripts/ci.sh --clean
|
|
||||||
|
|
||||||
help: ## Prints help for targets with comments
|
|
||||||
@cat $(MAKEFILE_LIST) | grep -E '^[a-zA-Z_-]+:.*?## .*$$' | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'
|
|
|
@ -1,5 +1,3 @@
|
||||||
[![status-badge](https://ci.batsense.net/api/badges/mystiq/hydrogen-web/status.svg)](https://ci.batsense.net/mystiq/hydrogen-web)
|
|
||||||
|
|
||||||
# Hydrogen
|
# Hydrogen
|
||||||
|
|
||||||
A minimal [Matrix](https://matrix.org/) chat client, focused on performance, offline functionality, and broad browser support. This is work in progress and not yet ready for primetime. Bug reports are welcome, but please don't file any feature requests or other missing things to be on par with Element Web.
|
A minimal [Matrix](https://matrix.org/) chat client, focused on performance, offline functionality, and broad browser support. This is work in progress and not yet ready for primetime. Bug reports are welcome, but please don't file any feature requests or other missing things to be on par with Element Web.
|
||||||
|
|
165
scripts/ci.sh
165
scripts/ci.sh
|
@ -1,165 +0,0 @@
|
||||||
#!/bin/bash
|
|
||||||
# ci.sh: Helper script to automate deployment operations on CI/CD
|
|
||||||
# Copyright © 2022 Aravinth Manivannan <realaravinth@batsense.net>
|
|
||||||
#
|
|
||||||
# This program is free software: you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU Affero General Public License as
|
|
||||||
# published by the Free Software Foundation, either version 3 of the
|
|
||||||
# License, or (at your option) any later version.
|
|
||||||
#
|
|
||||||
# This program is distributed in the hope that it will be useful,
|
|
||||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
# GNU Affero General Public License for more details.
|
|
||||||
#
|
|
||||||
# You should have received a copy of the GNU Affero General Public License
|
|
||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
set -xEeuo pipefail
|
|
||||||
#source $(pwd)/scripts/lib.sh
|
|
||||||
|
|
||||||
readonly SSH_ID_FILE=/tmp/ci-ssh-id
|
|
||||||
readonly SSH_REMOTE_NAME=origin-ssh
|
|
||||||
readonly PROJECT_ROOT=$(pwd)
|
|
||||||
|
|
||||||
match_arg() {
|
|
||||||
if [ $1 == $2 ] || [ $1 == $3 ]
|
|
||||||
then
|
|
||||||
return 0
|
|
||||||
else
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
help() {
|
|
||||||
cat << EOF
|
|
||||||
USAGE: ci.sh [SUBCOMMAND]
|
|
||||||
Helper script to automate deployment operations on CI/CD
|
|
||||||
|
|
||||||
Subcommands
|
|
||||||
|
|
||||||
-c --clean cleanup secrets, SSH key and other runtime data
|
|
||||||
-i --init <SSH_PRIVATE_KEY> initialize environment, write SSH private to file
|
|
||||||
-d --deploy <PAGES-SECRET> <TARGET BRANCH> push branch to Gitea and call Pages server
|
|
||||||
-h --help print this help menu
|
|
||||||
EOF
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1: SSH private key
|
|
||||||
write_ssh(){
|
|
||||||
truncate --size 0 $SSH_ID_FILE
|
|
||||||
echo "$1" > $SSH_ID_FILE
|
|
||||||
chmod 600 $SSH_ID_FILE
|
|
||||||
}
|
|
||||||
|
|
||||||
set_ssh_remote() {
|
|
||||||
http_remote_url=$(git remote get-url origin)
|
|
||||||
remote_hostname=$(echo $http_remote_url | cut -d '/' -f 3)
|
|
||||||
repository_owner=$(echo $http_remote_url | cut -d '/' -f 4)
|
|
||||||
repository_name=$(echo $http_remote_url | cut -d '/' -f 5)
|
|
||||||
ssh_remote="git@$remote_hostname:$repository_owner/$repository_name"
|
|
||||||
ssh_remote="git@git.batsense.net:mystiq/hydrogen-web.git"
|
|
||||||
git remote add $SSH_REMOTE_NAME $ssh_remote
|
|
||||||
}
|
|
||||||
|
|
||||||
clean() {
|
|
||||||
if [ -f $SSH_ID_FILE ]
|
|
||||||
then
|
|
||||||
shred $SSH_ID_FILE
|
|
||||||
rm $SSH_ID_FILE
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1: branch name
|
|
||||||
# $2: directory containing build assets
|
|
||||||
# $3: Author in <author-name author@example.com> format
|
|
||||||
commit_files() {
|
|
||||||
cd $PROJECT_ROOT
|
|
||||||
original_branch=$(git branch --show-current)
|
|
||||||
tmp_dir=$(mktemp -d)
|
|
||||||
cp -r $2/* $tmp_dir
|
|
||||||
|
|
||||||
if [[ -z $(git ls-remote --heads origin ${1}) ]]
|
|
||||||
then
|
|
||||||
echo "[*] Creating deployment branch $1"
|
|
||||||
git checkout --orphan $1
|
|
||||||
else
|
|
||||||
echo "[*] Deployment branch $1 exists, pulling changes from remote"
|
|
||||||
git fetch origin $1
|
|
||||||
git switch $1
|
|
||||||
fi
|
|
||||||
|
|
||||||
git rm -rf .
|
|
||||||
/bin/rm -rf *
|
|
||||||
cp -r $tmp_dir/* .
|
|
||||||
git add --all
|
|
||||||
if [ $(git status --porcelain | xargs | sed '/^$/d' | wc -l) -gt 0 ];
|
|
||||||
then
|
|
||||||
echo "[*] Repository has changed, committing changes"
|
|
||||||
git commit \
|
|
||||||
--author="$3" \
|
|
||||||
--message="new deploy: $(date --iso-8601=seconds)"
|
|
||||||
fi
|
|
||||||
git checkout $original_branch
|
|
||||||
}
|
|
||||||
|
|
||||||
# $1: Pages API secret
|
|
||||||
# $2: Deployment target branch
|
|
||||||
deploy() {
|
|
||||||
if (( "$#" < 2 ))
|
|
||||||
then
|
|
||||||
help
|
|
||||||
else
|
|
||||||
git -c core.sshCommand="/usr/bin/ssh -oStrictHostKeyChecking=no -i $SSH_ID_FILE"\
|
|
||||||
push --force $SSH_REMOTE_NAME $2
|
|
||||||
curl -vv --location --request \
|
|
||||||
POST "https://deploy.batsense.net/api/v1/update"\
|
|
||||||
--header 'Content-Type: application/json' \
|
|
||||||
--data-raw "{ \"secret\": \"$1\", \"branch\": \"$2\" }"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
if (( "$#" < 1 ))
|
|
||||||
then
|
|
||||||
help
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
if match_arg $1 '-i' '--init'
|
|
||||||
then
|
|
||||||
if (( "$#" < 2 ))
|
|
||||||
then
|
|
||||||
help
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
set_ssh_remote
|
|
||||||
write_ssh "$2"
|
|
||||||
elif match_arg $1 '-c' '--clean'
|
|
||||||
then
|
|
||||||
clean
|
|
||||||
elif match_arg $1 '-cf' '--commit-files'
|
|
||||||
then
|
|
||||||
if (( "$#" < 4 ))
|
|
||||||
then
|
|
||||||
help
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
commit_files $2 $3 $4
|
|
||||||
elif match_arg $1 '-d' '--deploy'
|
|
||||||
then
|
|
||||||
if (( "$#" < 3 ))
|
|
||||||
then
|
|
||||||
help
|
|
||||||
exit -1
|
|
||||||
fi
|
|
||||||
deploy $2 $3
|
|
||||||
elif match_arg $1 '-h' '--help'
|
|
||||||
then
|
|
||||||
help
|
|
||||||
else
|
|
||||||
help
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -451,6 +451,12 @@ export class Client {
|
||||||
|
|
||||||
async deleteSession(log) {
|
async deleteSession(log) {
|
||||||
if (this._sessionId) {
|
if (this._sessionId) {
|
||||||
|
await log.wrap("sessionStore", async () => {
|
||||||
|
const storage = this._storage ?? await this._platform.storageFactory.create(this._sessionId, log);
|
||||||
|
const txn = await storage.readWriteTxn([storage.storeNames.session]);
|
||||||
|
txn.session.delete();
|
||||||
|
storage.close();
|
||||||
|
});
|
||||||
// need to dispose first, so the storage is closed,
|
// need to dispose first, so the storage is closed,
|
||||||
// and also first sync finishing won't call Session.start anymore,
|
// and also first sync finishing won't call Session.start anymore,
|
||||||
// which assumes that the storage works.
|
// which assumes that the storage works.
|
||||||
|
|
|
@ -105,4 +105,17 @@ export class SessionStore {
|
||||||
}
|
}
|
||||||
this._sessionStore.delete(key);
|
this._sessionStore.delete(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
delete(): void {
|
||||||
|
const keys: string[] = [];
|
||||||
|
for (let i = 0; i < localStorage.length; i++) {
|
||||||
|
const key = this._localStorage.key(i);
|
||||||
|
if (key?.startsWith(this._localStorageKeyPrefix)) {
|
||||||
|
keys.push(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (const key of keys) {
|
||||||
|
this._localStorage.removeItem(key);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,6 +4,6 @@
|
||||||
"gatewayUrl": "https://matrix.org",
|
"gatewayUrl": "https://matrix.org",
|
||||||
"applicationServerKey": "BC-gpSdVHEXhvHSHS0AzzWrQoukv2BE7KzpoPO_FfPacqOo3l1pdqz7rSgmB04pZCWaHPz7XRe6fjLaC-WPDopM"
|
"applicationServerKey": "BC-gpSdVHEXhvHSHS0AzzWrQoukv2BE7KzpoPO_FfPacqOo3l1pdqz7rSgmB04pZCWaHPz7XRe6fjLaC-WPDopM"
|
||||||
},
|
},
|
||||||
"defaultHomeServer": "matrix.test.mystiq.app",
|
"defaultHomeServer": "matrix.org",
|
||||||
"bugReportEndpointUrl": "https://rageshake.test.mystiq.app/api/submit"
|
"bugReportEndpointUrl": "https://element.io/bugreports/submit"
|
||||||
}
|
}
|
||||||
|
|
Reference in a new issue