Compare commits
1 commit
develop
...
use-insert
Author | SHA1 | Date | |
---|---|---|---|
|
6d22032b61 |
3
.autogen/check_pr.jq
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
.[]
|
||||||
|
.head
|
||||||
|
.label
|
2
.autogen/next_url.jq
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
.links
|
||||||
|
.next
|
39
.autogen/patreon.jq
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
(
|
||||||
|
.data |
|
||||||
|
map(
|
||||||
|
select(
|
||||||
|
.relationships
|
||||||
|
.currently_entitled_tiers
|
||||||
|
.data[]
|
||||||
|
)
|
||||||
|
) |
|
||||||
|
map(
|
||||||
|
.relationships
|
||||||
|
.user
|
||||||
|
.data
|
||||||
|
.id
|
||||||
|
)
|
||||||
|
) as $data |
|
||||||
|
.included |
|
||||||
|
map(
|
||||||
|
select(
|
||||||
|
.id as $id |
|
||||||
|
$data |
|
||||||
|
contains(
|
||||||
|
[
|
||||||
|
$id
|
||||||
|
]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
) |
|
||||||
|
map(
|
||||||
|
.attributes |
|
||||||
|
[
|
||||||
|
.full_name,
|
||||||
|
.thumb_url,
|
||||||
|
.url
|
||||||
|
] |
|
||||||
|
@tsv
|
||||||
|
) |
|
||||||
|
.[] |
|
||||||
|
@text
|
87
.autogen/update_readme_patreon.sh
Executable file
|
@ -0,0 +1,87 @@
|
||||||
|
#!/usr/bin/env bash
|
||||||
|
# __MISSKEY_BEARER_TOKEN=
|
||||||
|
# __MISSKEY_CAMPAIGN_ID=
|
||||||
|
# __MISSKEY_GITHUB_TOKEN=
|
||||||
|
# __MISSKEY_HEAD=syuilo:patch-autogen
|
||||||
|
# __MISSKEY_REPO=syuilo/misskey
|
||||||
|
# __MISSKEY_BRANCH=develop
|
||||||
|
test "$(curl -LSs -w '\n' -- "https://api.github.com/repos/$REPO/pulls?access_token=$__MISSKEY_GITHUB_TOKEN" | jq -r -f check_pr.jq | grep $__MISSKEY_HEAD)" && exit 1
|
||||||
|
cd "$(dirname $0)/.." && \
|
||||||
|
touch null.cache && \
|
||||||
|
rm *.cache && \
|
||||||
|
git checkout $__MISSKEY_BRANCH && \
|
||||||
|
git pull origin $__MISSKEY_BRANCH && \
|
||||||
|
git pull upstream $__MISSKEY_BRANCH && \
|
||||||
|
git stash && \
|
||||||
|
git rebase -f upstream/$__MISSKEY_BRANCH && \
|
||||||
|
git branch patch-autogen && \
|
||||||
|
git checkout patch-autogen && \
|
||||||
|
git reset --hard HEAD || \
|
||||||
|
exit 1
|
||||||
|
touch patreon.md.cache && \
|
||||||
|
rm patreon.md.cache && \
|
||||||
|
echo '<!-- PATREON_START -->' > patreon.md.cache && \
|
||||||
|
url="https://www.patreon.com/api/oauth2/v2/campaigns/$__MISSKEY_CAMPAIGN_ID/members?include=currently_entitled_tiers,user&fields%5Btier%5D=title&fields%5Buser%5D=full_name,thumb_url,url,hide_pledges"
|
||||||
|
while :
|
||||||
|
do
|
||||||
|
touch patreon.raw.cache && \
|
||||||
|
rm patreon.raw.cache && \
|
||||||
|
curl -LSs -w '\n' -H "Authorization: Bearer $__MISSKEY_BEARER_TOKEN" -- $url > patreon.raw.cache && \
|
||||||
|
touch patreon.cache && \
|
||||||
|
rm patreon.cache && \
|
||||||
|
cat patreon.raw.cache | \
|
||||||
|
jq -r -f patreon.jq >> patreon.cache && \
|
||||||
|
echo '<table><tr>' >> patreon.md.cache && \
|
||||||
|
cat patreon.cache | \
|
||||||
|
awk -F'\t' '{print $2,$1}' | \
|
||||||
|
sed -e 's/ /\\" alt=\\"/' | \
|
||||||
|
xargs -I% echo '<td><img src="%" width="100"></td>' >> patreon.md.cache && \
|
||||||
|
echo '</tr><tr>' >> patreon.md.cache && \
|
||||||
|
cat patreon.cache | \
|
||||||
|
awk -F'\t' '{print $3,$1}' | \
|
||||||
|
sed -e 's/ /\\">/' | \
|
||||||
|
xargs -I% echo '<td><a href="%</a></td>' >> patreon.md.cache && \
|
||||||
|
echo '</tr></table>' >> patreon.md.cache || \
|
||||||
|
exit 1
|
||||||
|
new_url="$(cat patreon.raw.cache | jq -r -f next_url.jq)"
|
||||||
|
test "$new_url" = 'null' && \
|
||||||
|
break || \
|
||||||
|
URL="$url"
|
||||||
|
done
|
||||||
|
ignore= && \
|
||||||
|
echo -e "\n**Last updated:** $(date -uR | sed 's/\+0000/UTC/')\n<!-- PATREON_END -->" >> patreon.md.cache && \
|
||||||
|
touch README.md && \
|
||||||
|
touch .autogen/README.md && \
|
||||||
|
rm .autogen/README.md && \
|
||||||
|
mv README.md .autogen/README.md && \
|
||||||
|
cat .autogen/README.md | while IFS= read line;
|
||||||
|
do
|
||||||
|
if [[ -z "$ignore" ]]
|
||||||
|
then
|
||||||
|
if [[ "$line" = '<!-- PATREON_START -->' ]]
|
||||||
|
then
|
||||||
|
ignore='PATREON_INSIDE'
|
||||||
|
else
|
||||||
|
echo "$line" >> README.md
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
if [[ "$LINE" = '<!-- PATREON_END -->' ]]
|
||||||
|
then
|
||||||
|
ignore=
|
||||||
|
cat patreon.md.cache >> README.md
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
cat patreon.md.cache
|
||||||
|
touch null.cache && \
|
||||||
|
rm *.cache && \
|
||||||
|
diff .autogen/README.md README.md > diff.cache
|
||||||
|
cat diff.cache && \
|
||||||
|
test 4 -lt $(cat diff.cache | wc -l) && \
|
||||||
|
git add README.md && \
|
||||||
|
git commit -m 'Update README.md [AUTOGEN]' && \
|
||||||
|
git push -f origin patch-autogen && \
|
||||||
|
curl -LSs -w '\n' -X POST -d '{"title":"[AUTOMATED] Update README.md","body":"*This pull request was created by a tool.*","head":"'$__MISSKEY_HEAD'","base":"'$__MISSKEY_BRANCH'"}' -- "https://api.github.com/repos/$__MISSKEY_REPO/pulls?access_token=$__MISSKEY_GITHUB_TOKEN"
|
||||||
|
git stash
|
||||||
|
git checkout $__MISSKEY_BRANCH
|
||||||
|
git branch -D patch-autogen
|
13
.babelrc
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
{
|
||||||
|
"plugins": [
|
||||||
|
[
|
||||||
|
"@babel/plugin-transform-runtime",
|
||||||
|
{
|
||||||
|
"corejs": {
|
||||||
|
"version": 3,
|
||||||
|
"proposals": true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
]
|
||||||
|
}
|
48
.circleci/config.yml
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
version: 2.1
|
||||||
|
|
||||||
|
executors:
|
||||||
|
docker:
|
||||||
|
working_directory: /tmp/workspace
|
||||||
|
docker:
|
||||||
|
- image: docker:latest
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
docker:
|
||||||
|
parameters:
|
||||||
|
with_deploy:
|
||||||
|
type: boolean
|
||||||
|
default: false
|
||||||
|
executor: docker
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- setup_remote_docker
|
||||||
|
- run:
|
||||||
|
name: Build
|
||||||
|
command: |
|
||||||
|
docker build -t misskey/misskey .
|
||||||
|
- when:
|
||||||
|
condition: <<parameters.with_deploy>>
|
||||||
|
steps:
|
||||||
|
- run:
|
||||||
|
name: Deploy
|
||||||
|
command: |
|
||||||
|
if [ "$DOCKERHUB_USERNAME$DOCKERHUB_PASSWORD" ]
|
||||||
|
then
|
||||||
|
apk update && apk add jq
|
||||||
|
docker tag misskey/misskey misskey/misskey:$(cat package.json | jq -r .version)
|
||||||
|
docker login -u $DOCKERHUB_USERNAME -p $DOCKERHUB_PASSWORD
|
||||||
|
docker push misskey/misskey
|
||||||
|
else
|
||||||
|
echo -e '\033[0;33mAborted deploying to Docker Hub\033[0;39m'
|
||||||
|
fi
|
||||||
|
|
||||||
|
workflows:
|
||||||
|
version: 2
|
||||||
|
docker:
|
||||||
|
jobs:
|
||||||
|
- docker:
|
||||||
|
name: auto-build
|
||||||
|
with_deploy: true
|
||||||
|
filters:
|
||||||
|
branches:
|
||||||
|
only: master
|
12
.circleci/misskey/default.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
url: 'http://misskey.local'
|
||||||
|
port: 8080
|
||||||
|
db:
|
||||||
|
host: localhost
|
||||||
|
port: 5432
|
||||||
|
db: test-misskey
|
||||||
|
user: postgres
|
||||||
|
pass: ''
|
||||||
|
redis:
|
||||||
|
host: localhost
|
||||||
|
port: 6379
|
||||||
|
id: aid
|
12
.circleci/misskey/test.yml
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
url: 'http://misskey.local'
|
||||||
|
port: 8080
|
||||||
|
db:
|
||||||
|
host: localhost
|
||||||
|
port: 5432
|
||||||
|
db: test-misskey
|
||||||
|
user: postgres
|
||||||
|
pass: ''
|
||||||
|
redis:
|
||||||
|
host: localhost
|
||||||
|
port: 6379
|
||||||
|
id: aid
|
|
@ -15,7 +15,10 @@ url: https://example.tld/
|
||||||
#───┘ Port and TLS settings └───────────────────────────────────
|
#───┘ Port and TLS settings └───────────────────────────────────
|
||||||
|
|
||||||
#
|
#
|
||||||
# Misskey requires a reverse proxy to support HTTPS connections.
|
# Misskey supports two deployment options for public.
|
||||||
|
#
|
||||||
|
|
||||||
|
# Option 1: With Reverse Proxy
|
||||||
#
|
#
|
||||||
# +----- https://example.tld/ ------------+
|
# +----- https://example.tld/ ------------+
|
||||||
# +------+ |+-------------+ +----------------+|
|
# +------+ |+-------------+ +----------------+|
|
||||||
|
@ -23,12 +26,30 @@ url: https://example.tld/
|
||||||
# +------+ |+-------------+ +----------------+|
|
# +------+ |+-------------+ +----------------+|
|
||||||
# +---------------------------------------+
|
# +---------------------------------------+
|
||||||
#
|
#
|
||||||
# You need to set up a reverse proxy. (e.g. nginx)
|
# You need to setup reverse proxy. (eg. nginx)
|
||||||
# An encrypted connection with HTTPS is highly recommended
|
# You do not define 'https' section.
|
||||||
# because tokens may be transferred in GET requests.
|
|
||||||
|
|
||||||
# The port that your Misskey server should listen on.
|
# Option 2: Standalone
|
||||||
port: 3000
|
#
|
||||||
|
# +- https://example.tld/ -+
|
||||||
|
# +------+ | +---------------+ |
|
||||||
|
# | User | ---> | | Misskey (443) | |
|
||||||
|
# +------+ | +---------------+ |
|
||||||
|
# +------------------------+
|
||||||
|
#
|
||||||
|
# You need to run Misskey as root.
|
||||||
|
# You need to set Certificate in 'https' section.
|
||||||
|
|
||||||
|
# To use option 1, uncomment below line.
|
||||||
|
#port: 3000 # A port that your Misskey server should listen.
|
||||||
|
|
||||||
|
# To use option 2, uncomment below lines.
|
||||||
|
#port: 443
|
||||||
|
|
||||||
|
#https:
|
||||||
|
# # path for certification
|
||||||
|
# key: /etc/letsencrypt/live/example.tld/privkey.pem
|
||||||
|
# cert: /etc/letsencrypt/live/example.tld/fullchain.pem
|
||||||
|
|
||||||
# ┌──────────────────────────┐
|
# ┌──────────────────────────┐
|
||||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
#───┘ PostgreSQL configuration └────────────────────────────────
|
||||||
|
@ -57,7 +78,6 @@ db:
|
||||||
redis:
|
redis:
|
||||||
host: localhost
|
host: localhost
|
||||||
port: 6379
|
port: 6379
|
||||||
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
|
|
||||||
#pass: example-pass
|
#pass: example-pass
|
||||||
#prefix: example-prefix
|
#prefix: example-prefix
|
||||||
#db: 1
|
#db: 1
|
||||||
|
@ -134,16 +154,3 @@ id: 'aid'
|
||||||
|
|
||||||
# Media Proxy
|
# Media Proxy
|
||||||
#mediaProxy: https://example.com/proxy
|
#mediaProxy: https://example.com/proxy
|
||||||
|
|
||||||
# Proxy remote files (default: false)
|
|
||||||
#proxyRemoteFiles: true
|
|
||||||
|
|
||||||
# Sign to ActivityPub GET request (default: false)
|
|
||||||
#signToActivityPubGet: true
|
|
||||||
|
|
||||||
#allowedPrivateNetworks: [
|
|
||||||
# '127.0.0.1/32'
|
|
||||||
#]
|
|
||||||
|
|
||||||
# Upload or download file size limits (bytes)
|
|
||||||
#maxFileSize: 262144000
|
|
||||||
|
|
|
@ -1,8 +1,8 @@
|
||||||
.autogen
|
.autogen
|
||||||
|
.git
|
||||||
.github
|
.github
|
||||||
.travis
|
.travis
|
||||||
.vscode
|
.vscode
|
||||||
.config
|
|
||||||
Dockerfile
|
Dockerfile
|
||||||
build/
|
build/
|
||||||
built/
|
built/
|
||||||
|
@ -12,4 +12,3 @@ elasticsearch/
|
||||||
node_modules/
|
node_modules/
|
||||||
redis/
|
redis/
|
||||||
files/
|
files/
|
||||||
misskey-assets/
|
|
||||||
|
|
31
.eslintrc
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
{
|
||||||
|
"parserOptions": {
|
||||||
|
"parser": "@typescript-eslint/parser"
|
||||||
|
},
|
||||||
|
"extends": [
|
||||||
|
"eslint:recommended",
|
||||||
|
"plugin:vue/recommended"
|
||||||
|
],
|
||||||
|
"rules": {
|
||||||
|
"vue/require-v-for-key": 0,
|
||||||
|
"vue/max-attributes-per-line": 0,
|
||||||
|
"vue/html-indent": 0,
|
||||||
|
"vue/html-self-closing": 0,
|
||||||
|
"vue/no-unused-vars": 0,
|
||||||
|
"vue/attributes-order": 0,
|
||||||
|
"vue/require-prop-types": 0,
|
||||||
|
"vue/require-default-prop": 0,
|
||||||
|
"vue/html-closing-bracket-spacing": 0,
|
||||||
|
"vue/singleline-html-element-content-newline": 0,
|
||||||
|
"vue/no-v-html": 0,
|
||||||
|
"no-console": 0,
|
||||||
|
"no-unused-vars": 0,
|
||||||
|
"no-empty": 0
|
||||||
|
},
|
||||||
|
"globals": {
|
||||||
|
"ENV": true,
|
||||||
|
"VERSION": true,
|
||||||
|
"API": true,
|
||||||
|
"LANGS": true
|
||||||
|
}
|
||||||
|
}
|
38
.github/CODEOWNERS
vendored
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# PATH OWNERS
|
||||||
|
/.autogen/ @acid-chicken
|
||||||
|
/.circleci/ @syuilo @acid-chicken
|
||||||
|
/.config/ @syuilo @AyaMorisawa @mei23 @acid-chicken @rinsuki
|
||||||
|
# /.config/mongo_initdb_example.js @khws4v1
|
||||||
|
/.github/ @syuilo @AyaMorisawa @acid-chicken
|
||||||
|
/.vscode/ @acid-chicken
|
||||||
|
/assets/ @syuilo # @tamaina
|
||||||
|
/docs/ @syuilo
|
||||||
|
/docs/*.en.md @AyaMorisawa # @skid9000
|
||||||
|
# /docs/*.fr.md @BoFFire
|
||||||
|
# /docs/docker.*.md @khws4v1
|
||||||
|
/locales/ @syuilo
|
||||||
|
/src/ @syuilo @AyaMorisawa @mei23 @acid-chicken @rinsuki
|
||||||
|
# /src/crypto_key.cc @akihikodaki
|
||||||
|
# /src/crypto_key.d.ts @akihikodaki
|
||||||
|
/.dockerignore @syuilo # @khws4v1
|
||||||
|
/.editorconfig @syuilo @AyaMorisawa
|
||||||
|
/.eslintrc @syuilo
|
||||||
|
/.gitattributes @syuilo
|
||||||
|
/.gitignore @syuilo
|
||||||
|
/.npmrc @syuilo
|
||||||
|
/.vsls.json @AyaMorisawa
|
||||||
|
/CHANGELOG.md @syuilo
|
||||||
|
/CODE_OF_CONDUCT.md @syuilo
|
||||||
|
/CONTRIBUTING.md @syuilo
|
||||||
|
/Dockerfile @syuilo @AyaMorisawa @acid-chicken # @khws4v1
|
||||||
|
/LICENSE @syuilo
|
||||||
|
/README.md @syuilo @AyaMorisawa @acid-chicken # @nikhiljha
|
||||||
|
# /binding.gyp @akihikodaki
|
||||||
|
/crowdin.yml @syuilo
|
||||||
|
# /docker-compose.yml @khws4v1
|
||||||
|
/gulpfile.ts @syuilo @AyaMorisawa
|
||||||
|
/jsconfig.json @syuilo @AyaMorisawa
|
||||||
|
/package.json @syuilo @AyaMorisawa
|
||||||
|
/tsconfig.json @syuilo @AyaMorisawa
|
||||||
|
/tslint.json @syuilo @AyaMorisawa
|
||||||
|
/webpack.config.ts @syuilo @AyaMorisawa
|
18
.github/ISSUE_TEMPLATE/01_bug-report.md
vendored
|
@ -7,25 +7,17 @@ assignees: ''
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<!--
|
|
||||||
Thanks for reporting!
|
|
||||||
First, in order to avoid duplicate Issues, please search to see if the problem you found has already been reported.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## 💡 Summary
|
## 💡 Summary
|
||||||
|
|
||||||
<!-- Tell us what the bug is -->
|
<!-- Tell us what the bug is -->
|
||||||
|
|
||||||
## 🥰 Expected Behavior
|
## 🙂 Expected Behavior
|
||||||
|
|
||||||
<!--- Tell us what should happen -->
|
<!--- Tell us what should happen -->
|
||||||
|
|
||||||
## 🤬 Actual Behavior
|
## ☹️ Actual Behavior
|
||||||
|
|
||||||
<!--
|
<!--- Tell us what happens instead of the expected behavior -->
|
||||||
Tell us what happens instead of the expected behavior.
|
|
||||||
Please include errors from the developer console and/or server log files if you have access to them.
|
|
||||||
-->
|
|
||||||
|
|
||||||
## 📝 Steps to Reproduce
|
## 📝 Steps to Reproduce
|
||||||
|
|
||||||
|
@ -36,7 +28,3 @@ Please include errors from the developer console and/or server log files if you
|
||||||
## 📌 Environment
|
## 📌 Environment
|
||||||
|
|
||||||
<!-- Tell us where on the platform it happens -->
|
<!-- Tell us where on the platform it happens -->
|
||||||
|
|
||||||
Misskey version:
|
|
||||||
Your OS:
|
|
||||||
Your browser:
|
|
||||||
|
|
7
.github/ISSUE_TEMPLATE/config.yml
vendored
|
@ -1,7 +0,0 @@
|
||||||
contact_links:
|
|
||||||
- name: 👪 Misskey Forum
|
|
||||||
url: https://forum.misskey.io/
|
|
||||||
about: Ask questions and share knowledge
|
|
||||||
- name: 💬 Misskey official Discord
|
|
||||||
url: https://discord.gg/Wp8gVStHW3
|
|
||||||
about: Chat freely about Misskey
|
|
28
.github/PULL_REQUEST_TEMPLATE.md
vendored
|
@ -1,17 +1,13 @@
|
||||||
<!-- ℹ お読みください / README
|
## Summary
|
||||||
PRありがとうございます! PRを作成する前に、コントリビューションガイドをご確認ください:
|
|
||||||
Thank you for your PR! Before creating a PR, please check the contribution guide:
|
|
||||||
https://github.com/misskey-dev/misskey/blob/develop/CONTRIBUTING.md
|
|
||||||
-->
|
|
||||||
|
|
||||||
# What
|
<!--
|
||||||
<!-- このPRで何をしたのか? どう変わるのか? -->
|
-
|
||||||
<!-- What did you do with this PR? How will it change things? -->
|
- * Please describe your changes here *
|
||||||
|
-
|
||||||
# Why
|
- If you are going to resolve some issue, please add this context.
|
||||||
<!-- なぜそうするのか? どういう意図なのか? 何が困っているのか? -->
|
- Resolve #ISSUE_NUMBER
|
||||||
<!-- Why do you do it? What are your intentions? What is the problem? -->
|
-
|
||||||
|
- If you are going to fix some bug issue, please add this context.
|
||||||
# Additional info (optional)
|
- Fix #ISSUE_NUMBER
|
||||||
<!-- テスト観点など -->
|
-
|
||||||
<!-- Test perspective, etc -->
|
-->
|
||||||
|
|
22
.github/dependabot.yml
vendored
|
@ -1,22 +0,0 @@
|
||||||
# To get started with Dependabot version updates, you'll need to specify which
|
|
||||||
# package ecosystems to update and where the package manifests are located.
|
|
||||||
# Please see the documentation for all configuration options:
|
|
||||||
# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates
|
|
||||||
|
|
||||||
version: 2
|
|
||||||
updates:
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directory: "/"
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
open-pull-requests-limit: 0
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directory: "/packages/backend"
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
open-pull-requests-limit: 0
|
|
||||||
- package-ecosystem: npm
|
|
||||||
directory: "/packages/client"
|
|
||||||
schedule:
|
|
||||||
interval: daily
|
|
||||||
open-pull-requests-limit: 0
|
|
12
.github/labeler.yml
vendored
|
@ -1,12 +0,0 @@
|
||||||
'⚙️Server':
|
|
||||||
- packages/backend/**/*
|
|
||||||
|
|
||||||
'🖥️Client':
|
|
||||||
- packages/client/**/*
|
|
||||||
|
|
||||||
'🧪Test':
|
|
||||||
- cypress/**/*
|
|
||||||
- packages/backend/test/**/*
|
|
||||||
|
|
||||||
'‼️ wrong locales':
|
|
||||||
- any: ['locales/*.yml', '!locales/ja-JP.yml']
|
|
15
.github/misskey/test.yml
vendored
|
@ -1,15 +0,0 @@
|
||||||
url: 'http://misskey.local'
|
|
||||||
|
|
||||||
# ローカルでテストするときにポートを被らないようにするためデフォルトのものとは変える(以下同じ)
|
|
||||||
port: 61812
|
|
||||||
|
|
||||||
db:
|
|
||||||
host: localhost
|
|
||||||
port: 54312
|
|
||||||
db: test-misskey
|
|
||||||
user: postgres
|
|
||||||
pass: ''
|
|
||||||
redis:
|
|
||||||
host: localhost
|
|
||||||
port: 56312
|
|
||||||
id: aid
|
|
33
.github/workflows/docker-develop.yml
vendored
|
@ -1,33 +0,0 @@
|
||||||
name: Publish Docker image (develop)
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- develop
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
push_to_registry:
|
|
||||||
name: Push Docker image to Docker Hub
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- name: Check out the repo
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
- name: Docker meta
|
|
||||||
id: meta
|
|
||||||
uses: docker/metadata-action@v3
|
|
||||||
with:
|
|
||||||
images: misskey/misskey
|
|
||||||
- name: Log in to Docker Hub
|
|
||||||
uses: docker/login-action@v1
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
- name: Build and Push to Docker Hub
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
push: true
|
|
||||||
tags: misskey/misskey:develop
|
|
||||||
labels: develop
|
|
38
.github/workflows/docker.yml
vendored
|
@ -1,32 +1,18 @@
|
||||||
name: Publish Docker image
|
name: Docker build
|
||||||
|
|
||||||
on:
|
on:
|
||||||
release:
|
push:
|
||||||
types: [published]
|
branches:
|
||||||
workflow_dispatch:
|
- master
|
||||||
|
- develop
|
||||||
|
pull_request:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
push_to_registry:
|
build:
|
||||||
name: Push Docker image to Docker Hub
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Check out the repo
|
- uses: actions/checkout@v2
|
||||||
uses: actions/checkout@v2
|
- name: Pull previous build result (for cache)
|
||||||
- name: Docker meta
|
run: docker pull misskey/misskey:latest
|
||||||
id: meta
|
- name: Build docker container
|
||||||
uses: docker/metadata-action@v3
|
run: docker build --cache-from misskey/misskey:latest -t misskey/misskey .
|
||||||
with:
|
|
||||||
images: misskey/misskey
|
|
||||||
- name: Log in to Docker Hub
|
|
||||||
uses: docker/login-action@v1
|
|
||||||
with:
|
|
||||||
username: ${{ secrets.DOCKER_USERNAME }}
|
|
||||||
password: ${{ secrets.DOCKER_PASSWORD }}
|
|
||||||
- name: Build and Push to Docker Hub
|
|
||||||
uses: docker/build-push-action@v2
|
|
||||||
with:
|
|
||||||
context: .
|
|
||||||
push: true
|
|
||||||
tags: ${{ steps.meta.outputs.tags }}
|
|
||||||
labels: ${{ steps.meta.outputs.labels }}
|
|
||||||
|
|
16
.github/workflows/labeler.yml
vendored
|
@ -1,16 +0,0 @@
|
||||||
name: "Pull Request Labeler"
|
|
||||||
on:
|
|
||||||
pull_request_target:
|
|
||||||
branches-ignore:
|
|
||||||
- 'l10n_develop'
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
triage:
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: write
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/labeler@v4
|
|
||||||
with:
|
|
||||||
repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
|
39
.github/workflows/lint.yml
vendored
|
@ -1,39 +0,0 @@
|
||||||
name: Lint
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
backend:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 18.x
|
|
||||||
cache: 'yarn'
|
|
||||||
cache-dependency-path: |
|
|
||||||
packages/backend/yarn.lock
|
|
||||||
- run: yarn install
|
|
||||||
- run: yarn --cwd ./packages/backend lint
|
|
||||||
|
|
||||||
client:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: 18.x
|
|
||||||
cache: 'yarn'
|
|
||||||
cache-dependency-path: |
|
|
||||||
packages/client/yarn.lock
|
|
||||||
- run: yarn install
|
|
||||||
- run: yarn --cwd ./packages/client lint
|
|
53
.github/workflows/nodejs.yml
vendored
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
name: Node.js CI
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build_and_test:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
matrix:
|
||||||
|
node-version: [12.x, 14.x]
|
||||||
|
|
||||||
|
services:
|
||||||
|
postgres:
|
||||||
|
image: postgres:10-alpine
|
||||||
|
ports:
|
||||||
|
- 5432:5432
|
||||||
|
env:
|
||||||
|
POSTGRES_DB: test-misskey
|
||||||
|
POSTGRES_HOST_AUTH_METHOD: trust
|
||||||
|
redis:
|
||||||
|
image: redis:alpine
|
||||||
|
ports:
|
||||||
|
- 6379:6379
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- name: Use Node.js ${{ matrix.node-version }}
|
||||||
|
uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: ${{ matrix.node-version }}
|
||||||
|
- name: Install dependencies
|
||||||
|
run: yarn install
|
||||||
|
- name: Copy Configure
|
||||||
|
run: cp .circleci/misskey/*.yml .config
|
||||||
|
- name: Build
|
||||||
|
run: yarn build
|
||||||
|
- name: Test
|
||||||
|
run: yarn test
|
||||||
|
|
||||||
|
lint:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/setup-node@v1
|
||||||
|
with:
|
||||||
|
node-version: 12.x
|
||||||
|
- run: yarn install
|
||||||
|
- run: yarn lint
|
36
.github/workflows/ok-to-test.yml
vendored
|
@ -1,36 +0,0 @@
|
||||||
# If someone with write access comments "/ok-to-test" on a pull request, emit a repository_dispatch event
|
|
||||||
name: Ok To Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
issue_comment:
|
|
||||||
types: [created]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
ok-to-test:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
# Only run for PRs, not issue comments
|
|
||||||
if: ${{ github.event.issue.pull_request }}
|
|
||||||
steps:
|
|
||||||
# Generate a GitHub App installation access token from an App ID and private key
|
|
||||||
# To create a new GitHub App:
|
|
||||||
# https://developer.github.com/apps/building-github-apps/creating-a-github-app/
|
|
||||||
# See app.yml for an example app manifest
|
|
||||||
- name: Generate token
|
|
||||||
id: generate_token
|
|
||||||
uses: tibdex/github-app-token@v1
|
|
||||||
with:
|
|
||||||
app_id: ${{ secrets.DEPLOYBOT_APP_ID }}
|
|
||||||
private_key: ${{ secrets.DEPLOYBOT_PRIVATE_KEY }}
|
|
||||||
|
|
||||||
- name: Slash Command Dispatch
|
|
||||||
uses: peter-evans/slash-command-dispatch@v1
|
|
||||||
env:
|
|
||||||
TOKEN: ${{ steps.generate_token.outputs.token }}
|
|
||||||
with:
|
|
||||||
token: ${{ env.TOKEN }} # GitHub App installation access token
|
|
||||||
# token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} # PAT or OAuth token will also work
|
|
||||||
reaction-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
issue-type: pull-request
|
|
||||||
commands: deploy
|
|
||||||
named-args: true
|
|
||||||
permission: write
|
|
95
.github/workflows/pr-preview-deploy.yml
vendored
|
@ -1,95 +0,0 @@
|
||||||
# Run secret-dependent integration tests only after /deploy approval
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types: [opened, reopened, synchronize]
|
|
||||||
repository_dispatch:
|
|
||||||
types: [deploy-command]
|
|
||||||
|
|
||||||
name: Deploy preview environment
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
# Repo owner has commented /deploy on a (fork-based) pull request
|
|
||||||
deploy-preview-environment:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if:
|
|
||||||
github.event_name == 'repository_dispatch' &&
|
|
||||||
github.event.client_payload.slash_command.sha != '' &&
|
|
||||||
contains(github.event.client_payload.pull_request.head.sha, github.event.client_payload.slash_command.sha)
|
|
||||||
steps:
|
|
||||||
- uses: actions/github-script@v5
|
|
||||||
id: check-id
|
|
||||||
env:
|
|
||||||
number: ${{ github.event.client_payload.pull_request.number }}
|
|
||||||
job: ${{ github.job }}
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
result-encoding: string
|
|
||||||
script: |
|
|
||||||
const { data: pull } = await github.rest.pulls.get({
|
|
||||||
...context.repo,
|
|
||||||
pull_number: process.env.number
|
|
||||||
});
|
|
||||||
const ref = pull.head.sha;
|
|
||||||
|
|
||||||
const { data: checks } = await github.rest.checks.listForRef({
|
|
||||||
...context.repo,
|
|
||||||
ref
|
|
||||||
});
|
|
||||||
|
|
||||||
const check = checks.check_runs.filter(c => c.name === process.env.job);
|
|
||||||
|
|
||||||
return check[0].id;
|
|
||||||
|
|
||||||
- uses: actions/github-script@v5
|
|
||||||
env:
|
|
||||||
check_id: ${{ steps.check-id.outputs.result }}
|
|
||||||
details_url: ${{ github.server_url }}/${{ github.repository }}/runs/${{ github.run_id }}
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
await github.rest.checks.update({
|
|
||||||
...context.repo,
|
|
||||||
check_run_id: process.env.check_id,
|
|
||||||
status: 'in_progress',
|
|
||||||
details_url: process.env.details_url
|
|
||||||
});
|
|
||||||
|
|
||||||
# Check out merge commit
|
|
||||||
- name: Fork based /deploy checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
ref: 'refs/pull/${{ github.event.client_payload.pull_request.number }}/merge'
|
|
||||||
|
|
||||||
# <insert integration tests needing secrets>
|
|
||||||
- name: Context
|
|
||||||
uses: okteto/context@latest
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.OKTETO_TOKEN }}
|
|
||||||
|
|
||||||
- name: Deploy preview environment
|
|
||||||
uses: ikuradon/deploy-preview@latest
|
|
||||||
env:
|
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
with:
|
|
||||||
name: pr-${{ github.event.client_payload.pull_request.number }}-syuilo
|
|
||||||
timeout: 15m
|
|
||||||
|
|
||||||
# Update check run called "integration-fork"
|
|
||||||
- uses: actions/github-script@v5
|
|
||||||
id: update-check-run
|
|
||||||
if: ${{ always() }}
|
|
||||||
env:
|
|
||||||
# Conveniently, job.status maps to https://developer.github.com/v3/checks/runs/#update-a-check-run
|
|
||||||
conclusion: ${{ job.status }}
|
|
||||||
check_id: ${{ steps.check-id.outputs.result }}
|
|
||||||
with:
|
|
||||||
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
script: |
|
|
||||||
const { data: result } = await github.rest.checks.update({
|
|
||||||
...context.repo,
|
|
||||||
check_run_id: process.env.check_id,
|
|
||||||
status: 'completed',
|
|
||||||
conclusion: process.env.conclusion
|
|
||||||
});
|
|
||||||
|
|
||||||
return result;
|
|
21
.github/workflows/pr-preview-destroy.yml
vendored
|
@ -1,21 +0,0 @@
|
||||||
# file: .github/workflows/preview-closed.yaml
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
types:
|
|
||||||
- closed
|
|
||||||
|
|
||||||
name: Destroy preview environment
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
destroy-preview-environment:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Context
|
|
||||||
uses: okteto/context@latest
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.OKTETO_TOKEN }}
|
|
||||||
|
|
||||||
- name: Destroy preview environment
|
|
||||||
uses: okteto/destroy-preview@latest
|
|
||||||
with:
|
|
||||||
name: pr-${{ github.event.number }}-syuilo
|
|
122
.github/workflows/test.yml
vendored
|
@ -1,122 +0,0 @@
|
||||||
name: Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- master
|
|
||||||
- develop
|
|
||||||
pull_request:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
mocha:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
matrix:
|
|
||||||
node-version: [18.x]
|
|
||||||
|
|
||||||
services:
|
|
||||||
postgres:
|
|
||||||
image: postgres:13
|
|
||||||
ports:
|
|
||||||
- 54312:5432
|
|
||||||
env:
|
|
||||||
POSTGRES_DB: test-misskey
|
|
||||||
POSTGRES_HOST_AUTH_METHOD: trust
|
|
||||||
redis:
|
|
||||||
image: redis:6
|
|
||||||
ports:
|
|
||||||
- 56312:6379
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'yarn'
|
|
||||||
cache-dependency-path: |
|
|
||||||
packages/backend/yarn.lock
|
|
||||||
packages/client/yarn.lock
|
|
||||||
- name: Install dependencies
|
|
||||||
run: yarn install
|
|
||||||
- name: Check yarn.lock
|
|
||||||
run: git diff --exit-code yarn.lock
|
|
||||||
- name: Copy Configure
|
|
||||||
run: cp .github/misskey/test.yml .config
|
|
||||||
- name: Build
|
|
||||||
run: yarn build
|
|
||||||
- name: Test
|
|
||||||
run: yarn mocha
|
|
||||||
|
|
||||||
e2e:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
node-version: [18.x]
|
|
||||||
browser: [chrome]
|
|
||||||
|
|
||||||
services:
|
|
||||||
postgres:
|
|
||||||
image: postgres:13
|
|
||||||
ports:
|
|
||||||
- 54312:5432
|
|
||||||
env:
|
|
||||||
POSTGRES_DB: test-misskey
|
|
||||||
POSTGRES_HOST_AUTH_METHOD: trust
|
|
||||||
redis:
|
|
||||||
image: redis:6
|
|
||||||
ports:
|
|
||||||
- 56312:6379
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
with:
|
|
||||||
submodules: true
|
|
||||||
# https://github.com/cypress-io/cypress-docker-images/issues/150
|
|
||||||
#- name: Install mplayer for FireFox
|
|
||||||
# run: sudo apt install mplayer -y
|
|
||||||
# if: ${{ matrix.browser == 'firefox' }}
|
|
||||||
#- uses: browser-actions/setup-firefox@latest
|
|
||||||
# if: ${{ matrix.browser == 'firefox' }}
|
|
||||||
- name: Use Node.js ${{ matrix.node-version }}
|
|
||||||
uses: actions/setup-node@v3
|
|
||||||
with:
|
|
||||||
node-version: ${{ matrix.node-version }}
|
|
||||||
cache: 'yarn'
|
|
||||||
cache-dependency-path: |
|
|
||||||
packages/backend/yarn.lock
|
|
||||||
packages/client/yarn.lock
|
|
||||||
- name: Install dependencies
|
|
||||||
run: yarn install
|
|
||||||
- name: Check yarn.lock
|
|
||||||
run: git diff --exit-code yarn.lock
|
|
||||||
- name: Copy Configure
|
|
||||||
run: cp .github/misskey/test.yml .config
|
|
||||||
- name: Build
|
|
||||||
run: yarn build
|
|
||||||
# https://github.com/cypress-io/cypress/issues/4351#issuecomment-559489091
|
|
||||||
- name: ALSA Env
|
|
||||||
run: echo -e 'pcm.!default {\n type hw\n card 0\n}\n\nctl.!default {\n type hw\n card 0\n}' > ~/.asoundrc
|
|
||||||
- name: Cypress run
|
|
||||||
uses: cypress-io/github-action@v4
|
|
||||||
with:
|
|
||||||
install: false
|
|
||||||
start: npm run start:test
|
|
||||||
wait-on: 'http://localhost:61812'
|
|
||||||
headless: false
|
|
||||||
browser: ${{ matrix.browser }}
|
|
||||||
- uses: actions/upload-artifact@v2
|
|
||||||
if: failure()
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.browser }}-cypress-screenshots
|
|
||||||
path: cypress/screenshots
|
|
||||||
- uses: actions/upload-artifact@v2
|
|
||||||
if: always()
|
|
||||||
with:
|
|
||||||
name: ${{ matrix.browser }}-cypress-videos
|
|
||||||
path: cypress/videos
|
|
11
.gitignore
vendored
|
@ -6,16 +6,9 @@
|
||||||
/.idea
|
/.idea
|
||||||
|
|
||||||
# Node.js
|
# Node.js
|
||||||
node_modules
|
/node_modules
|
||||||
report.*.json
|
report.*.json
|
||||||
|
|
||||||
# Cypress
|
|
||||||
cypress/screenshots
|
|
||||||
cypress/videos
|
|
||||||
|
|
||||||
# Coverage
|
|
||||||
coverage
|
|
||||||
|
|
||||||
# config
|
# config
|
||||||
/.config/*
|
/.config/*
|
||||||
!/.config/example.yml
|
!/.config/example.yml
|
||||||
|
@ -23,7 +16,7 @@ coverage
|
||||||
|
|
||||||
# misskey
|
# misskey
|
||||||
/build
|
/build
|
||||||
built
|
/built
|
||||||
/data
|
/data
|
||||||
/.cache-loader
|
/.cache-loader
|
||||||
/db
|
/db
|
||||||
|
|
3
.gitmodules
vendored
|
@ -1,3 +0,0 @@
|
||||||
[submodule "misskey-assets"]
|
|
||||||
path = misskey-assets
|
|
||||||
url = https://github.com/misskey-dev/assets.git
|
|
5
.imgbotconfig
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
{
|
||||||
|
"ignoredFiles": [
|
||||||
|
"test/resources/*"
|
||||||
|
]
|
||||||
|
}
|
7
.mocharc.json
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{
|
||||||
|
"extension": ["ts","js","cjs","mjs"],
|
||||||
|
"require": "ts-node/register",
|
||||||
|
"slow": 1000,
|
||||||
|
"timeout": 30000,
|
||||||
|
"exit": true
|
||||||
|
}
|
|
@ -1 +1 @@
|
||||||
v16.15.0
|
v14.4.0
|
||||||
|
|
|
@ -1,6 +0,0 @@
|
||||||
build:
|
|
||||||
misskey:
|
|
||||||
args:
|
|
||||||
- NODE_ENV=development
|
|
||||||
deploy:
|
|
||||||
- helm upgrade --install misskey chart --set image=${OKTETO_BUILD_MISSKEY_IMAGE} --set url="https://misskey-$(kubectl config view --minify -o jsonpath='{..namespace}').cloud.okteto.net" --set environment=development
|
|
9
.vscode/extensions.json
vendored
|
@ -1,9 +1,12 @@
|
||||||
{
|
{
|
||||||
"recommendations": [
|
"recommendations": [
|
||||||
|
"ducksoupdev.vue2",
|
||||||
"editorconfig.editorconfig",
|
"editorconfig.editorconfig",
|
||||||
"eg2.vscode-npm-script",
|
"eg2.vscode-npm-script",
|
||||||
"dbaeumer.vscode-eslint",
|
"hollowtree.vue-snippets",
|
||||||
"Vue.volar",
|
"ms-vscode.typescript-javascript-grammar",
|
||||||
"Vue.vscode-typescript-vue-plugin"
|
"ms-vscode.vscode-typescript-tslint-plugin",
|
||||||
|
"octref.vetur",
|
||||||
|
"sysoev.language-stylus"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
1
.yarnrc
|
@ -1 +0,0 @@
|
||||||
network-timeout 600000
|
|
3362
CHANGELOG.md
338
CONTRIBUTING.md
|
@ -1,92 +1,22 @@
|
||||||
# Contribution guide
|
# Contribution guide
|
||||||
We're glad you're interested in contributing Misskey! In this document you will find the information you need to contribute to the project.
|
:v: Thanks for your contributions :v:
|
||||||
|
|
||||||
> **Note**
|
## When you contribute...
|
||||||
> This project uses Japanese as its major language, **but you do not need to translate and write the Issues/PRs in Japanese.**
|
- 任意のIssueについて、せっかく実装してくださっても、実装方法や設計の認識が揃ってないとマージできない/しないことになりかねないので、初めにそのIssue上で着手することを宣言し、必要に応じて他メンバーと実装方法や設計のすり合わせを行ってください。宣言することは作業が他の人と被るのを防止する効果もあります。
|
||||||
> Also, you might receive comments on your Issue/PR in Japanese, but you do not need to reply to them in Japanese as well.\
|
- 設計に迷った時はプロジェクトリーダーの判断を仰いでください。
|
||||||
> The accuracy of machine translation into Japanese is not high, so it will be easier for us to understand if you write it in the original language.
|
- 時間や優先度の都合上、提出してくださったPRが長期間放置されることもありますがご理解ください。
|
||||||
> It will also allow the reader to use the translation tool of their preference if necessary.
|
- 温度感高めで見てほしいものは責付いてください。
|
||||||
|
|
||||||
## Roadmap
|
|
||||||
See [ROADMAP.md](./ROADMAP.md)
|
|
||||||
|
|
||||||
## Issues
|
## Issues
|
||||||
Before creating an issue, please check the following:
|
Feature suggestions and bug reports are filed in https://github.com/syuilo/misskey/issues .
|
||||||
- To avoid duplication, please search for similar issues before creating a new issue.
|
|
||||||
- Do not use Issues to ask questions or troubleshooting.
|
|
||||||
- Issues should only be used to feature requests, suggestions, and bug tracking.
|
|
||||||
- Please ask questions or troubleshooting in the [Misskey Forum](https://forum.misskey.io/) or [Discord](https://discord.gg/Wp8gVStHW3).
|
|
||||||
|
|
||||||
> **Warning**
|
* Please search existing issues to avoid duplication. If your issue is already filed, please add your reaction or comment to the existing one.
|
||||||
> Do not close issues that are about to be resolved. It should remain open until a commit that actually resolves it is merged.
|
* If you have multiple independent issues, please submit them separately.
|
||||||
|
|
||||||
## Before implementation
|
## Branches
|
||||||
When you want to add a feature or fix a bug, **first have the design and policy reviewed in an Issue** (if it is not there, please make one). Without this step, there is a high possibility that the PR will not be merged even if it is implemented.
|
* **master** branch is tracking the latest release and used for production purposes.
|
||||||
|
* **develop** branch is where we work for the next release.
|
||||||
At this point, you also need to clarify the goals of the PR you will create, and make sure that the other members of the team are aware of them.
|
* **l10n_develop** branch is reserved for localization management.
|
||||||
PRs that do not have a clear set of do's and don'ts tend to be bloated and difficult to review.
|
|
||||||
|
|
||||||
Also, when you start implementation, assign yourself to the Issue (if you cannot do it yourself, ask another member to assign you). By expressing your intention to work the Issue, you can prevent conflicts in the work.
|
|
||||||
|
|
||||||
## Well-known branches
|
|
||||||
- **`master`** branch is tracking the latest release and used for production purposes.
|
|
||||||
- **`develop`** branch is where we work for the next release.
|
|
||||||
- When you create a PR, basically target it to this branch.
|
|
||||||
- **`l10n_develop`** branch is reserved for localization management.
|
|
||||||
|
|
||||||
## Creating a PR
|
|
||||||
Thank you for your PR! Before creating a PR, please check the following:
|
|
||||||
- If possible, prefix the title with a keyword that identifies the type of this PR, as shown below.
|
|
||||||
- `fix` / `refactor` / `feat` / `enhance` / `perf` / `chore` etc
|
|
||||||
- Also, make sure that the granularity of this PR is appropriate. Please do not include more than one type of change or interest in a single PR.
|
|
||||||
- If there is an Issue which will be resolved by this PR, please include a reference to the Issue in the text.
|
|
||||||
- Please add the summary of the changes to [`CHANGELOG.md`](/CHANGELOG.md). However, this is not necessary for changes that do not affect the users, such as refactoring.
|
|
||||||
- Check if there are any documents that need to be created or updated due to this change.
|
|
||||||
- If you have added a feature or fixed a bug, please add a test case if possible.
|
|
||||||
- Please make sure that tests and Lint are passed in advance.
|
|
||||||
- You can run it with `npm run test` and `npm run lint`. [See more info](#testing)
|
|
||||||
- If this PR includes UI changes, please attach a screenshot in the text.
|
|
||||||
|
|
||||||
Thanks for your cooperation 🤗
|
|
||||||
|
|
||||||
## Reviewers guide
|
|
||||||
Be willing to comment on the good points and not just the things you want fixed 💯
|
|
||||||
|
|
||||||
### Review perspective
|
|
||||||
- Scope
|
|
||||||
- Are the goals of the PR clear?
|
|
||||||
- Is the granularity of the PR appropriate?
|
|
||||||
- Security
|
|
||||||
- Does merging this PR create a vulnerability?
|
|
||||||
- Performance
|
|
||||||
- Will merging this PR cause unexpected performance degradation?
|
|
||||||
- Is there a more efficient way?
|
|
||||||
- Testing
|
|
||||||
- Does the test ensure the expected behavior?
|
|
||||||
- Are there any omissions or gaps?
|
|
||||||
- Does it check for anomalies?
|
|
||||||
|
|
||||||
## Deploy
|
|
||||||
The `/deploy` command by issue comment can be used to deploy the contents of a PR to the preview environment.
|
|
||||||
```
|
|
||||||
/deploy sha=<commit hash>
|
|
||||||
```
|
|
||||||
An actual domain will be assigned so you can test the federation.
|
|
||||||
|
|
||||||
## Merge
|
|
||||||
|
|
||||||
## Release
|
|
||||||
### Release Instructions
|
|
||||||
1. Commit version changes in the `develop` branch ([package.json](https://github.com/misskey-dev/misskey/blob/develop/package.json))
|
|
||||||
2. Create a release PR.
|
|
||||||
- Into `master` from `develop` branch.
|
|
||||||
- The title must be in the format `Release: x.y.z`.
|
|
||||||
- `x.y.z` is the new version you are trying to release.
|
|
||||||
3. Deploy and perform a simple QA check. Also verify that the tests passed.
|
|
||||||
4. Merge it.
|
|
||||||
5. Create a [release of GitHub](https://github.com/misskey-dev/misskey/releases)
|
|
||||||
- The target branch must be `master`
|
|
||||||
- The tag name must be the version
|
|
||||||
|
|
||||||
## Localization (l10n)
|
## Localization (l10n)
|
||||||
Misskey uses [Crowdin](https://crowdin.com/project/misskey) for localization management.
|
Misskey uses [Crowdin](https://crowdin.com/project/misskey) for localization management.
|
||||||
|
@ -98,84 +28,143 @@ If your language is not listed in Crowdin, please open an issue.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
## Development
|
## Internationalization (i18n)
|
||||||
During development, it is useful to use the `npm run dev` command.
|
Misskey uses the Vue.js plugin [Vue I18n](https://github.com/kazupon/vue-i18n).
|
||||||
This command monitors the server-side and client-side source files and automatically builds them if they are modified.
|
Documentation of Vue I18n is available at http://kazupon.github.io/vue-i18n/introduction.html .
|
||||||
In addition, it will also automatically start the Misskey server process.
|
|
||||||
|
|
||||||
## Testing
|
## Documentation
|
||||||
- Test codes are located in [`/test`](/test).
|
* Documents for contributors are located in [`/docs`](/docs).
|
||||||
|
* Documents for instance admins are located in [`/docs`](/docs).
|
||||||
|
* Documents for end users are located in [`/src/docs`](/src/docs).
|
||||||
|
|
||||||
### Run test
|
## Test
|
||||||
Create a config file.
|
* Test codes are located in [`/test`](/test).
|
||||||
```
|
|
||||||
cp test/test.yml .config/
|
|
||||||
```
|
|
||||||
Prepare DB/Redis for testing.
|
|
||||||
```
|
|
||||||
docker-compose -f test/docker-compose.yml up
|
|
||||||
```
|
|
||||||
Alternatively, prepare an empty (data can be erased) DB and edit `.config/test.yml`.
|
|
||||||
|
|
||||||
Run all test.
|
|
||||||
```
|
|
||||||
npm run test
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Run specify test
|
|
||||||
```
|
|
||||||
npx cross-env TS_NODE_FILES=true TS_NODE_TRANSPILE_ONLY=true TS_NODE_PROJECT="./test/tsconfig.json" npx mocha test/foo.ts --require ts-node/register
|
|
||||||
```
|
|
||||||
|
|
||||||
### e2e tests
|
|
||||||
TODO
|
|
||||||
|
|
||||||
## Continuous integration
|
## Continuous integration
|
||||||
Misskey uses GitHub Actions for executing automated tests.
|
Misskey uses CircleCI for executing automated tests.
|
||||||
Configuration files are located in [`/.github/workflows`](/.github/workflows).
|
Configuration files are located in [`/.circleci`](/.circleci).
|
||||||
|
|
||||||
## Vue
|
## Adding MisskeyRoom items
|
||||||
Misskey uses Vue(v3) as its front-end framework.
|
* Use English for material, object and texture names.
|
||||||
- Use TypeScript.
|
* Use meter for unit of length.
|
||||||
- **When creating a new component, please use the Composition API (with [setup sugar](https://v3.vuejs.org/api/sfc-script-setup.html) and [ref sugar](https://github.com/vuejs/rfcs/discussions/369)) instead of the Options API.**
|
* Your PR should include all source files (e.g. `.png`, `.blend`) of your models (for later editing).
|
||||||
- Some of the existing components are implemented in the Options API, but it is an old implementation. Refactors that migrate those components to the Composition API are also welcome.
|
* Your PR must include the glTF binary files (`.glb`) of your models.
|
||||||
|
* Add a locale key `room.furnitures.YOUR_ITEM` at [`/locales/ja-JP.yml`](/locales/ja-JP.yml).
|
||||||
|
* Add a furniture definition at [`/src/client/app/common/scripts/room/furnitures.json5`](/src/client/app/common/scripts/room/furnitures.json5).
|
||||||
|
|
||||||
## nirax
|
If you have no experience on 3D modeling, we suggest to use the free 3DCG software [Blender](https://www.blender.org/).
|
||||||
niraxは、Misskeyで使用しているオリジナルのフロントエンドルーティングシステムです。
|
You can find information on glTF 2.0 at [glTF 2.0 — Blender Manual]( https://docs.blender.org/manual/en/dev/addons/io_scene_gltf2.html).
|
||||||
**vue-routerから影響を多大に受けているので、まずはvue-routerについて学ぶことをお勧めします。**
|
|
||||||
|
|
||||||
### ルート定義
|
## FAQ
|
||||||
ルート定義は、以下の形式のオブジェクトの配列です。
|
|
||||||
|
|
||||||
``` ts
|
|
||||||
{
|
|
||||||
name?: string;
|
|
||||||
path: string;
|
|
||||||
component: Component;
|
|
||||||
query?: Record<string, string>;
|
|
||||||
loginRequired?: boolean;
|
|
||||||
hash?: string;
|
|
||||||
globalCacheKey?: string;
|
|
||||||
children?: RouteDef[];
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
> **Warning**
|
|
||||||
> 現状、ルートは定義された順に評価されます。
|
|
||||||
> たとえば、`/foo/:id`ルート定義の次に`/foo/bar`ルート定義がされていた場合、後者がマッチすることはありません。
|
|
||||||
|
|
||||||
### 複数のルーター
|
|
||||||
vue-routerとの最大の違いは、niraxは複数のルーターが存在することを許可している点です。
|
|
||||||
これにより、アプリ内ウィンドウでブラウザとは個別にルーティングすることなどが可能になります。
|
|
||||||
|
|
||||||
## Notes
|
|
||||||
### How to resolve conflictions occurred at yarn.lock?
|
### How to resolve conflictions occurred at yarn.lock?
|
||||||
|
|
||||||
Just execute `yarn` to fix it.
|
Just execute `yarn` to fix it.
|
||||||
|
|
||||||
### INSERTするときにはsaveではなくinsertを使用する
|
## Glossary
|
||||||
#6441
|
### AP
|
||||||
|
Stands for _**A**ctivity**P**ub_.
|
||||||
|
|
||||||
|
### MFM
|
||||||
|
Stands for _**M**isskey **F**lavored **M**arkdown_.
|
||||||
|
|
||||||
|
### Mk
|
||||||
|
Stands for _**M**iss**k**ey_.
|
||||||
|
|
||||||
|
### SW
|
||||||
|
Stands for _**S**ervice**W**orker_.
|
||||||
|
|
||||||
|
### Nyaize
|
||||||
|
Convert な(na) to にゃ(nya)
|
||||||
|
|
||||||
|
#### Denyaize
|
||||||
|
Revert Nyaize
|
||||||
|
|
||||||
|
## TypeScript Coding Style
|
||||||
|
### Do not omit semicolons
|
||||||
|
This is to avoid Automatic Semicolon Insertion (ASI) hazard.
|
||||||
|
|
||||||
|
Ref:
|
||||||
|
* https://www.ecma-international.org/ecma-262/#sec-automatic-semicolon-insertion
|
||||||
|
* https://github.com/tc39/ecma262/pull/1062
|
||||||
|
|
||||||
|
### Do not omit curly brackets
|
||||||
|
Bad:
|
||||||
|
``` ts
|
||||||
|
if (foo)
|
||||||
|
bar;
|
||||||
|
else
|
||||||
|
baz;
|
||||||
|
```
|
||||||
|
|
||||||
|
Good:
|
||||||
|
``` ts
|
||||||
|
if (foo) {
|
||||||
|
bar;
|
||||||
|
} else {
|
||||||
|
baz;
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
As a special case, you can omit the curly brackets if
|
||||||
|
|
||||||
|
* the body of the `if`-statement have only one statement and,
|
||||||
|
* the `if`-statement does not have `else`-clause.
|
||||||
|
|
||||||
|
Good:
|
||||||
|
``` ts
|
||||||
|
if (foo) bar;
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure that the condition and the body statement are on the same line.
|
||||||
|
|
||||||
|
### Do not use `==` when it can simply be replaced with `===`.
|
||||||
|
🥰
|
||||||
|
|
||||||
|
### Use only boolean (or null related) values in the condition of an `if`-statement.
|
||||||
|
Bad:
|
||||||
|
``` ts
|
||||||
|
if (foo.length)
|
||||||
|
```
|
||||||
|
|
||||||
|
Good:
|
||||||
|
``` ts
|
||||||
|
if (foo.length > 0)
|
||||||
|
```
|
||||||
|
|
||||||
|
### Do not use `export default`
|
||||||
|
This is because the current language support does not work well with `export default`.
|
||||||
|
|
||||||
|
Ref:
|
||||||
|
* https://basarat.gitbooks.io/typescript/docs/tips/defaultIsBad.html
|
||||||
|
* https://gfx.hatenablog.com/entry/2017/11/24/135343
|
||||||
|
|
||||||
|
Bad:
|
||||||
|
``` ts
|
||||||
|
export default function(foo: string): string {
|
||||||
|
```
|
||||||
|
|
||||||
|
Good:
|
||||||
|
``` ts
|
||||||
|
export function something(foo: string): string {
|
||||||
|
```
|
||||||
|
|
||||||
|
## Directory structure
|
||||||
|
```
|
||||||
|
src ... Source code
|
||||||
|
@types ... Type definitions
|
||||||
|
prelude ... Independence utils for coding JavaScript without side effects
|
||||||
|
misc ... Independence utils for Misskey without side effects
|
||||||
|
service ... Common functions with side effects
|
||||||
|
queue ... Job queues and Jobs
|
||||||
|
server ... Web Server
|
||||||
|
client ... Client
|
||||||
|
mfm ... MFM
|
||||||
|
|
||||||
|
test ... Test code
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
## Notes
|
||||||
### placeholder
|
### placeholder
|
||||||
SQLをクエリビルダで組み立てる際、使用するプレースホルダは重複してはならない
|
SQLをクエリビルダで組み立てる際、使用するプレースホルダは重複してはならない
|
||||||
例えば
|
例えば
|
||||||
|
@ -247,31 +236,46 @@ const users = userIds.length > 0 ? await Users.find({
|
||||||
SQLでは配列のインデックスは**1始まり**。
|
SQLでは配列のインデックスは**1始まり**。
|
||||||
`[a, b, c]`の `a`にアクセスしたいなら`[0]`ではなく`[1]`と書く
|
`[a, b, c]`の `a`にアクセスしたいなら`[0]`ではなく`[1]`と書く
|
||||||
|
|
||||||
### null IN
|
|
||||||
nullが含まれる可能性のあるカラムにINするときは、そのままだとおかしくなるのでORなどでnullのハンドリングをしよう。
|
|
||||||
|
|
||||||
### `undefined`にご用心
|
### `undefined`にご用心
|
||||||
MongoDBの時とは違い、findOneでレコードを取得する時に対象レコードが存在しない場合 **`undefined`** が返ってくるので注意。
|
MongoDBの時とは違い、findOneでレコードを取得する時に対象レコードが存在しない場合 **`undefined`** が返ってくるので注意。
|
||||||
MongoDBは`null`で返してきてたので、その感覚で`if (x === null)`とか書くとバグる。代わりに`if (x == null)`と書いてください
|
MongoDBは`null`で返してきてたので、その感覚で`if (x === null)`とか書くとバグる。代わりに`if (x == null)`と書いてください
|
||||||
|
|
||||||
### Migration作成方法
|
### 簡素な`undefined`チェック
|
||||||
packages/backendで:
|
データベースからレコードを取得するときに、プログラムの流れ的に(ほぼ)絶対`undefined`にはならない場合でも、`undefined`チェックしないとTypeScriptに怒られます。
|
||||||
```sh
|
でもいちいち複数行を費やして、発生するはずのない`undefined`をチェックするのも面倒なので、`ensure`というユーティリティ関数を用意しています。
|
||||||
npx typeorm migration:generate -d ormconfig.js -o <migration name>
|
例えば、
|
||||||
|
``` ts
|
||||||
|
const user = await Users.findOne(userId);
|
||||||
|
// この時点で user の型は User | undefined
|
||||||
|
if (user == null) {
|
||||||
|
throw 'missing user';
|
||||||
|
}
|
||||||
|
// この時点で user の型は User
|
||||||
|
```
|
||||||
|
という処理を`ensure`を使うと
|
||||||
|
``` ts
|
||||||
|
const user = await Users.findOne(userId).then(ensure);
|
||||||
|
// この時点で user の型は User
|
||||||
|
```
|
||||||
|
という風に書けます。
|
||||||
|
もちろん`ensure`内部でエラーを握りつぶすようなことはしておらず、万が一`undefined`だった場合はPromiseがRejectされ後続の処理は実行されません。
|
||||||
|
``` ts
|
||||||
|
const user = await Users.findOne(userId).then(ensure);
|
||||||
|
// 万が一 Users.findOne の結果が undefined だったら、ensure でエラーが発生するので
|
||||||
|
// この行に到達することは無い
|
||||||
|
// なので、.then(ensure) は
|
||||||
|
// if (user == null) {
|
||||||
|
// throw 'missing user';
|
||||||
|
// }
|
||||||
|
// の糖衣構文のような扱いです
|
||||||
```
|
```
|
||||||
|
|
||||||
- 生成後、ファイルをmigration下に移してください
|
### Migration作成方法
|
||||||
- 作成されたスクリプトは不必要な変更を含むため除去してください
|
```
|
||||||
|
npx ts-node ./node_modules/typeorm/cli.js migration:generate -n 変更の名前
|
||||||
|
```
|
||||||
|
|
||||||
### コネクションには`markRaw`せよ
|
作成されたスクリプトは不必要な変更を含むため除去してください。
|
||||||
**Vueのコンポーネントのdataオプションとして**misskey.jsのコネクションを設定するとき、必ず`markRaw`でラップしてください。インスタンスが不必要にリアクティブ化されることで、misskey.js内の処理で不具合が発生するとともに、パフォーマンス上の問題にも繋がる。なお、Composition APIを使う場合はこの限りではない(リアクティブ化はマニュアルなため)。
|
|
||||||
|
|
||||||
### JSONのimportに気を付けよう
|
|
||||||
TypeScriptでjsonをimportすると、tscでコンパイルするときにそのjsonファイルも一緒にdistディレクトリに吐き出されてしまう。この挙動により、意図せずファイルの書き換えが発生することがあるので、jsonをimportするときは書き換えられても良いものかどうか確認すること。書き換えされて欲しくない場合は、importで読み込むのではなく、`fs.readFileSync`などの関数を使って読み込むようにすればよい。
|
|
||||||
|
|
||||||
### コンポーネントのスタイル定義でmarginを持たせない
|
|
||||||
コンポーネント自身がmarginを設定するのは問題の元となることはよく知られている
|
|
||||||
marginはそのコンポーネントを使う側が設定する
|
|
||||||
|
|
||||||
## その他
|
## その他
|
||||||
### HTMLのクラス名で follow という単語は使わない
|
### HTMLのクラス名で follow という単語は使わない
|
||||||
|
|
10
COPYING
|
@ -1,11 +1,15 @@
|
||||||
Unless otherwise stated this repository is
|
Unless otherwise stated this repository is
|
||||||
Copyright © 2014-2022 syuilo and contributers
|
Copyright © 2014-2020 syuilo and contributers
|
||||||
|
|
||||||
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
|
And is distributed under The GNU Affero General Public License Version 3, you should have received a copy of the license file as LICENSE.
|
||||||
|
|
||||||
|
|
||||||
Misskey includes several third-party Open-Source softwares.
|
Misskey includes several third-party Open-Source softwares.
|
||||||
|
|
||||||
|
Unicode emoji regular expressions by Twitter, Inc.
|
||||||
|
License: MIT
|
||||||
|
https://github.com/twitter/twemoji-parser/blob/master/LICENSE.md
|
||||||
|
|
||||||
Emoji keywords for Unicode 11 and below by Mu-An Chiou
|
Emoji keywords for Unicode 11 and below by Mu-An Chiou
|
||||||
License: MIT
|
License: MIT
|
||||||
https://github.com/muan/emojilib/blob/master/LICENSE
|
https://github.com/muan/emojilib/blob/master/LICENSE
|
||||||
|
@ -13,7 +17,3 @@ https://github.com/muan/emojilib/blob/master/LICENSE
|
||||||
RsaSignature2017 implementation by Transmute Industries Inc
|
RsaSignature2017 implementation by Transmute Industries Inc
|
||||||
License: MIT
|
License: MIT
|
||||||
https://github.com/transmute-industries/RsaSignature2017/blob/master/LICENSE
|
https://github.com/transmute-industries/RsaSignature2017/blob/master/LICENSE
|
||||||
|
|
||||||
Machine learning model for sensitive images by Infinite Red, Inc.
|
|
||||||
License: MIT
|
|
||||||
https://github.com/infinitered/nsfwjs/blob/master/LICENSE
|
|
||||||
|
|
45
Dockerfile
|
@ -1,32 +1,43 @@
|
||||||
FROM node:16.15.1-bullseye AS builder
|
FROM node:14.4.0-alpine AS base
|
||||||
|
|
||||||
ARG NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
|
||||||
|
RUN npm i -g npm@latest
|
||||||
|
|
||||||
WORKDIR /misskey
|
WORKDIR /misskey
|
||||||
|
|
||||||
COPY . ./
|
FROM base AS builder
|
||||||
|
|
||||||
RUN apt-get update
|
RUN apk add --no-cache \
|
||||||
RUN apt-get install -y build-essential
|
autoconf \
|
||||||
RUN git submodule update --init
|
automake \
|
||||||
|
file \
|
||||||
|
git \
|
||||||
|
g++ \
|
||||||
|
gcc \
|
||||||
|
libc-dev \
|
||||||
|
libtool \
|
||||||
|
make \
|
||||||
|
nasm \
|
||||||
|
pkgconfig \
|
||||||
|
python \
|
||||||
|
zlib-dev
|
||||||
|
|
||||||
|
COPY package.json yarn.lock ./
|
||||||
RUN yarn install
|
RUN yarn install
|
||||||
|
COPY . ./
|
||||||
RUN yarn build
|
RUN yarn build
|
||||||
RUN rm -rf .git
|
|
||||||
|
|
||||||
FROM node:16.15.1-bullseye-slim AS runner
|
FROM base AS runner
|
||||||
|
|
||||||
WORKDIR /misskey
|
RUN apk add --no-cache \
|
||||||
|
ffmpeg \
|
||||||
RUN apt-get update
|
tini
|
||||||
RUN apt-get install -y ffmpeg tini
|
RUN npm i -g web-push
|
||||||
|
ENTRYPOINT ["/sbin/tini", "--"]
|
||||||
|
|
||||||
COPY --from=builder /misskey/node_modules ./node_modules
|
COPY --from=builder /misskey/node_modules ./node_modules
|
||||||
COPY --from=builder /misskey/built ./built
|
COPY --from=builder /misskey/built ./built
|
||||||
COPY --from=builder /misskey/packages/backend/node_modules ./packages/backend/node_modules
|
|
||||||
COPY --from=builder /misskey/packages/backend/built ./packages/backend/built
|
|
||||||
COPY --from=builder /misskey/packages/client/node_modules ./packages/client/node_modules
|
|
||||||
COPY . ./
|
COPY . ./
|
||||||
|
|
||||||
ENV NODE_ENV=production
|
|
||||||
ENTRYPOINT ["/usr/bin/tini", "--"]
|
|
||||||
CMD ["npm", "run", "migrateandstart"]
|
CMD ["npm", "run", "migrateandstart"]
|
||||||
|
|
253
README.md
|
@ -1,57 +1,224 @@
|
||||||
<div align="center">
|
<a href="https://xn--931a.moe/"><img src="https://github.com/syuilo/misskey/blob/develop/assets/ai-orig.png?raw=true" align="right" height="320px"/></a>
|
||||||
<a href="https://misskey-hub.net">
|
|
||||||
<img src="./assets/title_float.svg" alt="Misskey logo" style="border-radius:50%" width="400"/>
|
[](https://join.misskey.page/)
|
||||||
</a>
|
================================================================
|
||||||
|
|
||||||
**🌎 **[Misskey](https://misskey-hub.net/)** is an open source, decentralized social media platform that's free forever! 🚀**
|
[](https://circleci.com/gh/syuilo/misskey)
|
||||||
|
[](https://david-dm.org/syuilo/misskey)
|
||||||
|
[](http://makeapullrequest.com)
|
||||||
|
[](https://github.com/humanetech-community/awesome-humane-tech)
|
||||||
|
|
||||||
|
**A forever evolving, sophisticated microblogging platform.**
|
||||||
|
|
||||||
|
<p align="justify">
|
||||||
|
<a href="https://join.misskey.page/">Misskey</a> is a decentralized microblogging platform born on Earth.
|
||||||
|
Since it exists within the Fediverse (a universe where various social media platforms are organized),
|
||||||
|
it is mutually linked with other social media platforms.
|
||||||
|
Why don't you take a short break from the hustle and bustle of the city, and dive into a new Internet? <a href="https://join.misskey.page/">Find an instance!</a>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<a href="https://www.patreon.com/syuilo"><img src="https://c5.patreon.com/external/logo/become_a_patron_button@2x.png" alt="Become a Patron!" width="160" /></a>
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
:sparkles: Features
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
<img src="/assets/about/post.png" align="left" height="200px"/>
|
||||||
|
|
||||||
|
<h3 align="left">Posting</h3>
|
||||||
|
<p align="justify">
|
||||||
|
Post your ideas, discussion topics, fun moments, or anything else you want to share! Misskey supports text, emoji, pictures, videos, and polls!
|
||||||
|
</p>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<a href="https://misskey-hub.net/instances.html">
|
<img src="/assets/about/reaction.png" align="right" height="200px"/>
|
||||||
<img src="https://custom-icon-badges.herokuapp.com/badge/find_an-instance-acea31?logoColor=acea31&style=for-the-badge&logo=misskey&labelColor=363B40" alt="find an instance"/></a>
|
|
||||||
|
|
||||||
<a href="https://misskey-hub.net/docs/install.html">
|
<h3 align="right">Reactions</h3>
|
||||||
<img src="https://custom-icon-badges.herokuapp.com/badge/create_an-instance-FBD53C?logoColor=FBD53C&style=for-the-badge&logo=server&labelColor=363B40" alt="create an instance"/></a>
|
<p align="justify">
|
||||||
|
Reactions are the simplest way to respond to others' posts. Simply pick a reaction emote from the list! Reactions on Misskey are much more expressive than other social media services which only allow “liking”.
|
||||||
|
</p>
|
||||||
|
|
||||||
<a href="./CONTRIBUTING.md">
|
|
||||||
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-contributor-A371F7?logoColor=A371F7&style=for-the-badge&logo=git-merge&labelColor=363B40" alt="become a contributor"/></a>
|
|
||||||
|
|
||||||
<a href="https://discord.gg/Wp8gVStHW3">
|
|
||||||
<img src="https://custom-icon-badges.herokuapp.com/badge/join_the-community-5865F2?logoColor=5865F2&style=for-the-badge&logo=discord&labelColor=363B40" alt="join the community"/></a>
|
|
||||||
|
|
||||||
<a href="https://www.patreon.com/syuilo">
|
|
||||||
<img src="https://custom-icon-badges.herokuapp.com/badge/become_a-patron-F96854?logoColor=F96854&style=for-the-badge&logo=patreon&labelColor=363B40" alt="become a patron"/></a>
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
</div>
|
<img src="/assets/about/ui.png" align="left" height="200px"/>
|
||||||
|
|
||||||
<div>
|
<h3 align="left">Interface</h3>
|
||||||
|
<p align="justify">
|
||||||
|
Customize the UI to your own tastes! No UI will work for everyone, so Misskey is completely customizable. Make Misskey *yours* by editing the style, adjusting timeline layouts, and placing widgets.
|
||||||
|
</p>
|
||||||
|
|
||||||
<a href="https://xn--931a.moe/"><img src="https://github.com/misskey-dev/misskey/blob/develop/assets/ai.png?raw=true" align="right" height="320px"/></a>
|
---
|
||||||
|
|
||||||
## ✨ Features
|
<img src="/assets/about/drive.png" align="right" width="300px"/>
|
||||||
- **ActivityPub support**\
|
|
||||||
Not on Misskey? No problem! Not only can Misskey instances talk to each other, but you can make friends with people on other networks like Mastodon and Pixelfed!
|
|
||||||
- **Reactions**\
|
|
||||||
You can add emoji reactions to any post! No longer are you bound by a like button, show everyone exactly how you feel with the tap of a button.
|
|
||||||
- **Drive**\
|
|
||||||
With Misskey's built in drive, you get cloud storage right in your social media, where you can upload any files, make folders, and find media from posts you've made!
|
|
||||||
- **Rich Web UI**\
|
|
||||||
Misskey has a rich and easy to use Web UI!
|
|
||||||
It is highly customizable, from changing the layout and adding widgets to making custom themes.
|
|
||||||
Furthermore, plugins can be created using AiScript, an original programming language.
|
|
||||||
- And much more...
|
|
||||||
|
|
||||||
</div>
|
<h3 align="right">Misskey Drive</h3>
|
||||||
|
<p align="justify">
|
||||||
|
Organize and store your files! Want to post a picture you have already uploaded? Wish you could organize your files into folders? Misskey Drive is a solution!
|
||||||
|
</p>
|
||||||
|
|
||||||
<div style="clear: both;"></div>
|
---
|
||||||
|
|
||||||
## Documentation
|
...and more! Experience Misskey with your own eyes at [misskey.io](https://misskey.io/) or join one of the [other instances](https://joinmisskey.github.io/) that are available.
|
||||||
|
|
||||||
Misskey Documentation can be found at [Misskey Hub](https://misskey-hub.net/), some of the links and graphics above also lead to specific portions of it.
|
Screen shots
|
||||||
|
----------------------------------------------------------------
|
||||||
|
### Profile page
|
||||||
|
<img src="/assets/ss/user.jpg" width="500px"/>
|
||||||
|
|
||||||
## Sponsors
|
### Explore users
|
||||||
<div align="center">
|
<img src="/assets/ss/explore.jpg" width="500px"/>
|
||||||
<a class="rss3" title="RSS3" href="https://rss3.io/" target="_blank"><img src="https://rss3.mypinata.cloud/ipfs/QmUG6H3Z7D5P511shn7sB4CPmpjH5uZWu4m5mWX7U3Gqbu" alt="RSS3" height="60"></a>
|
|
||||||
</div>
|
:new: What's new
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Please see the [Release notes](./CHANGELOG.md).
|
||||||
|
|
||||||
|
:package: Create your own instance
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Please see the [Setup and Installation Guide](./docs/setup.en.md).
|
||||||
|
|
||||||
|
:wrench: Contribution
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Please see the [Contribution Guide](./CONTRIBUTING.md).
|
||||||
|
|
||||||
|
### Collaborators
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td><img src="https://avatars3.githubusercontent.com/u/4439005?s=460&v=4" alt="syuilo" width="100"></td>
|
||||||
|
<td><img src="https://avatars0.githubusercontent.com/u/10798641?s=460&v=4" alt="AyaMorisawa" width="100"></td>
|
||||||
|
<td><img src="https://avatars1.githubusercontent.com/u/30769358?s=460&v=4" alt="mei23" width="100"></td>
|
||||||
|
<td><img src="https://avatars2.githubusercontent.com/u/20679825?s=460&v=4" alt="acid-chicken" width="100"></td>
|
||||||
|
<td><img src="https://avatars2.githubusercontent.com/u/6533808?s=460&v=4" alt="rinsuki" width="100"></td>
|
||||||
|
<td><img src="https://avatars0.githubusercontent.com/u/7973572?s=460&v=4" alt="tamaina" width="100"></td>
|
||||||
|
<td><img src="https://avatars1.githubusercontent.com/u/7106976?s=460&v=4" alt="Xeltica" width="100"></td>
|
||||||
|
<td><img src="https://avatars1.githubusercontent.com/u/17376330?s=460&v=4" alt="u1-liquid" width="100"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td align="center"><a href="https://github.com/syuilo">@syuilo</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/AyaMorisawa">@AyaMorisawa</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/mei23">@mei23</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/acid-chicken">@acid-chicken</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/rinsuki">@rinsuki</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/tamaina">@tamaina</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/Xeltica">@Xeltica</a></td>
|
||||||
|
<td align="center"><a href="https://github.com/u1-liquid">@u1-liquid</a></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
:heart: Backers
|
||||||
|
----------------------------------------------------------------
|
||||||
|
<!-- PATREON_START -->
|
||||||
|
<table><tr>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/20832595" alt="Roujo " width="100"></td>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/27956229" alt="Oliver Maximilian Seidel" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12190916/fb7fa7983c14425f890369535b1506a4/3.png?token-time=2145916800&token-hash=oH_i7gJjNT7Ot6j9JiVwy7ZJIBqACVnzLqlz4YrDAZA%3D" alt="weepjp " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/19045173/cb91c0f345c24d4ebfd05f19906d5e26/1.png?token-time=2145916800&token-hash=o_zKBytJs_AxHwSYw_5R8eD0eSJe3RoTR3kR3Q0syN0%3D" alt="kiritan " width="100"></td>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/27648259" alt="みなしま " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/24430516/b1964ac5b9f746d2a12ff53dbc9aa40a/1.jpg?token-time=2145916800&token-hash=bmEiMGYpp3bS7hCCbymjGGsHBZM3AXuBOFO3Kro37PU%3D" alt="Eduardo Quiros" width="100"></td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=20832595">Roujo </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=27956229">Oliver Maximilian Seidel</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/weepjp">weepjp </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=19045173">kiritan </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=27648259">みなしま </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=24430516">Eduardo Quiros</a></td>
|
||||||
|
</tr></table>
|
||||||
|
<table><tr>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/14215107/1cbe1912c26143919fa0faca16f12ce1/4.jpg?token-time=2145916800&token-hash=BslMqDjTjz8KYANLvxL87agHTugHa0dMPUzT-hwR6Vk%3D" alt="Nesakko" width="100"></td>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/776209" alt="Demogrognard" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/3075183/c2ae575c604e420297f000ccc396e395/1.jpeg?token-time=2145916800&token-hash=O9qmPtpo6wWb0OuvnkEekhk_1WO2MTdytLr7ZgsAr80%3D" alt="Liaizon Wakest" width="100"></td>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/557245" alt="mkatze " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/23915207/25428766ecd745478e600b3d7f871eb2/1.png?token-time=2145916800&token-hash=urCLLA4KjJZX92Y1CxcBP4d8bVTHGkiaPnQZp-Tqz68%3D" alt="kabo2468y " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/8249688/4aacf36b6b244ab1bc6653591b6640df/2.png?token-time=2145916800&token-hash=1ZEf2w6L34253cZXS_HlVevLEENWS9QqrnxGUAYblPo%3D" alt="AureoleArk " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5670915/ee175f0bfb6347ffa4ea101a8c097bff/1.jpg?token-time=2145916800&token-hash=mPLM9CA-riFHx-myr3bLZJuH2xBRHA9se5VbHhLIOuA%3D" alt="osapon " width="100"></td>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/16869916" alt="見当かなみ " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/36813045/29876ea679d443bcbba3c3f16edab8c2/2.jpeg?token-time=2145916800&token-hash=YCKWnIhrV9rjUCV9KqtJnEqjy_uGYF3WMXftjUdpi7o%3D" alt="Wataru Manji (manji0)" width="100"></td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a href="https://www.patreon.com/Nesakko">Nesakko</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=776209">Demogrognard</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/wakest">Liaizon Wakest</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=557245">mkatze </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=23915207">kabo2468y </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/AureoleArk">AureoleArk </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/osapon">osapon </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=16869916">見当かなみ </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=36813045">Wataru Manji (manji0)</a></td>
|
||||||
|
</tr></table>
|
||||||
|
<table><tr>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18899730/6a22797f68254034a854d69ea2445fc8/1.png?token-time=2145916800&token-hash=b_uj57yxo5VzkSOUS7oXE_762dyOTB_oxzbO6lFNG3k%3D" alt="YuzuRyo61 " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5788159/af42076ab3354bb49803cfba65f94bee/1.jpg?token-time=2145916800&token-hash=iSaxp_Yr2-ZiU2YVi9rcpZZj9mj3UvNSMrZr4CU4qtA%3D" alt="mewl hayabusa" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/28779508/3cd4cb7f017f4ee0864341e3464d42f9/1.png?token-time=2145916800&token-hash=eGQtR15be44kgvh8fw2Jx8Db4Bv15YBp2ldxh0EKRxA%3D" alt="S Y" width="100"></td>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/16542964" alt="Takumi Sugita" width="100"></td>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/17866454" alt="sikyosyounin " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5881381/6235ca5d3fb04c8e95ef5b4ff2abcc18/3.png?token-time=2145916800&token-hash=KjfQL8nf3AIf6WqzLshBYAyX44piAqOAZiYXgZS_H6A%3D" alt="YUKIMOCHI" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/38837364/9421361c54c645ac8f5fc442a40c32e9/1.png?token-time=2145916800&token-hash=TUZB48Nem3BeUPLBH6s3P6WyKBnQOy0xKaDSTBBUNzA%3D" alt="xianon" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/26340354/08834cf767b3449e93098ef73a434e2f/2.png?token-time=2145916800&token-hash=nyM8DnKRL8hR47HQ619mUzsqVRpkWZjgtgBU9RY15Uc%3D" alt="totokoro " width="100"></td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a href="https://www.patreon.com/Yuzulia">YuzuRyo61 </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/hs_sh_net">mewl hayabusa</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=28779508">S Y</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=16542964">Takumi Sugita</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=17866454">sikyosyounin </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/yukimochi">YUKIMOCHI</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=38837364">xianon</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=26340354">totokoro </a></td>
|
||||||
|
</tr></table>
|
||||||
|
<table><tr>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/19356899/496b4681d33b4520bd7688e0fd19c04d/2.jpeg?token-time=2145916800&token-hash=_sTj3dUBOhn9qwiJ7F19Qd-yWWfUqJC_0jG1h0agEqQ%3D" alt="sheeta.s " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5827393/59893c191dda408f9cabd0f20a3a5627/1.jpeg?token-time=2145916800&token-hash=i9N05vOph-eP1LTLb9_npATjYOpntL0ZsHNaZFSsPmE%3D" alt="motcha " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/20494440/540beaf2445f408ea6597bc61e077bb3/1.png?token-time=2145916800&token-hash=UJ0JQge64Bx9XmN_qYA1inMQhrWf4U91fqz7VAKJeSg%3D" alt="axtuki1 " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13737140/1adf7835017d479280d90fe8d30aade2/1.png?token-time=2145916800&token-hash=0pdle8h5pDZrww0BDOjdz6zO-HudeGTh36a3qi1biVU%3D" alt="Satsuki Yanagi" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/17880724/311738c8a48f4a6b9443c2445a75adde/1.jpg?token-time=2145916800&token-hash=nVAntpybQrznE0rg05keLrSE6ogPKJXB13rmrJng42c%3D" alt="takimura " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/13100201/fc5be4fa90444f09a9c8a06f72385272/1.png?token-time=2145916800&token-hash=i8PjlgfOB2LPEdbtWyx8ZPsBKhGcNZqcw_FQmH71UGU%3D" alt="aqz tamaina" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/9109588/e3cffc48d20a4e43afe04123e696781d/3.png?token-time=2145916800&token-hash=T_VIUA0IFIbleZv4pIjiszZGnQonwn34sLCYFIhakBo%3D" alt="nafuchoco " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/16900731/619ab87cc08448439222631ebb26802f/1.gif?token-time=2145916800&token-hash=o27K7M02s1z-LkDUEO5Oa7cu-GviRXeOXxryi4o_6VU%3D" alt="Atsuko Tominaga" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/4389829/9f709180ac714651a70f74a82f3ffdb9/3.png?token-time=2145916800&token-hash=FTm3WVom4dJ9NwWMU4OpCL_8Yc13WiwEbKrDPyTZTPs%3D" alt="natalie" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/26144593/9514b10a5c1b42a3af58621aee213d1d/1.png?token-time=2145916800&token-hash=v1PYRsjzu4c_mndN4Hvi_dlispZJsuGRCQeNS82pUSM%3D" alt="EBISUME" width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5923936/2a743cbfbff946c2af3f09026047c0da/2.png?token-time=2145916800&token-hash=h6yphW1qnM0n_NOWaf8qtszMRLXEwIxfk5beu4RxdT0%3D" alt="noellabo " width="100"></td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=19356899">sheeta.s </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=5827393">motcha </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=20494440">axtuki1 </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=13737140">Satsuki Yanagi</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/takimura">takimura </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/aqz">aqz tamaina</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=9109588">nafuchoco </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=16900731">Atsuko Tominaga</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=4389829">natalie</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=26144593">EBISUME</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/noellabo">noellabo </a></td>
|
||||||
|
</tr></table>
|
||||||
|
<table><tr>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/2384390/5681180e1efb46a8b28e0e8d4c8b9037/1.jpg?token-time=2145916800&token-hash=SJcMy-Q1BcS940-LFUVOMfR7-5SgrzsEQGhYb3yowFk%3D" alt="CG " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/18072312/98e894d960314fa7bc236a72a39488fe/1.jpg?token-time=2145916800&token-hash=7bkMqTwHPRsJPGAq42PYdDXDZBVGLqdgr1ZmBxX8GFQ%3D" alt="Hekovic " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/24641572/b4fd175424814f15b0ca9178d2d2d2e4/1.png?token-time=2145916800&token-hash=e2fyqdbuJbpCckHcwux7rbuW6OPkKdERcus0u2wIEWU%3D" alt="uroco @99" width="100"></td>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/14661394" alt="Chandler " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/5731881/4b6038e6cda34c04b83a5fcce3806a93/1.png?token-time=2145916800&token-hash=hBayGfOmQH3kRMdNnDe4oCZD_9fsJWSt29xXR3KRMVk%3D" alt="Nokotaro Takeda" width="100"></td>
|
||||||
|
<td><img src="https://c8.patreon.com/2/200/23932002" alt="nenohi " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/9481273/7fa89168e72943859c3d3c96e424ed31/4.jpeg?token-time=2145916800&token-hash=5w1QV1qXe-NdWbdFmp1H7O_-QBsSiV0haumk3XTHIEg%3D" alt="Efertone " width="100"></td>
|
||||||
|
<td><img src="https://c10.patreonusercontent.com/3/eyJ3IjoyMDB9/patreon-media/p/user/12531784/93a45137841849329ba692da92ac7c60/1.jpeg?token-time=2145916800&token-hash=vGe7wXGqmA8Q7m-kDNb6fyGdwk-Dxk4F-ut8ZZu51RM%3D" alt="Takashi Shibuya" width="100"></td>
|
||||||
|
</tr><tr>
|
||||||
|
<td><a href="https://www.patreon.com/Corset">CG </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/hekovic">Hekovic </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=24641572">uroco @99</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=14661394">Chandler </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/takenoko">Nokotaro Takeda</a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=23932002">nenohi </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/efertone">Efertone </a></td>
|
||||||
|
<td><a href="https://www.patreon.com/user?u=12531784">Takashi Shibuya</a></td>
|
||||||
|
</tr></table>
|
||||||
|
|
||||||
|
**Last updated:** Sun, 26 Jul 2020 07:00:10 UTC
|
||||||
|
<!-- PATREON_END -->
|
||||||
|
|
||||||
|
[backer-url]: #backers
|
||||||
|
[backer-badge]: https://opencollective.com/misskey/backers/badge.svg
|
||||||
|
[backers-image]: https://opencollective.com/misskey/backers.svg
|
||||||
|
[sponsor-url]: #sponsors
|
||||||
|
[sponsor-badge]: https://opencollective.com/misskey/sponsors/badge.svg
|
||||||
|
[sponsors-image]: https://opencollective.com/misskey/sponsors.svg
|
||||||
|
[support-url]: https://opencollective.com/misskey#support
|
||||||
|
|
||||||
|
[syuilo-link]: https://syuilo.com
|
||||||
|
[syuilo-icon]: https://avatars2.githubusercontent.com/u/4439005?v=3&s=70
|
||||||
|
|
42
ROADMAP.md
|
@ -1,42 +0,0 @@
|
||||||
# Roadmap
|
|
||||||
The order of individual tasks is a guide only and is subject to change depending on the situation.
|
|
||||||
Also, the later tasks are more indefinite and are subject to change as development progresses.
|
|
||||||
|
|
||||||
## (1) Improve maintainability \<current phase\>
|
|
||||||
This is the phase we are at now. We need to make a high-maintenance environment that can withstand future development.
|
|
||||||
|
|
||||||
- Make the number of type errors zero (backend)
|
|
||||||
- Probably need to switch some libraries to others that make it difficult to reduce type errors
|
|
||||||
- e.g. koa to fastify https://github.com/misskey-dev/misskey/issues/7537
|
|
||||||
- Improve CI
|
|
||||||
- Fix tests
|
|
||||||
- mocha, jest, etc. do not support the combination of `TypeScript + ESM + Path alias`, and the tests currently do not work.
|
|
||||||
- Fix random test failures - https://github.com/misskey-dev/misskey/issues/7985 and https://github.com/misskey-dev/misskey/issues/7986
|
|
||||||
- Add more tests
|
|
||||||
- May need to implement a mechanism that allows for DI
|
|
||||||
- https://github.com/misskey-dev/misskey/pull/9085
|
|
||||||
- Measure coverage
|
|
||||||
- https://github.com/misskey-dev/misskey/pull/9081
|
|
||||||
- Improve documentation
|
|
||||||
- Refactoring
|
|
||||||
- Extract the logic of each endpoint definition into a service and just call it
|
|
||||||
|
|
||||||
## (2) Improve functionality
|
|
||||||
Once Phase 1 is complete and an environment conducive to the development of a stable system is in place, the implementation of new functions can begin gradually.
|
|
||||||
|
|
||||||
- Improve features for moderation
|
|
||||||
- OAuth2 support https://github.com/misskey-dev/misskey/issues/8262
|
|
||||||
- GraphQL support?
|
|
||||||
|
|
||||||
## (3) Improve scalability
|
|
||||||
Once the development of the feature has settled down, this may be an opportunity to make larger modifications.
|
|
||||||
|
|
||||||
- Rewriting in Rust?
|
|
||||||
|
|
||||||
## (4) Change the world
|
|
||||||
It is time to promote Misskey and change the world.
|
|
||||||
|
|
||||||
- Become more major than services such as Twitter and become critical infrastructure for the world
|
|
||||||
- MiOS will be developed and integrated into various systems - What is MiOS?
|
|
||||||
- Letting Ai-chan interfere with the real world
|
|
||||||
- Make Misskey a member of GAFA; Misskey's office must be a reinforced concrete brutalist building with a courtyard.
|
|
|
@ -1,9 +0,0 @@
|
||||||
# Reporting Security Issues
|
|
||||||
|
|
||||||
If you discover a security issue in Misskey, please report it by sending an
|
|
||||||
email to [syuilotan@yahoo.co.jp](mailto:syuilotan@yahoo.co.jp).
|
|
||||||
|
|
||||||
This will allow us to assess the risk, and make a fix available before we add a
|
|
||||||
bug report to the GitHub repository.
|
|
||||||
|
|
||||||
Thanks for helping make Misskey safe for everyone.
|
|
Before Width: | Height: | Size: 5.4 KiB After Width: | Height: | Size: 5.4 KiB |
BIN
assets/apple-touch-icon.png
Normal file
After Width: | Height: | Size: 9.3 KiB |
BIN
assets/favicon.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
27
assets/icon.svg
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
|
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||||
|
<svg width="100%" height="100%" viewBox="0 0 256 256" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;">
|
||||||
|
<g transform="matrix(0.413372,0,0,0.469741,64.564,40.5821)">
|
||||||
|
<rect x="-156.189" y="-86.393" width="619.297" height="544.981" style="fill:rgb(27,30,31);"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.898356,0,0,0.898356,-130.722,-120.968)">
|
||||||
|
<g transform="matrix(0.5,0.866025,-0.866025,0.5,288,-166.277)">
|
||||||
|
<path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653Z" style="fill:white;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1,0,0,1,-96,166.277)">
|
||||||
|
<path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653Z" style="fill:white;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.5,-0.866025,0.866025,0.5,-96,498.831)">
|
||||||
|
<path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653Z" style="fill:white;"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(1,0,0,1,-95.9902,55.4086)">
|
||||||
|
<path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653ZM385.681,139.653C385.332,139.049 384.688,138.677 383.99,138.677C383.293,138.677 382.648,139.049 382.299,139.653C378.289,146.599 373.342,155.168 369.8,161.303C368.017,164.391 368.017,168.196 369.8,171.285C373.339,177.414 378.28,185.972 382.288,192.915C382.639,193.523 383.288,193.898 383.99,193.898C384.692,193.898 385.341,193.523 385.692,192.915C389.701,185.972 394.642,177.414 398.181,171.284C399.964,168.196 399.964,164.391 398.181,161.303L385.681,139.653Z" style="fill:rgb(150,208,74);"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.5,-0.866025,0.866025,0.5,-2.64322e-11,554.256)">
|
||||||
|
<path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653ZM385.681,139.653C385.332,139.049 384.688,138.677 383.99,138.677C383.293,138.677 382.648,139.049 382.299,139.653C378.289,146.599 373.342,155.168 369.8,161.303C368.017,164.391 368.017,168.196 369.8,171.285C373.339,177.414 378.28,185.972 382.288,192.915C382.639,193.523 383.288,193.898 383.99,193.898C384.692,193.898 385.341,193.523 385.692,192.915C389.701,185.972 394.642,177.414 398.181,171.284C399.964,168.196 399.964,164.391 398.181,161.303L385.681,139.653Z" style="fill:rgb(150,208,74);"/>
|
||||||
|
</g>
|
||||||
|
<g transform="matrix(0.5,0.866025,-0.866025,0.5,192,-110.851)">
|
||||||
|
<path d="M390.877,136.653C389.457,134.193 386.831,132.677 383.99,132.677C381.149,132.677 378.524,134.193 377.103,136.653C373.093,143.599 368.146,152.168 364.604,158.303C361.749,163.248 361.749,169.34 364.604,174.285C368.142,180.414 373.084,188.972 377.092,195.915C378.515,198.379 381.144,199.898 383.99,199.898C386.836,199.898 389.466,198.379 390.889,195.915C394.897,188.972 399.838,180.414 403.377,174.284C406.232,169.34 406.232,163.248 403.377,158.303C399.835,152.168 394.888,143.599 390.877,136.653ZM385.681,139.653C385.332,139.049 384.688,138.677 383.99,138.677C383.293,138.677 382.648,139.049 382.299,139.653C378.289,146.599 373.342,155.168 369.8,161.303C368.017,164.391 368.017,168.196 369.8,171.285C373.339,177.414 378.28,185.972 382.288,192.915C382.639,193.523 383.288,193.898 383.99,193.898C384.692,193.898 385.341,193.523 385.692,192.915C389.701,185.972 394.642,177.414 398.181,171.284C399.964,168.196 399.964,164.391 398.181,161.303L385.681,139.653Z" style="fill:rgb(150,208,74);"/>
|
||||||
|
</g>
|
||||||
|
</g>
|
||||||
|
</svg>
|
After Width: | Height: | Size: 5.7 KiB |
BIN
assets/icons/192.png
Normal file
After Width: | Height: | Size: 7.2 KiB |
BIN
assets/icons/512.png
Normal file
After Width: | Height: | Size: 18 KiB |
|
@ -1,67 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
||||||
<svg
|
|
||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
|
||||||
id="svg10"
|
|
||||||
version="1.1"
|
|
||||||
viewBox="0 0 162.642 54.261"
|
|
||||||
height="205.08"
|
|
||||||
width="614.71">
|
|
||||||
<metadata
|
|
||||||
id="metadata16">
|
|
||||||
<rdf:RDF>
|
|
||||||
<cc:Work
|
|
||||||
rdf:about="">
|
|
||||||
<dc:format>image/svg+xml</dc:format>
|
|
||||||
<dc:type
|
|
||||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
||||||
<dc:title></dc:title>
|
|
||||||
</cc:Work>
|
|
||||||
</rdf:RDF>
|
|
||||||
</metadata>
|
|
||||||
<style>
|
|
||||||
#g8 {
|
|
||||||
animation-name: floating;
|
|
||||||
animation-duration: 3s;
|
|
||||||
animation-iteration-count: infinite;
|
|
||||||
animation-timing-function: ease-in-out;
|
|
||||||
}
|
|
||||||
|
|
||||||
@keyframes floating {
|
|
||||||
0% { transform: translate(0, 0px); }
|
|
||||||
50% { transform: translate(0, -5px); }
|
|
||||||
100% { transform: translate(0, 0px); }
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
<linearGradient id="myGradient" gradientTransform="rotate(90)">
|
|
||||||
<stop offset="5%" stop-color="#A1CA03" />
|
|
||||||
<stop offset="95%" stop-color="#91BA03" />
|
|
||||||
</linearGradient>
|
|
||||||
<defs
|
|
||||||
id="defs14" />
|
|
||||||
<g
|
|
||||||
id="g8"
|
|
||||||
fill="url('#myGradient')"
|
|
||||||
word-spacing="0"
|
|
||||||
letter-spacing="0"
|
|
||||||
font-family="OTADESIGN Rounded"
|
|
||||||
font-weight="400">
|
|
||||||
<g
|
|
||||||
id="g4"
|
|
||||||
style="line-height:476.69509888px;-inkscape-font-specification:'OTADESIGN Rounded'">
|
|
||||||
<path
|
|
||||||
id="path2"
|
|
||||||
font-size="141.034"
|
|
||||||
aria-label="Mi"
|
|
||||||
d="m 27.595,34.59 c -1.676,0.006 -3.115,-1.004 -3.793,-2.179 -0.363,-0.513 -1.08,-0.696 -1.09,0 v 3.214 c 0,1.291 -0.47,2.408 -1.412,3.35 -0.915,0.914 -2.031,1.371 -3.35,1.371 -1.29,0 -2.407,-0.457 -3.349,-1.372 -0.914,-0.941 -1.372,-2.058 -1.372,-3.349 V 17.95 c 0,-0.995 0.283,-1.896 0.848,-2.703 0.591,-0.834 1.345,-1.413 2.26,-1.735 0.516591,-0.189385 1.062793,-0.285215 1.613,-0.283 1.453,0 2.664,0.565 3.632,1.695 l 4.832,5.608 c 0.108,0.08 0.424,0.697 1.18,0.697 0.758,0 1.115,-0.617 1.222,-0.698 l 4.791,-5.607 c 0.996,-1.13 2.22,-1.695 3.673,-1.695 0.538,0 1.076,0.094 1.614,0.283 0.914,0.322 1.654,0.9 2.22,1.735 0.591,0.807 0.887,1.708 0.887,2.703 v 17.675 c 0,1.291 -0.47,2.408 -1.412,3.35 -0.915,0.914 -2.032,1.371 -3.35,1.371 -1.291,0 -2.407,-0.457 -3.35,-1.372 -0.914,-0.941 -1.371,-2.058 -1.371,-3.349 v -3.214 c -0.08,-0.877 -0.855,-0.324 -1.13,0 -0.726,1.345 -2.118,2.173 -3.793,2.18 z M 47.806,21.38 c -1.13,0 -2.098333,-0.39 -2.905,-1.17 -0.78,-0.806667 -1.17,-1.775 -1.17,-2.905 0,-1.13 0.39,-2.085 1.17,-2.865 0.806667,-0.806667 1.775,-1.21 2.905,-1.21 1.13,0 2.098667,0.403333 2.906,1.21 0.806667,0.78 1.21,1.735 1.21,2.865 0,1.13 -0.403333,2.098333 -1.21,2.905 -0.807333,0.78 -1.776,1.17 -2.906,1.17 z m 0.04,0.808 c 1.13,0 2.085333,0.403333 2.866,1.21 0.806667,0.806667 1.21,1.775333 1.21,2.906 v 9.967 c 0,1.13 -0.403333,2.098333 -1.21,2.905 -0.78,0.78 -1.735333,1.17 -2.866,1.17 -1.129333,0 -2.097667,-0.39 -2.905,-1.17 -0.806667,-0.806667 -1.21,-1.775 -1.21,-2.905 v -9.967 c 0,-1.13 0.403333,-2.098667 1.21,-2.906 0.806667,-0.806667 1.775,-1.21 2.905,-1.21 z"
|
|
||||||
style="font-size:141.03399658px;-inkscape-font-specification:'OTADESIGN Rounded'" />
|
|
||||||
</g>
|
|
||||||
<path
|
|
||||||
id="path6"
|
|
||||||
d="M60.925 27.24q.968.243 2.42.525 2.42.403 3.792 1.29 2.582 1.695 2.582 5.083 0 2.743-1.815 4.478-2.098 2.017-5.85 2.017-2.742 0-6.13-.767-1.09-.242-1.776-1.089-.645-.847-.645-1.896 0-1.29.887-2.178.928-.928 2.179-.928.363 0 .685.081 1.17.242 4.478.605.444 0 .968-.04.202 0 .202-.242.04-.202-.242-.283-1.372-.242-2.542-.524-1.33-.282-1.896-.484-1.129-.323-1.895-.847-2.582-1.694-2.622-5.083 0-2.702 1.855-4.477 2.26-2.179 6.414-1.977 2.783.121 5.567.726 1.048.242 1.734 1.09.686.846.686 1.936 0 1.25-.928 2.178-.887.887-2.178.887-.323 0-.645-.08-1.17-.242-4.518-.565-.404-.04-.767 0-.323.04-.323.242.04.242.323.323zm17.555 0q.968.243 2.42.525 2.42.403 3.792 1.29 2.581 1.695 2.581 5.083 0 2.743-1.815 4.478-2.098 2.017-5.849 2.017-2.743 0-6.131-.767-1.09-.242-1.775-1.089-.646-.847-.646-1.896 0-1.29.888-2.178.927-.928 2.178-.928.363 0 .686.081 1.17.242 4.477.605.444 0 .968-.04.202 0 .202-.242.04-.202-.242-.283-1.371-.242-2.541-.524-1.331-.282-1.896-.484-1.13-.323-1.896-.847-2.582-1.694-2.622-5.083 0-2.702 1.855-4.477 2.26-2.179 6.414-1.977 2.784.121 5.567.726 1.049.242 1.735 1.09.685.846.685 1.936 0 1.25-.927 2.178-.888.887-2.179.887-.322 0-.645-.08-1.17-.242-4.518-.565-.403-.04-.767 0-.322.04-.322.242.04.242.322.323zm26.075 3.335q.12.08 2.864 2.783 1.25 1.21 1.25 2.945 0 1.613-1.17 2.864-1.17 1.21-2.904 1.21-1.654 0-2.864-1.17l-4.034-3.913q-.161-.12-.323-.12-.322 0-.322 1.21 0 1.694-1.21 2.904-1.21 1.17-2.905 1.17-1.694 0-2.904-1.17-1.17-1.21-1.17-2.905V17.586q0-1.694 1.17-2.864 1.21-1.21 2.904-1.21t2.904 1.21q1.21 1.17 1.21 2.864v6.293q0 .403.283.524.242.121.524-.08.162-.081 4.841-3.188 1.049-.645 2.259-.645 2.219 0 3.429 1.815.645 1.05.645 2.26 0 2.218-1.815 3.428l-2.541 1.614v.04l-.081.04q-.565.363-.04.888zm15.599 10.058q-4.195 0-7.18-2.945-2.945-2.985-2.945-7.18 0-4.155 2.945-7.1 2.985-2.985 7.18-2.985 4.155 0 6.979 2.784.928.927.928 2.259 0 1.33-.928 2.259l-4.68 4.639q-1.008 1.008-2.016 1.008-1.453 0-2.26-.807-.806-.807-.806-2.138 0-1.29.928-2.218l.806-.847q.162-.121.081-.243-.12-.08-.323-.04-.806.202-1.371.807-1.13 1.09-1.13 2.622 0 1.573 1.09 2.703 1.13 1.089 2.702 1.089 1.533 0 2.622-1.13.928-.927 2.26-.927 1.33 0 2.258.927.928.928.928 2.26 0 1.33-.928 2.258-2.985 2.945-7.14 2.945zm29.259-15.786v5.607q0 .564-.08 1.21v7.382q0 4.518-2.744 7.22-2.702 2.703-7.301 2.703-2.662 0-4.8-1.008-2.138-.968-2.138-3.348 0-.807.363-1.533.968-2.179 3.348-2.179.565 0 1.573.323 1.009.323 1.654.323 1.694 0 2.219-.726.201-.283.08-.444-.161-.242-.564-.161-.686.12-1.493.12-4.074 0-6.979-2.904-2.904-2.904-2.904-6.978v-5.607q0-1.695 1.17-2.864 1.21-1.21 2.904-1.21t2.905 1.21q1.21 1.17 1.21 2.864v5.607q0 .685.484 1.21.524.484 1.21.484.726 0 1.21-.484.484-.525.484-1.21v-5.607q0-1.695 1.21-2.864 1.21-1.21 2.905-1.21 1.694 0 2.864 1.21 1.21 1.17 1.21 2.864z"
|
|
||||||
style="line-height:136.34428406px;-inkscape-font-specification:'OTADESIGN Rounded'" />
|
|
||||||
</g>
|
|
||||||
</svg>
|
|
Before Width: | Height: | Size: 6.1 KiB |
|
@ -1,3 +0,0 @@
|
||||||
apiVersion: v2
|
|
||||||
name: misskey
|
|
||||||
version: 0.0.0
|
|
|
@ -1,165 +0,0 @@
|
||||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
||||||
# Misskey configuration
|
|
||||||
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
||||||
|
|
||||||
# ┌─────┐
|
|
||||||
#───┘ URL └─────────────────────────────────────────────────────
|
|
||||||
|
|
||||||
# Final accessible URL seen by a user.
|
|
||||||
# url: https://example.tld/
|
|
||||||
|
|
||||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
|
||||||
# URL SETTINGS AFTER THAT!
|
|
||||||
|
|
||||||
# ┌───────────────────────┐
|
|
||||||
#───┘ Port and TLS settings └───────────────────────────────────
|
|
||||||
|
|
||||||
#
|
|
||||||
# Misskey supports two deployment options for public.
|
|
||||||
#
|
|
||||||
|
|
||||||
# Option 1: With Reverse Proxy
|
|
||||||
#
|
|
||||||
# +----- https://example.tld/ ------------+
|
|
||||||
# +------+ |+-------------+ +----------------+|
|
|
||||||
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
|
|
||||||
# +------+ |+-------------+ +----------------+|
|
|
||||||
# +---------------------------------------+
|
|
||||||
#
|
|
||||||
# You need to setup reverse proxy. (eg. nginx)
|
|
||||||
# You do not define 'https' section.
|
|
||||||
|
|
||||||
# Option 2: Standalone
|
|
||||||
#
|
|
||||||
# +- https://example.tld/ -+
|
|
||||||
# +------+ | +---------------+ |
|
|
||||||
# | User | ---> | | Misskey (443) | |
|
|
||||||
# +------+ | +---------------+ |
|
|
||||||
# +------------------------+
|
|
||||||
#
|
|
||||||
# You need to run Misskey as root.
|
|
||||||
# You need to set Certificate in 'https' section.
|
|
||||||
|
|
||||||
# To use option 1, uncomment below line.
|
|
||||||
port: 3000 # A port that your Misskey server should listen.
|
|
||||||
|
|
||||||
# To use option 2, uncomment below lines.
|
|
||||||
#port: 443
|
|
||||||
|
|
||||||
#https:
|
|
||||||
# # path for certification
|
|
||||||
# key: /etc/letsencrypt/live/example.tld/privkey.pem
|
|
||||||
# cert: /etc/letsencrypt/live/example.tld/fullchain.pem
|
|
||||||
|
|
||||||
# ┌──────────────────────────┐
|
|
||||||
#───┘ PostgreSQL configuration └────────────────────────────────
|
|
||||||
|
|
||||||
db:
|
|
||||||
host: localhost
|
|
||||||
port: 5432
|
|
||||||
|
|
||||||
# Database name
|
|
||||||
db: misskey
|
|
||||||
|
|
||||||
# Auth
|
|
||||||
user: example-misskey-user
|
|
||||||
pass: example-misskey-pass
|
|
||||||
|
|
||||||
# Whether disable Caching queries
|
|
||||||
#disableCache: true
|
|
||||||
|
|
||||||
# Extra Connection options
|
|
||||||
#extra:
|
|
||||||
# ssl: true
|
|
||||||
|
|
||||||
# ┌─────────────────────┐
|
|
||||||
#───┘ Redis configuration └─────────────────────────────────────
|
|
||||||
|
|
||||||
redis:
|
|
||||||
host: localhost
|
|
||||||
port: 6379
|
|
||||||
#pass: example-pass
|
|
||||||
#prefix: example-prefix
|
|
||||||
#db: 1
|
|
||||||
|
|
||||||
# ┌─────────────────────────────┐
|
|
||||||
#───┘ Elasticsearch configuration └─────────────────────────────
|
|
||||||
|
|
||||||
#elasticsearch:
|
|
||||||
# host: localhost
|
|
||||||
# port: 9200
|
|
||||||
# ssl: false
|
|
||||||
# user:
|
|
||||||
# pass:
|
|
||||||
|
|
||||||
# ┌───────────────┐
|
|
||||||
#───┘ ID generation └───────────────────────────────────────────
|
|
||||||
|
|
||||||
# You can select the ID generation method.
|
|
||||||
# You don't usually need to change this setting, but you can
|
|
||||||
# change it according to your preferences.
|
|
||||||
|
|
||||||
# Available methods:
|
|
||||||
# aid ... Short, Millisecond accuracy
|
|
||||||
# meid ... Similar to ObjectID, Millisecond accuracy
|
|
||||||
# ulid ... Millisecond accuracy
|
|
||||||
# objectid ... This is left for backward compatibility
|
|
||||||
|
|
||||||
# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
|
|
||||||
# ID SETTINGS AFTER THAT!
|
|
||||||
|
|
||||||
id: "aid"
|
|
||||||
# ┌─────────────────────┐
|
|
||||||
#───┘ Other configuration └─────────────────────────────────────
|
|
||||||
|
|
||||||
# Whether disable HSTS
|
|
||||||
#disableHsts: true
|
|
||||||
|
|
||||||
# Number of worker processes
|
|
||||||
#clusterLimit: 1
|
|
||||||
|
|
||||||
# Job concurrency per worker
|
|
||||||
# deliverJobConcurrency: 128
|
|
||||||
# inboxJobConcurrency: 16
|
|
||||||
|
|
||||||
# Job rate limiter
|
|
||||||
# deliverJobPerSec: 128
|
|
||||||
# inboxJobPerSec: 16
|
|
||||||
|
|
||||||
# Job attempts
|
|
||||||
# deliverJobMaxAttempts: 12
|
|
||||||
# inboxJobMaxAttempts: 8
|
|
||||||
|
|
||||||
# IP address family used for outgoing request (ipv4, ipv6 or dual)
|
|
||||||
#outgoingAddressFamily: ipv4
|
|
||||||
|
|
||||||
# Syslog option
|
|
||||||
#syslog:
|
|
||||||
# host: localhost
|
|
||||||
# port: 514
|
|
||||||
|
|
||||||
# Proxy for HTTP/HTTPS
|
|
||||||
#proxy: http://127.0.0.1:3128
|
|
||||||
|
|
||||||
#proxyBypassHosts: [
|
|
||||||
# 'example.com',
|
|
||||||
# '192.0.2.8'
|
|
||||||
#]
|
|
||||||
|
|
||||||
# Proxy for SMTP/SMTPS
|
|
||||||
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
|
|
||||||
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
|
|
||||||
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5
|
|
||||||
|
|
||||||
# Media Proxy
|
|
||||||
#mediaProxy: https://example.com/proxy
|
|
||||||
|
|
||||||
# Sign to ActivityPub GET request (default: false)
|
|
||||||
#signToActivityPubGet: true
|
|
||||||
|
|
||||||
#allowedPrivateNetworks: [
|
|
||||||
# '127.0.0.1/32'
|
|
||||||
#]
|
|
||||||
|
|
||||||
# Upload or download file size limits (bytes)
|
|
||||||
#maxFileSize: 262144000
|
|
|
@ -1,8 +0,0 @@
|
||||||
apiVersion: v1
|
|
||||||
kind: ConfigMap
|
|
||||||
metadata:
|
|
||||||
name: {{ include "misskey.fullname" . }}-configuration
|
|
||||||
data:
|
|
||||||
default.yml: |-
|
|
||||||
{{ .Files.Get "files/default.yml"|nindent 4 }}
|
|
||||||
url: {{ .Values.url }}
|
|
|
@ -1,47 +0,0 @@
|
||||||
apiVersion: apps/v1
|
|
||||||
kind: Deployment
|
|
||||||
metadata:
|
|
||||||
name: {{ include "misskey.fullname" . }}
|
|
||||||
labels:
|
|
||||||
{{- include "misskey.labels" . | nindent 4 }}
|
|
||||||
spec:
|
|
||||||
selector:
|
|
||||||
matchLabels:
|
|
||||||
{{- include "misskey.selectorLabels" . | nindent 6 }}
|
|
||||||
replicas: 1
|
|
||||||
template:
|
|
||||||
metadata:
|
|
||||||
labels:
|
|
||||||
{{- include "misskey.selectorLabels" . | nindent 8 }}
|
|
||||||
spec:
|
|
||||||
containers:
|
|
||||||
- name: misskey
|
|
||||||
image: {{ .Values.image }}
|
|
||||||
env:
|
|
||||||
- name: NODE_ENV
|
|
||||||
value: {{ .Values.environment }}
|
|
||||||
volumeMounts:
|
|
||||||
- name: {{ include "misskey.fullname" . }}-configuration
|
|
||||||
mountPath: /misskey/.config
|
|
||||||
readOnly: true
|
|
||||||
ports:
|
|
||||||
- containerPort: 3000
|
|
||||||
- name: postgres
|
|
||||||
image: postgres:14-alpine
|
|
||||||
env:
|
|
||||||
- name: POSTGRES_USER
|
|
||||||
value: "example-misskey-user"
|
|
||||||
- name: POSTGRES_PASSWORD
|
|
||||||
value: "example-misskey-pass"
|
|
||||||
- name: POSTGRES_DB
|
|
||||||
value: "misskey"
|
|
||||||
ports:
|
|
||||||
- containerPort: 5432
|
|
||||||
- name: redis
|
|
||||||
image: redis:alpine
|
|
||||||
ports:
|
|
||||||
- containerPort: 6379
|
|
||||||
volumes:
|
|
||||||
- name: {{ include "misskey.fullname" . }}-configuration
|
|
||||||
configMap:
|
|
||||||
name: {{ include "misskey.fullname" . }}-configuration
|
|
|
@ -1,14 +0,0 @@
|
||||||
apiVersion: v1
|
|
||||||
kind: Service
|
|
||||||
metadata:
|
|
||||||
name: {{ include "misskey.fullname" . }}
|
|
||||||
annotations:
|
|
||||||
dev.okteto.com/auto-ingress: "true"
|
|
||||||
spec:
|
|
||||||
type: ClusterIP
|
|
||||||
ports:
|
|
||||||
- port: 3000
|
|
||||||
protocol: TCP
|
|
||||||
name: http
|
|
||||||
selector:
|
|
||||||
{{- include "misskey.selectorLabels" . | nindent 4 }}
|
|
|
@ -1,62 +0,0 @@
|
||||||
{{/*
|
|
||||||
Expand the name of the chart.
|
|
||||||
*/}}
|
|
||||||
{{- define "misskey.name" -}}
|
|
||||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create a default fully qualified app name.
|
|
||||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
|
||||||
If release name contains chart name it will be used as a full name.
|
|
||||||
*/}}
|
|
||||||
{{- define "misskey.fullname" -}}
|
|
||||||
{{- if .Values.fullnameOverride }}
|
|
||||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
|
|
||||||
{{- else }}
|
|
||||||
{{- $name := default .Chart.Name .Values.nameOverride }}
|
|
||||||
{{- if contains $name .Release.Name }}
|
|
||||||
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
|
|
||||||
{{- else }}
|
|
||||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create chart name and version as used by the chart label.
|
|
||||||
*/}}
|
|
||||||
{{- define "misskey.chart" -}}
|
|
||||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Common labels
|
|
||||||
*/}}
|
|
||||||
{{- define "misskey.labels" -}}
|
|
||||||
helm.sh/chart: {{ include "misskey.chart" . }}
|
|
||||||
{{ include "misskey.selectorLabels" . }}
|
|
||||||
{{- if .Chart.AppVersion }}
|
|
||||||
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
|
|
||||||
{{- end }}
|
|
||||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Selector labels
|
|
||||||
*/}}
|
|
||||||
{{- define "misskey.selectorLabels" -}}
|
|
||||||
app.kubernetes.io/name: {{ include "misskey.name" . }}
|
|
||||||
app.kubernetes.io/instance: {{ .Release.Name }}
|
|
||||||
{{- end }}
|
|
||||||
|
|
||||||
{{/*
|
|
||||||
Create the name of the service account to use
|
|
||||||
*/}}
|
|
||||||
{{- define "misskey.serviceAccountName" -}}
|
|
||||||
{{- if .Values.serviceAccount.create }}
|
|
||||||
{{- default (include "misskey.fullname" .) .Values.serviceAccount.name }}
|
|
||||||
{{- else }}
|
|
||||||
{{- default "default" .Values.serviceAccount.name }}
|
|
||||||
{{- end }}
|
|
||||||
{{- end }}
|
|
|
@ -1,3 +0,0 @@
|
||||||
url: https://example.tld/
|
|
||||||
image: okteto.dev/misskey
|
|
||||||
environment: production
|
|
|
@ -1,4 +1,3 @@
|
||||||
files:
|
files:
|
||||||
- source: /locales/ja-JP.yml
|
- source: /locales/ja-JP.yml
|
||||||
translation: /locales/%locale%.yml
|
translation: /locales/%locale%.yml
|
||||||
update_option: update_as_unapproved
|
|
||||||
|
|
|
@ -1,12 +0,0 @@
|
||||||
import { defineConfig } from 'cypress'
|
|
||||||
|
|
||||||
export default defineConfig({
|
|
||||||
e2e: {
|
|
||||||
// We've imported your old cypress plugins here.
|
|
||||||
// You may want to clean this up later by importing these.
|
|
||||||
setupNodeEvents(on, config) {
|
|
||||||
return require('./cypress/plugins/index.js')(on, config)
|
|
||||||
},
|
|
||||||
baseUrl: 'http://localhost:61812',
|
|
||||||
},
|
|
||||||
})
|
|
|
@ -1,149 +0,0 @@
|
||||||
describe('Before setup instance', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
cy.resetState();
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
|
|
||||||
// waitを入れることでそれを防止できる
|
|
||||||
cy.wait(1000);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('successfully loads', () => {
|
|
||||||
cy.visit('/');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('setup instance', () => {
|
|
||||||
cy.visit('/');
|
|
||||||
|
|
||||||
cy.intercept('POST', '/api/admin/accounts/create').as('signup');
|
|
||||||
|
|
||||||
cy.get('[data-cy-admin-username] input').type('admin');
|
|
||||||
cy.get('[data-cy-admin-password] input').type('admin1234');
|
|
||||||
cy.get('[data-cy-admin-ok]').click();
|
|
||||||
|
|
||||||
// なぜか動かない
|
|
||||||
//cy.wait('@signup').should('have.property', 'response.statusCode');
|
|
||||||
cy.wait('@signup');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('After setup instance', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
cy.resetState();
|
|
||||||
|
|
||||||
// インスタンス初期セットアップ
|
|
||||||
cy.registerUser('admin', 'pass', true);
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
|
|
||||||
// waitを入れることでそれを防止できる
|
|
||||||
cy.wait(1000);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('successfully loads', () => {
|
|
||||||
cy.visit('/');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('signup', () => {
|
|
||||||
cy.visit('/');
|
|
||||||
|
|
||||||
cy.intercept('POST', '/api/signup').as('signup');
|
|
||||||
|
|
||||||
cy.get('[data-cy-signup]').click();
|
|
||||||
cy.get('[data-cy-signup-username] input').type('alice');
|
|
||||||
cy.get('[data-cy-signup-password] input').type('alice1234');
|
|
||||||
cy.get('[data-cy-signup-password-retype] input').type('alice1234');
|
|
||||||
cy.get('[data-cy-signup-submit]').click();
|
|
||||||
|
|
||||||
cy.wait('@signup');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('After user signup', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
cy.resetState();
|
|
||||||
|
|
||||||
// インスタンス初期セットアップ
|
|
||||||
cy.registerUser('admin', 'pass', true);
|
|
||||||
|
|
||||||
// ユーザー作成
|
|
||||||
cy.registerUser('alice', 'alice1234');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
|
|
||||||
// waitを入れることでそれを防止できる
|
|
||||||
cy.wait(1000);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('successfully loads', () => {
|
|
||||||
cy.visit('/');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('signin', () => {
|
|
||||||
cy.visit('/');
|
|
||||||
|
|
||||||
cy.intercept('POST', '/api/signin').as('signin');
|
|
||||||
|
|
||||||
cy.get('[data-cy-signin]').click();
|
|
||||||
cy.get('[data-cy-signin-username] input').type('alice');
|
|
||||||
// Enterキーでサインインできるかの確認も兼ねる
|
|
||||||
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
|
|
||||||
|
|
||||||
cy.wait('@signin');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('suspend', function() {
|
|
||||||
cy.request('POST', '/api/admin/suspend-user', {
|
|
||||||
i: this.admin.token,
|
|
||||||
userId: this.alice.id,
|
|
||||||
});
|
|
||||||
|
|
||||||
cy.visit('/');
|
|
||||||
|
|
||||||
cy.get('[data-cy-signin]').click();
|
|
||||||
cy.get('[data-cy-signin-username] input').type('alice');
|
|
||||||
cy.get('[data-cy-signin-password] input').type('alice1234{enter}');
|
|
||||||
|
|
||||||
// TODO: cypressにブラウザの言語指定できる機能が実装され次第英語のみテストするようにする
|
|
||||||
cy.contains(/アカウントが凍結されています|This account has been suspended due to/gi);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
describe('After user singed in', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
cy.resetState();
|
|
||||||
|
|
||||||
// インスタンス初期セットアップ
|
|
||||||
cy.registerUser('admin', 'pass', true);
|
|
||||||
|
|
||||||
// ユーザー作成
|
|
||||||
cy.registerUser('alice', 'alice1234');
|
|
||||||
|
|
||||||
cy.login('alice', 'alice1234');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
|
|
||||||
// waitを入れることでそれを防止できる
|
|
||||||
cy.wait(1000);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('successfully loads', () => {
|
|
||||||
cy.get('[data-cy-open-post-form]').should('be.visible');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('note', () => {
|
|
||||||
cy.get('[data-cy-open-post-form]').click();
|
|
||||||
cy.get('[data-cy-post-form-text]').type('Hello, Misskey!');
|
|
||||||
cy.get('[data-cy-open-post-form-submit]').click();
|
|
||||||
|
|
||||||
cy.contains('Hello, Misskey!');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
// TODO: 投稿フォームの公開範囲指定のテスト
|
|
||||||
// TODO: 投稿フォームのファイル添付のテスト
|
|
||||||
// TODO: 投稿フォームのハッシュタグ保持フィールドのテスト
|
|
|
@ -1,65 +0,0 @@
|
||||||
describe('After user signed in', () => {
|
|
||||||
beforeEach(() => {
|
|
||||||
cy.resetState();
|
|
||||||
cy.viewport('macbook-16');
|
|
||||||
|
|
||||||
// インスタンス初期セットアップ
|
|
||||||
cy.registerUser('admin', 'pass', true);
|
|
||||||
|
|
||||||
// ユーザー作成
|
|
||||||
cy.registerUser('alice', 'alice1234');
|
|
||||||
|
|
||||||
cy.login('alice', 'alice1234');
|
|
||||||
});
|
|
||||||
|
|
||||||
afterEach(() => {
|
|
||||||
// テスト終了直前にページ遷移するようなテストケース(例えばアカウント作成)だと、たぶんCypressのバグでブラウザの内容が次のテストケースに引き継がれてしまう(例えばアカウントが作成し終わった段階からテストが始まる)。
|
|
||||||
// waitを入れることでそれを防止できる
|
|
||||||
cy.wait(1000);
|
|
||||||
});
|
|
||||||
|
|
||||||
it('widget edit toggle is visible', () => {
|
|
||||||
cy.get('.mk-widget-edit').should('be.visible');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('widget select should be visible in edit mode', () => {
|
|
||||||
cy.get('.mk-widget-edit').click();
|
|
||||||
cy.get('.mk-widget-select').should('be.visible');
|
|
||||||
});
|
|
||||||
|
|
||||||
it('first widget should be removed', () => {
|
|
||||||
cy.get('.mk-widget-edit').click();
|
|
||||||
cy.get('.customize-container:first-child .remove._button').click();
|
|
||||||
cy.get('.customize-container').should('have.length', 2);
|
|
||||||
});
|
|
||||||
|
|
||||||
function buildWidgetTest(widgetName) {
|
|
||||||
it(`${widgetName} widget should get added`, () => {
|
|
||||||
cy.get('.mk-widget-edit').click();
|
|
||||||
cy.get('.mk-widget-select select').select(widgetName, { force: true });
|
|
||||||
cy.get('.bg._modalBg.transparent').click({ multiple: true, force: true });
|
|
||||||
cy.get('.mk-widget-add').click({ force: true });
|
|
||||||
cy.get(`.mkw-${widgetName}`).should('exist');
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
buildWidgetTest('memo');
|
|
||||||
buildWidgetTest('notifications');
|
|
||||||
buildWidgetTest('timeline');
|
|
||||||
buildWidgetTest('calendar');
|
|
||||||
buildWidgetTest('rss');
|
|
||||||
buildWidgetTest('trends');
|
|
||||||
buildWidgetTest('clock');
|
|
||||||
buildWidgetTest('activity');
|
|
||||||
buildWidgetTest('photos');
|
|
||||||
buildWidgetTest('digitalClock');
|
|
||||||
buildWidgetTest('federation');
|
|
||||||
buildWidgetTest('postForm');
|
|
||||||
buildWidgetTest('slideshow');
|
|
||||||
buildWidgetTest('serverMetric');
|
|
||||||
buildWidgetTest('onlineUsers');
|
|
||||||
buildWidgetTest('jobQueue');
|
|
||||||
buildWidgetTest('button');
|
|
||||||
buildWidgetTest('aiscript');
|
|
||||||
buildWidgetTest('aichan');
|
|
||||||
});
|
|
|
@ -1,5 +0,0 @@
|
||||||
{
|
|
||||||
"name": "Using fixtures to represent data",
|
|
||||||
"email": "hello@cypress.io",
|
|
||||||
"body": "Fixtures are a great way to mock data for responses to routes"
|
|
||||||
}
|
|
|
@ -1,22 +0,0 @@
|
||||||
/// <reference types="cypress" />
|
|
||||||
// ***********************************************************
|
|
||||||
// This example plugins/index.js can be used to load plugins
|
|
||||||
//
|
|
||||||
// You can change the location of this file or turn off loading
|
|
||||||
// the plugins file with the 'pluginsFile' configuration option.
|
|
||||||
//
|
|
||||||
// You can read more here:
|
|
||||||
// https://on.cypress.io/plugins-guide
|
|
||||||
// ***********************************************************
|
|
||||||
|
|
||||||
// This function is called when a project is opened or re-opened (e.g. due to
|
|
||||||
// the project's config changing)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @type {Cypress.PluginConfig}
|
|
||||||
*/
|
|
||||||
// eslint-disable-next-line no-unused-vars
|
|
||||||
module.exports = (on, config) => {
|
|
||||||
// `on` is used to hook into various events Cypress emits
|
|
||||||
// `config` is the resolved Cypress config
|
|
||||||
}
|
|
|
@ -1,55 +0,0 @@
|
||||||
// ***********************************************
|
|
||||||
// This example commands.js shows you how to
|
|
||||||
// create various custom commands and overwrite
|
|
||||||
// existing commands.
|
|
||||||
//
|
|
||||||
// For more comprehensive examples of custom
|
|
||||||
// commands please read more here:
|
|
||||||
// https://on.cypress.io/custom-commands
|
|
||||||
// ***********************************************
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// -- This is a parent command --
|
|
||||||
// Cypress.Commands.add('login', (email, password) => { ... })
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// -- This is a child command --
|
|
||||||
// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... })
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// -- This is a dual command --
|
|
||||||
// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... })
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// -- This will overwrite an existing command --
|
|
||||||
// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... })
|
|
||||||
|
|
||||||
Cypress.Commands.add('resetState', () => {
|
|
||||||
cy.window(win => {
|
|
||||||
win.indexedDB.deleteDatabase('keyval-store');
|
|
||||||
});
|
|
||||||
cy.request('POST', '/api/reset-db').as('reset');
|
|
||||||
cy.get('@reset').its('status').should('equal', 204);
|
|
||||||
cy.reload(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
Cypress.Commands.add('registerUser', (username, password, isAdmin = false) => {
|
|
||||||
const route = isAdmin ? '/api/admin/accounts/create' : '/api/signup';
|
|
||||||
|
|
||||||
cy.request('POST', route, {
|
|
||||||
username: username,
|
|
||||||
password: password,
|
|
||||||
}).its('body').as(username);
|
|
||||||
});
|
|
||||||
|
|
||||||
Cypress.Commands.add('login', (username, password) => {
|
|
||||||
cy.visit('/');
|
|
||||||
|
|
||||||
cy.intercept('POST', '/api/signin').as('signin');
|
|
||||||
|
|
||||||
cy.get('[data-cy-signin]').click();
|
|
||||||
cy.get('[data-cy-signin-username] input').type(username);
|
|
||||||
cy.get('[data-cy-signin-password] input').type(`${password}{enter}`);
|
|
||||||
|
|
||||||
cy.wait('@signin').as('signedIn');
|
|
||||||
});
|
|
|
@ -1,32 +0,0 @@
|
||||||
// ***********************************************************
|
|
||||||
// This example support/index.js is processed and
|
|
||||||
// loaded automatically before your test files.
|
|
||||||
//
|
|
||||||
// This is a great place to put global configuration and
|
|
||||||
// behavior that modifies Cypress.
|
|
||||||
//
|
|
||||||
// You can change the location of this file or turn off
|
|
||||||
// automatically serving support files with the
|
|
||||||
// 'supportFile' configuration option.
|
|
||||||
//
|
|
||||||
// You can read more here:
|
|
||||||
// https://on.cypress.io/configuration
|
|
||||||
// ***********************************************************
|
|
||||||
|
|
||||||
// Import commands.js using ES2015 syntax:
|
|
||||||
import './commands'
|
|
||||||
|
|
||||||
// Alternatively you can use CommonJS syntax:
|
|
||||||
// require('./commands')
|
|
||||||
|
|
||||||
Cypress.on('uncaught:exception', (err, runnable) => {
|
|
||||||
if ([
|
|
||||||
// Chrome
|
|
||||||
'ResizeObserver loop limit exceeded',
|
|
||||||
|
|
||||||
// Firefox
|
|
||||||
'ResizeObserver loop completed with undelivered notifications',
|
|
||||||
].some(msg => err.message.includes(msg))) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
|
@ -9,13 +9,12 @@ services:
|
||||||
- redis
|
- redis
|
||||||
# - es
|
# - es
|
||||||
ports:
|
ports:
|
||||||
- "3000:3000"
|
- "127.0.0.1:3000:3000"
|
||||||
networks:
|
networks:
|
||||||
- internal_network
|
- internal_network
|
||||||
- external_network
|
- external_network
|
||||||
volumes:
|
volumes:
|
||||||
- ./files:/misskey/files
|
- ./files:/misskey/files
|
||||||
- ./.config:/misskey/.config:ro
|
|
||||||
|
|
||||||
redis:
|
redis:
|
||||||
restart: always
|
restart: always
|
||||||
|
@ -40,7 +39,6 @@ services:
|
||||||
# image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
|
# image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.4.2
|
||||||
# environment:
|
# environment:
|
||||||
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
# - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
|
||||||
# - "TAKE_FILE_OWNERSHIP=111"
|
|
||||||
# networks:
|
# networks:
|
||||||
# - internal_network
|
# - internal_network
|
||||||
# volumes:
|
# volumes:
|
||||||
|
|
33
docs/README.md
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
# Docs
|
||||||
|
These docs are for contributors of Misskey or admins of instance of Misskey.
|
||||||
|
Docs for users are located in `src/docs`.
|
||||||
|
|
||||||
|
これらのドキュメントはMisskeyの開発者またはMisskeyインスタンス運営者向けです。
|
||||||
|
利用者向けのドキュメントは`src/docs`にあります。
|
||||||
|
|
||||||
|
这些文档是为 Misskey 的贡献者,或是 Misskey 实例的管理者准备的。
|
||||||
|
为用户准备的文档放置在 `src/docs` 文件夹中。
|
||||||
|
|
||||||
|
## 日本語版
|
||||||
|
|
||||||
|
- [Misskey構築の手引き](./setup.ja.md)
|
||||||
|
- [運営ガイド](./manage.ja.md)
|
||||||
|
- [Dockerを使ったMisskey構築方法](./docker.ja.md)
|
||||||
|
|
||||||
|
## English Version
|
||||||
|
|
||||||
|
- [Misskey Setup and Installation Guide](./setup.en.md)
|
||||||
|
- [Management guide](./manage.en.md)
|
||||||
|
- [Docker Guide](./docker.en.md)
|
||||||
|
|
||||||
|
## Française Version
|
||||||
|
|
||||||
|
- [Guide d'installation et de configuration de Misskey](./setup.fr.md)
|
||||||
|
- [Guide d'administration](./manage.fr.md)
|
||||||
|
- [Guide Docker](./docker.fr.md)
|
||||||
|
|
||||||
|
## 简体中文版
|
||||||
|
|
||||||
|
- [Misskey 设置和安装指南](./setup.zh.md)
|
||||||
|
- [运营指南](./manage.zh.md)
|
||||||
|
- [Docker 部署指南](./docker.zh.md)
|
96
docs/docker.en.md
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
Docker Guide
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
This guide describes how to install and setup Misskey with Docker.
|
||||||
|
|
||||||
|
- [Japanese version also available - 日本語版もあります](./docker.ja.md)
|
||||||
|
- [Simplified Chinese version also available - 简体中文版同样可用](./docker.zh.md)
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
*1.* Download Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. Clone Misskey repository's master branch.
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
2. Move to misskey directory.
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
3. Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest) tag.
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
*2.* Configure Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
Create configuration files with following:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd .config
|
||||||
|
cp example.yml default.yml
|
||||||
|
cp docker_example.env docker.env
|
||||||
|
```
|
||||||
|
|
||||||
|
### `default.yml`
|
||||||
|
|
||||||
|
Edit this file the same as non-Docker environment.
|
||||||
|
However hostname of Postgresql, Redis and Elasticsearch are not `localhost`, they are set in `docker-compose.yml`.
|
||||||
|
The following is default hostname:
|
||||||
|
|
||||||
|
| Service | Hostname |
|
||||||
|
|---------------|----------|
|
||||||
|
| Postgresql | `db` |
|
||||||
|
| Redis | `redis` |
|
||||||
|
| Elasticsearch | `es` |
|
||||||
|
|
||||||
|
### `docker.env`
|
||||||
|
|
||||||
|
Configure Postgresql in this file.
|
||||||
|
The minimum required settings are:
|
||||||
|
|
||||||
|
| name | Description |
|
||||||
|
|---------------------|---------------|
|
||||||
|
| `POSTGRES_PASSWORD` | Password |
|
||||||
|
| `POSTGRES_USER` | Username |
|
||||||
|
| `POSTGRES_DB` | Database name |
|
||||||
|
|
||||||
|
*3.* Configure Docker
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Edit `docker-compose.yml`.
|
||||||
|
|
||||||
|
*4.* Build Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Build misskey with the following:
|
||||||
|
|
||||||
|
`docker-compose build`
|
||||||
|
|
||||||
|
*5.* Init DB
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` shell
|
||||||
|
docker-compose run --rm web yarn run init
|
||||||
|
```
|
||||||
|
|
||||||
|
*6.* That is it.
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Well done! Now you have an environment to run Misskey.
|
||||||
|
|
||||||
|
### Launch normally
|
||||||
|
Just `docker-compose up -d`. GLHF!
|
||||||
|
|
||||||
|
### How to update your Misskey server to the latest version
|
||||||
|
1. `git stash`
|
||||||
|
2. `git checkout master`
|
||||||
|
3. `git pull`
|
||||||
|
4. `git stash pop`
|
||||||
|
5. `docker-compose build`
|
||||||
|
6. Check [ChangeLog](../CHANGELOG.md) for migration information
|
||||||
|
7. `docker-compose stop && docker-compose up -d`
|
||||||
|
|
||||||
|
### How to execute [cli commands](manage.en.md):
|
||||||
|
`docker-compose run --rm web node built/tools/mark-admin @example`
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
If you have any questions or trouble, feel free to contact us!
|
90
docs/docker.fr.md
Normal file
|
@ -0,0 +1,90 @@
|
||||||
|
Guide Docker
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
Ce guide explique comment installer et configurer Misskey avec Docker.
|
||||||
|
|
||||||
|
- [Version japonaise également disponible - Japanese version also available - 日本語版もあります](./docker.ja.md)
|
||||||
|
- [Version anglaise également disponible - English version also available - 英語版もあります](./docker.en.md)
|
||||||
|
- [Version Chinois simplifié également disponible - Simplified Chinese version also available - 简体中文版同样可用](./docker.zh.md)
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
*1.* Télécharger Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. Clone le dépôt de Misskey sur la branche master.
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
2. Naviguez dans le dossier du dépôt.
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
3. Checkout sur le tag de la [dernière version](https://github.com/syuilo/misskey/releases/latest).
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
*2.* Configuration de Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le `default.yml`.
|
||||||
|
2. `cp .config/mongo_initdb_example.js .config/mongo_initdb.js` Copie le fichier `.config/mongo_initdb_example.js` et le renomme en `mongo_initdb.js`.
|
||||||
|
3. Editez `default.yml` et `mongo_initdb.js`.
|
||||||
|
|
||||||
|
*3.* Configurer Docker
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Editez `docker-compose.yml`.
|
||||||
|
|
||||||
|
*4.* Contruire Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Contruire l'image Docker avec:
|
||||||
|
|
||||||
|
`docker-compose build`
|
||||||
|
|
||||||
|
*5.* C'est tout !
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Parfait, Vous avez un environnement prêt pour démarrer Misskey.
|
||||||
|
|
||||||
|
### Lancer normalement
|
||||||
|
Utilisez la commande `docker-compose up -d`. GLHF!
|
||||||
|
|
||||||
|
### How to update your Misskey server to the latest version
|
||||||
|
1. `git stash`
|
||||||
|
2. `git checkout master`
|
||||||
|
3. `git pull`
|
||||||
|
4. `git stash pop`
|
||||||
|
5. `docker-compose build`
|
||||||
|
6. Consultez le [ChangeLog](../CHANGELOG.md) pour avoir les éventuelles informations de migration
|
||||||
|
7. `docker-compose stop && docker-compose up -d`
|
||||||
|
|
||||||
|
### Comment exécuter des [commandes](manage.fr.md)
|
||||||
|
`docker-compose run --rm web node built/tools/mark-admin @example`
|
||||||
|
|
||||||
|
### Configuration d'ElasticSearch (pour la fonction de recherche)
|
||||||
|
*1.* Préparation de l'environnement
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. Permet de créer le dossier d'accueil de la base ElasticSearch aves les bons droits
|
||||||
|
|
||||||
|
`mkdir elasticsearch && chown 1000:1000 elasticsearch`
|
||||||
|
|
||||||
|
2. Augmente la valeur max du paramètre map_count du système (valeur minimum pour pouvoir lancer ES)
|
||||||
|
|
||||||
|
`sysctl -w vm.max_map_count=262144`
|
||||||
|
|
||||||
|
*2.* Après lancement du docker-compose, initialisation de la base ElasticSearch
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. Connexion dans le conteneur web
|
||||||
|
|
||||||
|
`docker-compose -it web /bin/sh`
|
||||||
|
|
||||||
|
2. Ajout du paquet curl
|
||||||
|
|
||||||
|
`apk add curl`
|
||||||
|
|
||||||
|
3. Création de la base ES
|
||||||
|
|
||||||
|
`curl -X PUT "es:9200/misskey" -H 'Content-Type: application/json' -d'{ "settings" : { "index" : { } }}'`
|
||||||
|
|
||||||
|
4. `exit`
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
Si vous avez des questions ou des problèmes, n'hésitez pas à nous contacter !
|
97
docs/docker.ja.md
Normal file
|
@ -0,0 +1,97 @@
|
||||||
|
Dockerを使ったMisskey構築方法
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
このガイドはDockerを使ったMisskeyセットアップ方法について解説します。
|
||||||
|
|
||||||
|
- [英語版もあります - English version also available](./docker.en.md)
|
||||||
|
- [简体中文版同样可用 - Simplified Chinese version also available](./docker.zh.md)
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
*1.* Misskeyのダウンロード
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. masterブランチからMisskeyレポジトリをクローン
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
2. misskeyディレクトリに移動
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
3. [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
*2.* 設定ファイルの作成と編集
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
下記コマンドで設定ファイルを作成してください。
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd .config
|
||||||
|
cp example.yml default.yml
|
||||||
|
cp docker_example.env docker.env
|
||||||
|
```
|
||||||
|
|
||||||
|
### `default.yml`の編集
|
||||||
|
|
||||||
|
非Docker環境と同じ様に編集してください。
|
||||||
|
ただし、Postgresql、RedisとElasticsearchのホストは`localhost`ではなく、`docker-compose.yml`で設定されたサービス名になっています。
|
||||||
|
標準設定では次の通りです。
|
||||||
|
|
||||||
|
| サービス | ホスト名 |
|
||||||
|
|---------------|---------|
|
||||||
|
| Postgresql |`db` |
|
||||||
|
| Redis |`redis` |
|
||||||
|
| Elasticsearch |`es` |
|
||||||
|
|
||||||
|
### `docker.env`の編集
|
||||||
|
|
||||||
|
このファイルはPostgresqlの設定を記述します。
|
||||||
|
最低限記述する必要がある設定は次の通りです。
|
||||||
|
|
||||||
|
| 設定 | 内容 |
|
||||||
|
|---------------------|--------------|
|
||||||
|
| `POSTGRES_PASSWORD` | パスワード |
|
||||||
|
| `POSTGRES_USER` | ユーザー名 |
|
||||||
|
| `POSTGRES_DB` | データベース名 |
|
||||||
|
|
||||||
|
*3.* Dockerの設定
|
||||||
|
----------------------------------------------------------------
|
||||||
|
`docker-compose.yml`を編集してください。
|
||||||
|
|
||||||
|
*4.* Misskeyのビルド
|
||||||
|
----------------------------------------------------------------
|
||||||
|
次のコマンドでMisskeyをビルドしてください:
|
||||||
|
|
||||||
|
`docker-compose build`
|
||||||
|
|
||||||
|
*5.* データベースを初期化
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` shell
|
||||||
|
docker-compose run --rm web yarn run init
|
||||||
|
```
|
||||||
|
|
||||||
|
*6.* 以上です!
|
||||||
|
----------------------------------------------------------------
|
||||||
|
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
||||||
|
|
||||||
|
### 通常起動
|
||||||
|
`docker-compose up -d`するだけです。GLHF!
|
||||||
|
|
||||||
|
### Misskeyを最新バージョンにアップデートする方法:
|
||||||
|
1. `git stash`
|
||||||
|
2. `git checkout master`
|
||||||
|
3. `git pull`
|
||||||
|
4. `git stash pop`
|
||||||
|
5. `docker-compose build`
|
||||||
|
6. [ChangeLog](../CHANGELOG.md)でマイグレーション情報を確認する
|
||||||
|
7. `docker-compose stop && docker-compose up -d`
|
||||||
|
|
||||||
|
### cliコマンドを実行する方法:
|
||||||
|
|
||||||
|
`docker-compose run --rm web node built/tools/mark-admin @example`
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
なにかお困りのことがありましたらお気軽にご連絡ください。
|
96
docs/docker.zh.md
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
Docker 部署指南
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
这份指南描述了如何使用Docker安装并设置 Misskey 。
|
||||||
|
|
||||||
|
- [日本語版もあります - Japanese version also available](./docker.ja.md)
|
||||||
|
- [英語版もあります - English version also available](./docker.en.md)
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
*1.* 下载 Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. 克隆 Misskey 项目的 master 分支。
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
2. 进入 misskey 文件夹。
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
3. 检查 [最新发布版](https://github.com/syuilo/misskey/releases/latest) 标签。
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
*2.* 配置 Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
可以按照如下方式创建配置文件:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
cd .config
|
||||||
|
cp example.yml default.yml
|
||||||
|
cp docker_example.env docker.env
|
||||||
|
```
|
||||||
|
|
||||||
|
### `default.yml`
|
||||||
|
|
||||||
|
这个文件的编辑工作基本与非 Docker 环境的版本相同。
|
||||||
|
但请注意, Postgresql、 Redis 和 Elasticsearch 的 **主机名(hostname)** 配置不应该是 `localhost` ,它们被设置在 `docker-compose.yml` 文件中。
|
||||||
|
以下是默认的主机名:
|
||||||
|
|
||||||
|
| 服务 | 主机名 |
|
||||||
|
|---------------|----------|
|
||||||
|
| Postgresql | `db` |
|
||||||
|
| Redis | `redis` |
|
||||||
|
| Elasticsearch | `es` |
|
||||||
|
|
||||||
|
### `docker.env`
|
||||||
|
|
||||||
|
在这个文件中配置 Postgresql 。
|
||||||
|
至少需要如下这些配置:
|
||||||
|
|
||||||
|
| 名称 | 描述 |
|
||||||
|
|---------------------|---------------|
|
||||||
|
| `POSTGRES_PASSWORD` | 数据库密码 |
|
||||||
|
| `POSTGRES_USER` | 数据库用户名 |
|
||||||
|
| `POSTGRES_DB` | 数据库名 |
|
||||||
|
|
||||||
|
*3.* 配置 Docker
|
||||||
|
----------------------------------------------------------------
|
||||||
|
编辑 `docker-compose.yml` 文件。
|
||||||
|
|
||||||
|
*4.* 构建 Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
使用如下的方式构建Misskey:
|
||||||
|
|
||||||
|
`docker-compose build`
|
||||||
|
|
||||||
|
*5.* 初始化数据库
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` bash
|
||||||
|
docker-compose run --rm web yarn run init
|
||||||
|
```
|
||||||
|
|
||||||
|
*6.* 完成了!
|
||||||
|
----------------------------------------------------------------
|
||||||
|
干得不错!现在您拥有了一个可以运行Misskey的环境啦。
|
||||||
|
|
||||||
|
### 正常启动
|
||||||
|
只需要 `docker-compose up -d` 即可。玩得愉快!
|
||||||
|
|
||||||
|
### 如何将您的 Misskey 服务器升级至最新版本
|
||||||
|
1. `git stash`
|
||||||
|
2. `git checkout master`
|
||||||
|
3. `git pull`
|
||||||
|
4. `git stash pop`
|
||||||
|
5. `docker-compose build`
|
||||||
|
6. 检查 [更新日志](../CHANGELOG.md) 以获取升级迁移信息。
|
||||||
|
7. `docker-compose stop && docker-compose up -d`
|
||||||
|
|
||||||
|
### 如何执行 [控制台指令](manage.zh.md):
|
||||||
|
`docker-compose run --rm web node built/tools/mark-admin @example`
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
如果您有任何疑问或是困惑,欢迎与我们联系!
|
69
docs/examples/misskey.nginx
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
# Sample nginx configuration for Misskey
|
||||||
|
#
|
||||||
|
# 1. Replace example.tld to your domain
|
||||||
|
# 2. Copy to /etc/nginx/sites-available/ and then symlink from /etc/nginx/sites-enabled/
|
||||||
|
# or copy to /etc/nginx/conf.d/
|
||||||
|
|
||||||
|
# For WebSocket
|
||||||
|
map $http_upgrade $connection_upgrade {
|
||||||
|
default upgrade;
|
||||||
|
'' close;
|
||||||
|
}
|
||||||
|
|
||||||
|
proxy_cache_path /tmp/nginx_cache levels=1:2 keys_zone=cache1:16m max_size=1g inactive=720m use_temp_path=off;
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 80;
|
||||||
|
listen [::]:80;
|
||||||
|
server_name example.tld;
|
||||||
|
|
||||||
|
# For SSL domain validation
|
||||||
|
root /var/www/html;
|
||||||
|
location /.well-known/acme-challenge/ { allow all; }
|
||||||
|
location /.well-known/pki-validation/ { allow all; }
|
||||||
|
location / { return 301 https://$server_name$request_uri; }
|
||||||
|
}
|
||||||
|
|
||||||
|
server {
|
||||||
|
listen 443 ssl http2;
|
||||||
|
listen [::]:443 ssl http2;
|
||||||
|
server_name example.tld;
|
||||||
|
ssl_session_cache shared:ssl_session_cache:10m;
|
||||||
|
|
||||||
|
# To use Let's Encrypt certificate
|
||||||
|
ssl_certificate /etc/letsencrypt/live/example.tld/fullchain.pem;
|
||||||
|
ssl_certificate_key /etc/letsencrypt/live/example.tld/privkey.pem;
|
||||||
|
|
||||||
|
# To use Debian/Ubuntu's self-signed certificate (For testing or before issuing a certificate)
|
||||||
|
#ssl_certificate /etc/ssl/certs/ssl-cert-snakeoil.pem;
|
||||||
|
#ssl_certificate_key /etc/ssl/private/ssl-cert-snakeoil.key;
|
||||||
|
|
||||||
|
# SSL protocol settings
|
||||||
|
ssl_protocols TLSv1.2;
|
||||||
|
ssl_ciphers ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:AES128-SHA;
|
||||||
|
ssl_prefer_server_ciphers on;
|
||||||
|
|
||||||
|
# Change to your upload limit
|
||||||
|
client_max_body_size 80m;
|
||||||
|
|
||||||
|
# Proxy to Node
|
||||||
|
location / {
|
||||||
|
proxy_pass http://127.0.0.1:3000;
|
||||||
|
proxy_set_header Host $host;
|
||||||
|
proxy_set_header X-Real-IP $remote_addr;
|
||||||
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
|
proxy_set_header X-Forwarded-Proto https;
|
||||||
|
proxy_http_version 1.1;
|
||||||
|
proxy_redirect off;
|
||||||
|
|
||||||
|
# For WebSocket
|
||||||
|
proxy_set_header Upgrade $http_upgrade;
|
||||||
|
proxy_set_header Connection $connection_upgrade;
|
||||||
|
|
||||||
|
# Cache settings
|
||||||
|
proxy_cache cache1;
|
||||||
|
proxy_cache_lock on;
|
||||||
|
proxy_cache_use_stale updating;
|
||||||
|
add_header X-Cache $upstream_cache_status;
|
||||||
|
}
|
||||||
|
}
|
14
docs/manage.en.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Management guide
|
||||||
|
|
||||||
|
## Check the status of the job queue
|
||||||
|
coming soon
|
||||||
|
|
||||||
|
## Mark as 'admin' user
|
||||||
|
``` shell
|
||||||
|
node built/tools/mark-admin (Username)
|
||||||
|
```
|
||||||
|
|
||||||
|
e.g.
|
||||||
|
``` shell
|
||||||
|
node built/tools/mark-admin @syuilo
|
||||||
|
```
|
14
docs/manage.fr.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# Guide d'administration
|
||||||
|
|
||||||
|
## Vérifier le status de la file d'attente des taches
|
||||||
|
coming soon
|
||||||
|
|
||||||
|
## Marquer un utilisateur en tant que 'admin'
|
||||||
|
``` shell
|
||||||
|
node built/tools/mark-admin (nom d'utilisateur)
|
||||||
|
```
|
||||||
|
|
||||||
|
Exemple :
|
||||||
|
``` shell
|
||||||
|
node built/tools/mark-admin @syuilo
|
||||||
|
```
|
14
docs/manage.ja.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# 運営ガイド
|
||||||
|
|
||||||
|
## ジョブキューの状態を調べる
|
||||||
|
coming soon
|
||||||
|
|
||||||
|
## 管理者ユーザーを設定する
|
||||||
|
``` shell
|
||||||
|
node built/tools/mark-admin (ユーザー名)
|
||||||
|
```
|
||||||
|
|
||||||
|
例:
|
||||||
|
``` shell
|
||||||
|
node built/tools/mark-admin @syuilo
|
||||||
|
```
|
14
docs/manage.zh.md
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
# 运营指南
|
||||||
|
|
||||||
|
## 检查任务队列的状态
|
||||||
|
即将到来……
|
||||||
|
|
||||||
|
## 设置用户为管理员
|
||||||
|
``` shell
|
||||||
|
node built/tools/mark-admin (用户名)
|
||||||
|
```
|
||||||
|
|
||||||
|
样例
|
||||||
|
``` shell
|
||||||
|
node built/tools/mark-admin @syuilo
|
||||||
|
```
|
146
docs/setup.en.md
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
Misskey Setup and Installation Guide
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
We thank you for your interest in setting up your Misskey server!
|
||||||
|
This guide describes how to install and setup Misskey.
|
||||||
|
|
||||||
|
- [Japanese version also available - 日本語版もあります](./setup.ja.md)
|
||||||
|
- [Simplified Chinese version also available - 简体中文版同样可用](./setup.zh.md)
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
*1.* Create Misskey user
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Running misskey as root is not a good idea so we create a user for that.
|
||||||
|
In debian for exemple :
|
||||||
|
|
||||||
|
```
|
||||||
|
adduser --disabled-password --disabled-login misskey
|
||||||
|
```
|
||||||
|
|
||||||
|
*2.* Install dependencies
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Please install and setup these softwares:
|
||||||
|
|
||||||
|
#### Dependencies :package:
|
||||||
|
* **[Node.js](https://nodejs.org/en/)** (12.x, 14.x)
|
||||||
|
* **[PostgreSQL](https://www.postgresql.org/)** (>= 10)
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
|
##### Optional
|
||||||
|
* [Yarn](https://yarnpkg.com/) *Optional but recommended for security reason. If you won't install it, use `npx yarn` instead of `yarn`.*
|
||||||
|
* [Elasticsearch](https://www.elastic.co/) - required to enable the search feature
|
||||||
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
|
*3.* Install Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. Connect to misskey user.
|
||||||
|
|
||||||
|
`su - misskey`
|
||||||
|
|
||||||
|
2. Clone the misskey repo from master branch.
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
3. Navigate to misskey directory
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
4. Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest)
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
5. Install misskey dependencies.
|
||||||
|
|
||||||
|
`yarn`
|
||||||
|
|
||||||
|
*4.* Configure Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. Copy the `.config/example.yml` and rename it to `default.yml`.
|
||||||
|
|
||||||
|
`cp .config/example.yml .config/default.yml`
|
||||||
|
|
||||||
|
2. Edit `default.yml`
|
||||||
|
|
||||||
|
*5.* Build Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
Build misskey with the following:
|
||||||
|
|
||||||
|
`NODE_ENV=production yarn build`
|
||||||
|
|
||||||
|
If you're on Debian, you will need to install the `build-essential`, `python` package.
|
||||||
|
|
||||||
|
If you're still encountering errors about some modules, use node-gyp:
|
||||||
|
|
||||||
|
1. `npx node-gyp configure`
|
||||||
|
2. `npx node-gyp build`
|
||||||
|
3. `NODE_ENV=production yarn build`
|
||||||
|
|
||||||
|
*6.* Init DB
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` shell
|
||||||
|
yarn run init
|
||||||
|
```
|
||||||
|
|
||||||
|
*7.* That is it.
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Well done! Now, you have an environment that run to Misskey.
|
||||||
|
|
||||||
|
### Launch normally
|
||||||
|
Just `NODE_ENV=production npm start`. GLHF!
|
||||||
|
|
||||||
|
### Launch with systemd
|
||||||
|
|
||||||
|
1. Create a systemd service here
|
||||||
|
|
||||||
|
`/etc/systemd/system/misskey.service`
|
||||||
|
|
||||||
|
2. Edit it, and paste this and save:
|
||||||
|
|
||||||
|
```
|
||||||
|
[Unit]
|
||||||
|
Description=Misskey daemon
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=misskey
|
||||||
|
ExecStart=/usr/bin/npm start
|
||||||
|
WorkingDirectory=/home/misskey/misskey
|
||||||
|
Environment="NODE_ENV=production"
|
||||||
|
TimeoutSec=60
|
||||||
|
StandardOutput=syslog
|
||||||
|
StandardError=syslog
|
||||||
|
SyslogIdentifier=misskey
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Reload systemd and enable the misskey service.
|
||||||
|
|
||||||
|
`systemctl daemon-reload ; systemctl enable misskey`
|
||||||
|
|
||||||
|
4. Start the misskey service.
|
||||||
|
|
||||||
|
`systemctl start misskey`
|
||||||
|
|
||||||
|
You can check if the service is running with `systemctl status misskey`.
|
||||||
|
|
||||||
|
### How to update your Misskey server to the latest version
|
||||||
|
1. `git checkout master`
|
||||||
|
2. `git pull`
|
||||||
|
3. `yarn install`
|
||||||
|
4. `NODE_ENV=production yarn build`
|
||||||
|
5. `yarn migrate`
|
||||||
|
6. Restart your Misskey process to apply changes
|
||||||
|
7. Enjoy
|
||||||
|
|
||||||
|
If you encounter any problems with updating, please try the following:
|
||||||
|
1. `yarn clean` or `yarn cleanall`
|
||||||
|
2. Retry update (Don't forget `yarn install`
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
If you have any questions or troubles, feel free to contact us!
|
135
docs/setup.fr.md
Normal file
|
@ -0,0 +1,135 @@
|
||||||
|
Guide d'installation et de configuration de Misskey
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
Nous vous remerçions de l'intrêt que vous manifestez pour l'installation de votre propre instance Misskey !
|
||||||
|
Ce guide décrit les étapes à suivre afin d'installer et de configurer une instance Misskey.
|
||||||
|
|
||||||
|
- [La version en japonnais est également disponible sur - 日本語版もあります](./setup.ja.md)
|
||||||
|
- [Version anglaise également disponible - English version also available - 英語版もあります](./setup.en.md)
|
||||||
|
- [Version Chinois simplifié également disponible - Simplified Chinese version also available - 简体中文版同样可用](./setup.zh.md)
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
*1.* Création de l'utilisateur Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Executer misskey en tant que super-utilisateur étant une mauvaise idée, nous allons créer un utilisateur dédié.
|
||||||
|
Sous Debian, par exemple :
|
||||||
|
|
||||||
|
```
|
||||||
|
adduser --disabled-password --disabled-login misskey
|
||||||
|
```
|
||||||
|
|
||||||
|
*2.* Installation des dépendances
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Installez les paquets suivants :
|
||||||
|
|
||||||
|
#### Dépendences :package:
|
||||||
|
* **[Node.js](https://nodejs.org/en/)** (12.x, 14.x)
|
||||||
|
* **[PostgreSQL](https://www.postgresql.org/)** (>= 10)
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
|
##### Optionnels
|
||||||
|
* [Yarn](https://yarnpkg.com/) - *recommander pour des raisons de sécurité. Si vous ne l'installez pas, utilisez `npx yarn` au lieu de` yarn`.*
|
||||||
|
* [Elasticsearch](https://www.elastic.co/) - *requis pour pouvoir activer la fonctionnalité de recherche.*
|
||||||
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
|
*3.* Installation de Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. Basculez vers l'utilisateur misskey.
|
||||||
|
|
||||||
|
`su - misskey`
|
||||||
|
|
||||||
|
2. Clonez la branche master du dépôt misskey.
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
3. Accédez au dossier misskey.
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
4. Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest)
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
5. Installez les dépendances de misskey.
|
||||||
|
|
||||||
|
`yarn install`
|
||||||
|
|
||||||
|
*4.* Création du fichier de configuration
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. Copiez le fichier `.config/example.yml` et renommez-le`default.yml`.
|
||||||
|
|
||||||
|
`cp .config/example.yml .config/default.yml`
|
||||||
|
|
||||||
|
2. Editez le fichier `default.yml`
|
||||||
|
|
||||||
|
*5.* Construction de Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
Construisez Misskey comme ceci :
|
||||||
|
|
||||||
|
`NODE_ENV=production yarn build`
|
||||||
|
|
||||||
|
Si vous êtes sous Debian, vous serez amené à installer les paquets `build-essential` et `python`.
|
||||||
|
|
||||||
|
Si vous rencontrez des erreurs concernant certains modules, utilisez node-gyp:
|
||||||
|
|
||||||
|
1. `npx node-gyp configure`
|
||||||
|
2. `npx node-gyp build`
|
||||||
|
3. `NODE_ENV=production yarn build`
|
||||||
|
|
||||||
|
*6.* C'est tout.
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey
|
||||||
|
|
||||||
|
### Lancement conventionnel
|
||||||
|
Lancez tout simplement `NODE_ENV=production yarn start`. Bonne chance et amusez-vous bien !
|
||||||
|
|
||||||
|
### Démarrage avec systemd
|
||||||
|
|
||||||
|
1. Créez un service systemd sur
|
||||||
|
|
||||||
|
`/etc/systemd/system/misskey.service`
|
||||||
|
|
||||||
|
2. Editez-le puis copiez et coller ceci dans le fichier :
|
||||||
|
|
||||||
|
```
|
||||||
|
[Unit]
|
||||||
|
Description=Misskey daemon
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=misskey
|
||||||
|
ExecStart=/usr/bin/npm start
|
||||||
|
WorkingDirectory=/home/misskey/misskey
|
||||||
|
Environment="NODE_ENV=production"
|
||||||
|
TimeoutSec=60
|
||||||
|
StandardOutput=syslog
|
||||||
|
StandardError=syslog
|
||||||
|
SyslogIdentifier=misskey
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Redémarre systemd et active le service misskey.
|
||||||
|
|
||||||
|
`systemctl daemon-reload ; systemctl enable misskey`
|
||||||
|
|
||||||
|
4. Démarre le service misskey.
|
||||||
|
|
||||||
|
`systemctl start misskey`
|
||||||
|
|
||||||
|
Vous pouvez vérifier si le service a démarré en utilisant la commande `systemctl status misskey`.
|
||||||
|
|
||||||
|
### Méthode de mise à jour vers la plus récente version de Misskey
|
||||||
|
1. `git checkout master`
|
||||||
|
2. `git pull`
|
||||||
|
3. `yarn install`
|
||||||
|
4. `NODE_ENV=production yarn build`
|
||||||
|
5. `yarn migrate`
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
Si vous rencontrez des difficultés ou avez d'autres questions, n'hésitez pas à nous contacter !
|
144
docs/setup.ja.md
Normal file
|
@ -0,0 +1,144 @@
|
||||||
|
Misskey構築の手引き
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
Misskeyサーバーの構築にご関心をお寄せいただきありがとうございます!
|
||||||
|
このガイドではMisskeyのインストール・セットアップ方法について解説します。
|
||||||
|
|
||||||
|
- [英語版もあります - English version also available](./setup.en.md)
|
||||||
|
- [简体中文版同样可用 - Simplified Chinese version also available](./setup.zh.md)
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
*1.* Misskeyユーザーの作成
|
||||||
|
----------------------------------------------------------------
|
||||||
|
Misskeyはrootユーザーで実行しない方がよいため、代わりにユーザーを作成します。
|
||||||
|
Debianの例:
|
||||||
|
|
||||||
|
```
|
||||||
|
adduser --disabled-password --disabled-login misskey
|
||||||
|
```
|
||||||
|
|
||||||
|
*2.* 依存関係をインストールする
|
||||||
|
----------------------------------------------------------------
|
||||||
|
これらのソフトウェアをインストール・設定してください:
|
||||||
|
|
||||||
|
#### 依存関係 :package:
|
||||||
|
* **[Node.js](https://nodejs.org/en/)** (12.x, 14.x)
|
||||||
|
* **[PostgreSQL](https://www.postgresql.org/)** (10以上)
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
|
##### オプション
|
||||||
|
* [Yarn](https://yarnpkg.com/)
|
||||||
|
* セキュリティの観点から推奨されます。 yarn をインストールしない方針の場合は、文章中の `yarn` を適宜 `npx yarn` と読み替えてください。
|
||||||
|
* [Elasticsearch](https://www.elastic.co/)
|
||||||
|
* 検索機能を有効にするためにはインストールが必要です。
|
||||||
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
|
*3.* Misskeyのインストール
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. misskeyユーザーを使用
|
||||||
|
|
||||||
|
`su - misskey`
|
||||||
|
|
||||||
|
2. masterブランチからMisskeyレポジトリをクローン
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
3. misskeyディレクトリに移動
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
4. [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
5. Misskeyの依存パッケージをインストール
|
||||||
|
|
||||||
|
`yarn install`
|
||||||
|
|
||||||
|
*4.* 設定ファイルを作成する
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. `.config/example.yml`をコピーし名前を`default.yml`にする。
|
||||||
|
|
||||||
|
`cp .config/example.yml .config/default.yml`
|
||||||
|
|
||||||
|
2. `default.yml` を編集する。
|
||||||
|
|
||||||
|
*5.* Misskeyのビルド
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
次のコマンドでMisskeyをビルドしてください:
|
||||||
|
|
||||||
|
`NODE_ENV=production yarn build`
|
||||||
|
|
||||||
|
Debianをお使いであれば、`build-essential`パッケージをインストールする必要があります。
|
||||||
|
|
||||||
|
何らかのモジュールでエラーが発生する場合はnode-gypを使ってください:
|
||||||
|
1. `npx node-gyp configure`
|
||||||
|
2. `npx node-gyp build`
|
||||||
|
3. `NODE_ENV=production yarn build`
|
||||||
|
|
||||||
|
*6.* データベースを初期化
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` shell
|
||||||
|
yarn run init
|
||||||
|
```
|
||||||
|
|
||||||
|
*7.* 以上です!
|
||||||
|
----------------------------------------------------------------
|
||||||
|
お疲れ様でした。これでMisskeyを動かす準備は整いました。
|
||||||
|
|
||||||
|
### 通常起動
|
||||||
|
`NODE_ENV=production yarn start`するだけです。GLHF!
|
||||||
|
|
||||||
|
### systemdを用いた起動
|
||||||
|
1. systemdサービスのファイルを作成
|
||||||
|
|
||||||
|
`/etc/systemd/system/misskey.service`
|
||||||
|
|
||||||
|
2. エディタで開き、以下のコードを貼り付けて保存:
|
||||||
|
|
||||||
|
```
|
||||||
|
[Unit]
|
||||||
|
Description=Misskey daemon
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=misskey
|
||||||
|
ExecStart=/usr/bin/npm start
|
||||||
|
WorkingDirectory=/home/misskey/misskey
|
||||||
|
Environment="NODE_ENV=production"
|
||||||
|
TimeoutSec=60
|
||||||
|
StandardOutput=syslog
|
||||||
|
StandardError=syslog
|
||||||
|
SyslogIdentifier=misskey
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
CentOSで1024以下のポートを使用してMisskeyを使用する場合は`ExecStart=/usr/bin/sudo /usr/bin/npm start`に変更する必要があります。
|
||||||
|
|
||||||
|
3. systemdを再読み込みしmisskeyサービスを有効化
|
||||||
|
|
||||||
|
`systemctl daemon-reload; systemctl enable misskey`
|
||||||
|
|
||||||
|
4. misskeyサービスの起動
|
||||||
|
|
||||||
|
`systemctl start misskey`
|
||||||
|
|
||||||
|
`systemctl status misskey`と入力すると、サービスの状態を調べることができます。
|
||||||
|
|
||||||
|
### Misskeyを最新バージョンにアップデートする方法:
|
||||||
|
1. `git checkout master`
|
||||||
|
2. `git pull`
|
||||||
|
3. `yarn install`
|
||||||
|
4. `NODE_ENV=production yarn build`
|
||||||
|
5. `yarn migrate`
|
||||||
|
|
||||||
|
なにか問題が発生した場合は、`yarn clean`または`yarn cleanall`すると直る場合があります。
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
なにかお困りのことがありましたらお気軽にご連絡ください。
|
146
docs/setup.zh.md
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
Misskey 设置和安装指南
|
||||||
|
================================================================
|
||||||
|
|
||||||
|
非常感谢您对构建 Misskey 服务器的关注!
|
||||||
|
这份指南描述了 Misskey 的安装与设置流程。
|
||||||
|
|
||||||
|
- [日本語版もあります - Japanese version also available](./setup.ja.md)
|
||||||
|
- [英語版もあります - English version also available](./setup.en.md)
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
*1.* 创建 Misskey 用户
|
||||||
|
----------------------------------------------------------------
|
||||||
|
直接使用 root 用户来运行 misskey 也许并不是一个好主意,因此我们有必要创建一个专用的用户。
|
||||||
|
以 Debian 为例:
|
||||||
|
|
||||||
|
``` bash
|
||||||
|
adduser --disabled-password --disabled-login misskey
|
||||||
|
```
|
||||||
|
|
||||||
|
*2.* 安装依赖
|
||||||
|
----------------------------------------------------------------
|
||||||
|
请安装并设置如下这些软件:
|
||||||
|
|
||||||
|
#### Dependencies :package:
|
||||||
|
* **[Node.js](https://nodejs.org/en/)** (12.x, 14.x)
|
||||||
|
* **[PostgreSQL](https://www.postgresql.org/)** (>= 10)
|
||||||
|
* **[Redis](https://redis.io/)**
|
||||||
|
|
||||||
|
##### Optional
|
||||||
|
* [Yarn](https://yarnpkg.com/) *可选,但出于安全因素考虑还是推荐安装。如果您没有安装, 您需要使用 `npx yarn` 来代替 `yarn`.*
|
||||||
|
* [Elasticsearch](https://www.elastic.co/) - 为了启用搜索功能,这个搜索引擎是有必要的。
|
||||||
|
* [FFmpeg](https://www.ffmpeg.org/)
|
||||||
|
|
||||||
|
*3.* 安装 Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. 连接至 misskey 用户.
|
||||||
|
|
||||||
|
`su - misskey`
|
||||||
|
|
||||||
|
2. 克隆 Misskey 项目的 master 分支。
|
||||||
|
|
||||||
|
`git clone -b master git://github.com/syuilo/misskey.git`
|
||||||
|
|
||||||
|
3. 进入 misskey 文件夹。
|
||||||
|
|
||||||
|
`cd misskey`
|
||||||
|
|
||||||
|
4. 检查 [最新发布版](https://github.com/syuilo/misskey/releases/latest) 标签。
|
||||||
|
|
||||||
|
`git checkout master`
|
||||||
|
|
||||||
|
5. 安装 Misskey 的依赖。
|
||||||
|
|
||||||
|
`yarn`
|
||||||
|
|
||||||
|
*4.* 配置 Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
1. 复制 `.config/example.yml` 并重命名为 `default.yml`。
|
||||||
|
|
||||||
|
`cp .config/example.yml .config/default.yml`
|
||||||
|
|
||||||
|
2. 编辑 `default.yml`
|
||||||
|
|
||||||
|
*5.* 构建 Misskey
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
使用如下的指令构建 Misskey :
|
||||||
|
|
||||||
|
`NODE_ENV=production yarn build`
|
||||||
|
|
||||||
|
如果您使用的是 Debian , 您需要安装 `build-essential`, `python` 环境包。
|
||||||
|
|
||||||
|
如果您仍然遇到有关某些模块的错误,您可以使用 node-gyp:
|
||||||
|
|
||||||
|
1. `npx node-gyp configure`
|
||||||
|
2. `npx node-gyp build`
|
||||||
|
3. `NODE_ENV=production yarn build`
|
||||||
|
|
||||||
|
*6.* 初始化数据库
|
||||||
|
----------------------------------------------------------------
|
||||||
|
``` bash
|
||||||
|
yarn run init
|
||||||
|
```
|
||||||
|
|
||||||
|
*7.* 完成了!
|
||||||
|
----------------------------------------------------------------
|
||||||
|
干得不错!现在您拥有了一个可以运行Misskey的环境啦。
|
||||||
|
|
||||||
|
### 正常启动
|
||||||
|
只需要 `NODE_ENV=production npm start` 即可。玩得愉快!
|
||||||
|
|
||||||
|
### 使用 systemd 来启动
|
||||||
|
|
||||||
|
1. 在此处创建一个 systemd 服务:
|
||||||
|
|
||||||
|
`/etc/systemd/system/misskey.service`
|
||||||
|
|
||||||
|
2. 编辑它,粘贴如下内容并保存:
|
||||||
|
|
||||||
|
```
|
||||||
|
[Unit]
|
||||||
|
Description=Misskey daemon
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=misskey
|
||||||
|
ExecStart=/usr/bin/npm start
|
||||||
|
WorkingDirectory=/home/misskey/misskey
|
||||||
|
Environment="NODE_ENV=production"
|
||||||
|
TimeoutSec=60
|
||||||
|
StandardOutput=syslog
|
||||||
|
StandardError=syslog
|
||||||
|
SyslogIdentifier=misskey
|
||||||
|
Restart=always
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
||||||
|
```
|
||||||
|
|
||||||
|
3. 重启 systemd 并设置 misskey 服务自动启动:
|
||||||
|
|
||||||
|
`systemctl daemon-reload ; systemctl enable misskey`
|
||||||
|
|
||||||
|
4. 启动 misskey 服务:
|
||||||
|
|
||||||
|
`systemctl start misskey`
|
||||||
|
|
||||||
|
您可以使用 `systemctl status misskey` 来检查服务是否正在运行。
|
||||||
|
|
||||||
|
### 如何将您的 Misskey 服务器升级至最新版本
|
||||||
|
1. `git checkout master`
|
||||||
|
2. `git pull`
|
||||||
|
3. `yarn install`
|
||||||
|
4. `NODE_ENV=production yarn build`
|
||||||
|
5. `yarn migrate`
|
||||||
|
6. 重启您的 Misskey 进程来应用改变。
|
||||||
|
7. 尽情享受吧!
|
||||||
|
|
||||||
|
如果您在更新时遇到任何问题,请尝试以下操作:
|
||||||
|
1. `yarn clean` 或是 `yarn cleanall`
|
||||||
|
2. 重试升级 (请不要忘记 `yarn install` )
|
||||||
|
|
||||||
|
----------------------------------------------------------------
|
||||||
|
|
||||||
|
如果您有任何疑问或是困惑,欢迎与我们联系!
|
65
gulpfile.js
|
@ -1,65 +0,0 @@
|
||||||
/**
|
|
||||||
* Gulp tasks
|
|
||||||
*/
|
|
||||||
|
|
||||||
const fs = require('fs');
|
|
||||||
const gulp = require('gulp');
|
|
||||||
const replace = require('gulp-replace');
|
|
||||||
const terser = require('gulp-terser');
|
|
||||||
const cssnano = require('gulp-cssnano');
|
|
||||||
|
|
||||||
const locales = require('./locales');
|
|
||||||
const meta = require('./package.json');
|
|
||||||
|
|
||||||
gulp.task('copy:backend:views', () =>
|
|
||||||
gulp.src('./packages/backend/src/server/web/views/**/*').pipe(gulp.dest('./packages/backend/built/server/web/views'))
|
|
||||||
);
|
|
||||||
|
|
||||||
gulp.task('copy:client:fonts', () =>
|
|
||||||
gulp.src('./packages/client/node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/_client_dist_/fonts/'))
|
|
||||||
);
|
|
||||||
|
|
||||||
gulp.task('copy:client:fontawesome', () =>
|
|
||||||
gulp.src('./packages/client/node_modules/@fortawesome/fontawesome-free/**/*').pipe(gulp.dest('./built/_client_dist_/fontawesome/'))
|
|
||||||
);
|
|
||||||
|
|
||||||
gulp.task('copy:client:locales', cb => {
|
|
||||||
fs.mkdirSync('./built/_client_dist_/locales', { recursive: true });
|
|
||||||
|
|
||||||
const v = { '_version_': meta.version };
|
|
||||||
|
|
||||||
for (const [lang, locale] of Object.entries(locales)) {
|
|
||||||
fs.writeFileSync(`./built/_client_dist_/locales/${lang}.${meta.version}.json`, JSON.stringify({ ...locale, ...v }), 'utf-8');
|
|
||||||
}
|
|
||||||
|
|
||||||
cb();
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('build:backend:script', () => {
|
|
||||||
return gulp.src(['./packages/backend/src/server/web/boot.js', './packages/backend/src/server/web/bios.js', './packages/backend/src/server/web/cli.js'])
|
|
||||||
.pipe(replace('LANGS', JSON.stringify(Object.keys(locales))))
|
|
||||||
.pipe(terser({
|
|
||||||
toplevel: true
|
|
||||||
}))
|
|
||||||
.pipe(gulp.dest('./packages/backend/built/server/web/'));
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('build:backend:style', () => {
|
|
||||||
return gulp.src(['./packages/backend/src/server/web/style.css', './packages/backend/src/server/web/bios.css', './packages/backend/src/server/web/cli.css'])
|
|
||||||
.pipe(cssnano({
|
|
||||||
zindex: false
|
|
||||||
}))
|
|
||||||
.pipe(gulp.dest('./packages/backend/built/server/web/'));
|
|
||||||
});
|
|
||||||
|
|
||||||
gulp.task('build', gulp.parallel(
|
|
||||||
'copy:client:locales', 'copy:backend:views', 'build:backend:script', 'build:backend:style', 'copy:client:fonts', 'copy:client:fontawesome'
|
|
||||||
));
|
|
||||||
|
|
||||||
gulp.task('default', gulp.task('build'));
|
|
||||||
|
|
||||||
gulp.task('watch', () => {
|
|
||||||
gulp.watch([
|
|
||||||
'./packages/*/src/**/*',
|
|
||||||
], { ignoreInitial: false }, gulp.task('build'));
|
|
||||||
});
|
|
101
gulpfile.ts
Normal file
|
@ -0,0 +1,101 @@
|
||||||
|
/**
|
||||||
|
* Gulp tasks
|
||||||
|
*/
|
||||||
|
|
||||||
|
import * as fs from 'fs';
|
||||||
|
import * as gulp from 'gulp';
|
||||||
|
import * as ts from 'gulp-typescript';
|
||||||
|
import * as rimraf from 'rimraf';
|
||||||
|
import * as rename from 'gulp-rename';
|
||||||
|
const cleanCSS = require('gulp-clean-css');
|
||||||
|
const sass = require('gulp-dart-sass');
|
||||||
|
const fiber = require('fibers');
|
||||||
|
|
||||||
|
const locales: { [x: string]: any } = require('./locales');
|
||||||
|
const meta = require('./package.json');
|
||||||
|
|
||||||
|
gulp.task('build:ts', () => {
|
||||||
|
const tsProject = ts.createProject('./tsconfig.json');
|
||||||
|
|
||||||
|
return tsProject
|
||||||
|
.src()
|
||||||
|
.pipe(tsProject())
|
||||||
|
.on('error', () => {})
|
||||||
|
.pipe(gulp.dest('./built/'));
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task('build:copy:views', () =>
|
||||||
|
gulp.src('./src/server/web/views/**/*').pipe(gulp.dest('./built/server/web/views'))
|
||||||
|
);
|
||||||
|
|
||||||
|
gulp.task('build:copy:locales', cb => {
|
||||||
|
fs.mkdirSync('./built/client/assets/locales', { recursive: true });
|
||||||
|
|
||||||
|
const v = { '_version_': meta.version };
|
||||||
|
|
||||||
|
for (const [lang, locale] of Object.entries(locales)) {
|
||||||
|
fs.writeFileSync(`./built/client/assets/locales/${lang}.${meta.version}.json`, JSON.stringify({ ...locale, ...v }), 'utf-8');
|
||||||
|
}
|
||||||
|
|
||||||
|
cb();
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task('build:copy:fonts', () =>
|
||||||
|
gulp.src('./node_modules/three/examples/fonts/**/*').pipe(gulp.dest('./built/client/assets/fonts/'))
|
||||||
|
);
|
||||||
|
|
||||||
|
gulp.task('build:copy', gulp.parallel('build:copy:views', 'build:copy:locales', 'build:copy:fonts', () =>
|
||||||
|
gulp.src([
|
||||||
|
'./src/emojilist.json',
|
||||||
|
'./src/server/web/views/**/*',
|
||||||
|
'./src/**/assets/**/*',
|
||||||
|
'!./src/client/assets/**/*'
|
||||||
|
]).pipe(gulp.dest('./built/'))
|
||||||
|
));
|
||||||
|
|
||||||
|
gulp.task('clean', cb =>
|
||||||
|
rimraf('./built', cb)
|
||||||
|
);
|
||||||
|
|
||||||
|
gulp.task('cleanall', gulp.parallel('clean', cb =>
|
||||||
|
rimraf('./node_modules', cb)
|
||||||
|
));
|
||||||
|
|
||||||
|
gulp.task('build:client:styles', () =>
|
||||||
|
gulp.src('./src/client/style.scss')
|
||||||
|
.pipe(sass({ fiber }))
|
||||||
|
.pipe(cleanCSS())
|
||||||
|
.pipe(gulp.dest('./built/client/assets/'))
|
||||||
|
);
|
||||||
|
|
||||||
|
gulp.task('copy:client', () =>
|
||||||
|
gulp.src([
|
||||||
|
'./assets/**/*',
|
||||||
|
'./src/client/assets/**/*',
|
||||||
|
])
|
||||||
|
.pipe(rename(path => {
|
||||||
|
path.dirname = path.dirname!.replace('assets', '.');
|
||||||
|
}))
|
||||||
|
.pipe(gulp.dest('./built/client/assets/'))
|
||||||
|
);
|
||||||
|
|
||||||
|
gulp.task('copy:docs', () =>
|
||||||
|
gulp.src([
|
||||||
|
'./src/docs/**/*',
|
||||||
|
])
|
||||||
|
.pipe(gulp.dest('./built/client/assets/docs/'))
|
||||||
|
);
|
||||||
|
|
||||||
|
gulp.task('build:client', gulp.parallel(
|
||||||
|
'build:client:styles',
|
||||||
|
'copy:client',
|
||||||
|
'copy:docs'
|
||||||
|
));
|
||||||
|
|
||||||
|
gulp.task('build', gulp.parallel(
|
||||||
|
'build:ts',
|
||||||
|
'build:copy',
|
||||||
|
'build:client',
|
||||||
|
));
|
||||||
|
|
||||||
|
gulp.task('default', gulp.task('build'));
|
7
index.js
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
const fs = require('fs');
|
||||||
|
|
||||||
|
if (fs.existsSync('./built')) {
|
||||||
|
require('./built').default();
|
||||||
|
} else {
|
||||||
|
console.log('Built code is not found. Probably an error occurred during a build or you just forgot to build.');
|
||||||
|
}
|
|
@ -1,6 +1,6 @@
|
||||||
# **DO NOT edit locale files** except `ja-JP.yml`.
|
# **DO NOT edit locale files** except `ja-JP.yml`.
|
||||||
|
|
||||||
When you add text to the ja-JP file (of misskey-dev/misskey), it will automatically be applied to other language files.
|
When you add text to the ja-JP file (of syuilo/misskey), it will automatically be applied to other language files.
|
||||||
Translations added in ja-JP file should contain the original Japanese strings.
|
Translations added in ja-JP file should contain the original Japanese strings.
|
||||||
|
|
||||||
Please see [Contribution guide](../CONTRIBUTING.md) for more information.
|
Please see [Contribution guide](../CONTRIBUTING.md) for more information.
|
||||||
|
|
1152
locales/ar-SA.yml
1665
locales/bn-BD.yml
|
@ -1,197 +0,0 @@
|
||||||
---
|
|
||||||
_lang_: "Català"
|
|
||||||
headlineMisskey: "Una xarxa connectada per notes"
|
|
||||||
introMisskey: "Benvingut! Misskey és un servei de microblogging descentralitzat de codi obert.\nCrea \"notes\" per compartir els teus pensaments amb tots els que t'envolten. 📡\nAmb \"reaccions\", també pots expressar ràpidament els teus sentiments sobre les notes de tothom. 👍\nExplorem un món nou! 🚀"
|
|
||||||
monthAndDay: "{day}/{month}"
|
|
||||||
search: "Cercar"
|
|
||||||
notifications: "Notificacions"
|
|
||||||
username: "Nom d'usuari"
|
|
||||||
password: "Contrasenya"
|
|
||||||
forgotPassword: "Contrasenya oblidada"
|
|
||||||
fetchingAsApObject: "Cercant en el Fediverse..."
|
|
||||||
ok: "OK"
|
|
||||||
gotIt: "Ho he entès!"
|
|
||||||
cancel: "Cancel·lar"
|
|
||||||
enterUsername: "Introdueix el teu nom d'usuari"
|
|
||||||
renotedBy: "Resignat per {usuari}"
|
|
||||||
noNotes: "Cap nota"
|
|
||||||
noNotifications: "Cap notificació"
|
|
||||||
instance: "Instàncies"
|
|
||||||
settings: "Preferències"
|
|
||||||
basicSettings: "Configuració bàsica"
|
|
||||||
otherSettings: "Configuració avançada"
|
|
||||||
openInWindow: "Obrir en una nova finestra"
|
|
||||||
profile: "Perfil"
|
|
||||||
timeline: "Línia de temps"
|
|
||||||
noAccountDescription: "Aquest usuari encara no ha escrit la seva biografia."
|
|
||||||
login: "Iniciar sessió"
|
|
||||||
loggingIn: "Identificant-se"
|
|
||||||
logout: "Tancar la sessió"
|
|
||||||
signup: "Registrar-se"
|
|
||||||
uploading: "Pujant..."
|
|
||||||
save: "Desar"
|
|
||||||
users: "Usuaris"
|
|
||||||
addUser: "Afegir un usuari"
|
|
||||||
favorite: "Afegir a preferits"
|
|
||||||
favorites: "Favorits"
|
|
||||||
unfavorite: "Eliminar dels preferits"
|
|
||||||
favorited: "Afegit als preferits."
|
|
||||||
alreadyFavorited: "Ja s'ha afegit als preferits."
|
|
||||||
cantFavorite: "No s'ha pogut afegir als preferits."
|
|
||||||
pin: "Fixar al perfil"
|
|
||||||
unpin: "Para de fixar del perfil"
|
|
||||||
copyContent: "Copiar el contingut"
|
|
||||||
copyLink: "Copiar l'enllaç"
|
|
||||||
delete: "Eliminar"
|
|
||||||
deleteAndEdit: "Esborrar i editar"
|
|
||||||
deleteAndEditConfirm: "Estàs segur que vols suprimir aquesta nota i editar-la? Perdràs totes les reaccions, notes i respostes."
|
|
||||||
addToList: "Afegir a una llista"
|
|
||||||
sendMessage: "Enviar un missatge"
|
|
||||||
copyUsername: "Copiar nom d'usuari"
|
|
||||||
searchUser: "Cercar usuaris"
|
|
||||||
reply: "Respondre"
|
|
||||||
loadMore: "Carregar més"
|
|
||||||
showMore: "Veure més"
|
|
||||||
youGotNewFollower: "t'ha seguit"
|
|
||||||
receiveFollowRequest: "Sol·licitud de seguiment rebuda"
|
|
||||||
followRequestAccepted: "Sol·licitud de seguiment acceptada"
|
|
||||||
mention: "Menció"
|
|
||||||
mentions: "Mencions"
|
|
||||||
directNotes: "Notes directes"
|
|
||||||
importAndExport: "Importar / Exportar"
|
|
||||||
import: "Importar"
|
|
||||||
export: "Exportar"
|
|
||||||
files: "Fitxers"
|
|
||||||
download: "Baixar"
|
|
||||||
driveFileDeleteConfirm: "Estàs segur que vols suprimir el fitxer \"{name}\"? Les notes associades a aquest fitxer adjunt també se suprimiran."
|
|
||||||
unfollowConfirm: "Estàs segur que vols deixar de seguir {name}?"
|
|
||||||
exportRequested: "Has sol·licitat una exportació. Això pot trigar una estona. S'afegirà a la teva unitat un cop completat."
|
|
||||||
importRequested: "Has sol·licitat una importació. Això pot trigar una estona."
|
|
||||||
lists: "Llistes"
|
|
||||||
noLists: "No tens cap llista"
|
|
||||||
note: "Nota"
|
|
||||||
notes: "Notes"
|
|
||||||
following: "Seguint"
|
|
||||||
followers: "Seguidors"
|
|
||||||
followsYou: "Et segueix"
|
|
||||||
createList: "Crear llista"
|
|
||||||
manageLists: "Gestionar les llistes"
|
|
||||||
error: "Error"
|
|
||||||
somethingHappened: "S'ha produït un error"
|
|
||||||
retry: "Torna-ho a intentar"
|
|
||||||
pageLoadError: "S'ha produït un error en carregar la pàgina"
|
|
||||||
pageLoadErrorDescription: "Això normalment es deu a errors de xarxa o a la memòria cau del navegador. Prova d'esborrar la memòria cau i torna-ho a provar després d'esperar una estona."
|
|
||||||
serverIsDead: "Aquest servidor no respon. Espera una estona i torna-ho a provar."
|
|
||||||
youShouldUpgradeClient: "Per veure aquesta pàgina, actualitzeu-la per actualitzar el vostre client."
|
|
||||||
enterListName: "Introdueix un nom per a la llista"
|
|
||||||
privacy: "Privadesa"
|
|
||||||
makeFollowManuallyApprove: "Les sol·licituds de seguiment requereixen aprovació"
|
|
||||||
defaultNoteVisibility: "Visibilitat per defecte"
|
|
||||||
follow: "Seguint"
|
|
||||||
followRequest: "Enviar la sol·licitud de seguiment"
|
|
||||||
followRequests: "Sol·licituds de seguiment"
|
|
||||||
unfollow: "Deixar de seguir"
|
|
||||||
followRequestPending: "Sol·licituds de seguiment pendents"
|
|
||||||
enterEmoji: "Introduir un emoji"
|
|
||||||
renote: "Renotar"
|
|
||||||
unrenote: "Anul·lar renota"
|
|
||||||
renoted: "Renotat."
|
|
||||||
cantRenote: "Aquesta publicació no pot ser renotada."
|
|
||||||
cantReRenote: "Impossible renotar una renota."
|
|
||||||
quote: "Citar"
|
|
||||||
pinnedNote: "Nota fixada"
|
|
||||||
pinned: "Fixar al perfil"
|
|
||||||
you: "Tu"
|
|
||||||
clickToShow: "Fes clic per mostrar"
|
|
||||||
sensitive: "NSFW"
|
|
||||||
add: "Afegir"
|
|
||||||
reaction: "Reaccions"
|
|
||||||
reactionSetting: "Reaccions a mostrar al selector de reaccions"
|
|
||||||
reactionSettingDescription2: "Arrossega per reordenar, fes clic per suprimir, prem \"+\" per afegir."
|
|
||||||
rememberNoteVisibility: "Recorda la configuració de visibilitat de les notes"
|
|
||||||
attachCancel: "Eliminar el fitxer adjunt"
|
|
||||||
markAsSensitive: "Marcar com a NSFW"
|
|
||||||
unmarkAsSensitive: "Deixar de marcar com a sensible"
|
|
||||||
enterFileName: "Defineix nom del fitxer"
|
|
||||||
mute: "Silencia"
|
|
||||||
unmute: "Deixa de silenciar"
|
|
||||||
block: "Bloqueja"
|
|
||||||
unblock: "Desbloqueja"
|
|
||||||
suspend: "Suspèn"
|
|
||||||
unsuspend: "Deixa de suspendre"
|
|
||||||
instances: "Instàncies"
|
|
||||||
remove: "Eliminar"
|
|
||||||
nsfw: "NSFW"
|
|
||||||
pinnedNotes: "Nota fixada"
|
|
||||||
userList: "Llistes"
|
|
||||||
smtpUser: "Nom d'usuari"
|
|
||||||
smtpPass: "Contrasenya"
|
|
||||||
user: "Usuaris"
|
|
||||||
searchByGoogle: "Cercar"
|
|
||||||
file: "Fitxers"
|
|
||||||
_email:
|
|
||||||
_follow:
|
|
||||||
title: "t'ha seguit"
|
|
||||||
_mfm:
|
|
||||||
mention: "Menció"
|
|
||||||
quote: "Citar"
|
|
||||||
search: "Cercar"
|
|
||||||
_theme:
|
|
||||||
keys:
|
|
||||||
mention: "Menció"
|
|
||||||
renote: "Renotar"
|
|
||||||
_sfx:
|
|
||||||
note: "Notes"
|
|
||||||
notification: "Notificacions"
|
|
||||||
_2fa:
|
|
||||||
step2Url: "També pots inserir aquest enllaç i utilitzes una aplicació d'escriptori:"
|
|
||||||
_widgets:
|
|
||||||
notifications: "Notificacions"
|
|
||||||
timeline: "Línia de temps"
|
|
||||||
_cw:
|
|
||||||
show: "Carregar més"
|
|
||||||
_visibility:
|
|
||||||
followers: "Seguidors"
|
|
||||||
_profile:
|
|
||||||
username: "Nom d'usuari"
|
|
||||||
_exportOrImport:
|
|
||||||
followingList: "Seguint"
|
|
||||||
muteList: "Silencia"
|
|
||||||
blockingList: "Bloqueja"
|
|
||||||
userLists: "Llistes"
|
|
||||||
_pages:
|
|
||||||
script:
|
|
||||||
categories:
|
|
||||||
list: "Llistes"
|
|
||||||
blocks:
|
|
||||||
_join:
|
|
||||||
arg1: "Llistes"
|
|
||||||
_randomPick:
|
|
||||||
arg1: "Llistes"
|
|
||||||
_dailyRandomPick:
|
|
||||||
arg1: "Llistes"
|
|
||||||
_seedRandomPick:
|
|
||||||
arg2: "Llistes"
|
|
||||||
_pick:
|
|
||||||
arg1: "Llistes"
|
|
||||||
_listLen:
|
|
||||||
arg1: "Llistes"
|
|
||||||
types:
|
|
||||||
array: "Llistes"
|
|
||||||
_notification:
|
|
||||||
youWereFollowed: "t'ha seguit"
|
|
||||||
_types:
|
|
||||||
follow: "Seguint"
|
|
||||||
mention: "Menció"
|
|
||||||
renote: "Renotar"
|
|
||||||
quote: "Citar"
|
|
||||||
reaction: "Reaccions"
|
|
||||||
_actions:
|
|
||||||
reply: "Respondre"
|
|
||||||
renote: "Renotar"
|
|
||||||
_deck:
|
|
||||||
_columns:
|
|
||||||
notifications: "Notificacions"
|
|
||||||
tl: "Línia de temps"
|
|
||||||
list: "Llistes"
|
|
||||||
mentions: "Mencions"
|
|
|
@ -1,930 +1,2 @@
|
||||||
---
|
---
|
||||||
_lang_: "Čeština"
|
_lang_: "Čeština"
|
||||||
headlineMisskey: "Síť propojená poznámkami"
|
|
||||||
introMisskey: "Vítejte! Misskey je otevřený a decentralizovaný microblogový servis.\n\"Poznámkami\" můžete sdílet co se zrovna děje se všemi ve Vašem okolí. 📡\nPomocí \"reakcí\" můžete sdílet své názory a pocity na ostatní poznámky. 👍\nPojďte objevovat nový svět! 🚀"
|
|
||||||
monthAndDay: "{day}. {month}."
|
|
||||||
search: "Vyhledávání"
|
|
||||||
notifications: "Oznámení"
|
|
||||||
username: "Uživatelské jméno"
|
|
||||||
password: "Heslo"
|
|
||||||
forgotPassword: "Zapomenuté heslo"
|
|
||||||
fetchingAsApObject: "Načítám data z Fediversu..."
|
|
||||||
ok: "Potvrdit"
|
|
||||||
gotIt: "Rozumím!"
|
|
||||||
cancel: "Zrušit"
|
|
||||||
enterUsername: "Zadej uživatelské jméno"
|
|
||||||
renotedBy: "{user} přeposla/a"
|
|
||||||
noNotes: "Žádné poznámky"
|
|
||||||
noNotifications: "Žádná oznámení"
|
|
||||||
instance: "Instance"
|
|
||||||
settings: "Nastavení"
|
|
||||||
basicSettings: "Obecná nastavení"
|
|
||||||
otherSettings: "Rozšířená nastavení"
|
|
||||||
openInWindow: "Otevřít v novém okně"
|
|
||||||
profile: "Váš profil"
|
|
||||||
timeline: "Časová osa"
|
|
||||||
noAccountDescription: "Tento uživatel zatím nenapsal svou biografii."
|
|
||||||
login: "Přihlásit se"
|
|
||||||
loggingIn: "Probíhá přihlašování"
|
|
||||||
logout: "Odhlásit"
|
|
||||||
signup: "Registrace"
|
|
||||||
uploading: "Nahrávám"
|
|
||||||
save: "Uložit"
|
|
||||||
users: "Uživatelé"
|
|
||||||
addUser: "Přidat uživatele"
|
|
||||||
favorite: "Oblíbené"
|
|
||||||
favorites: "Oblíbené"
|
|
||||||
unfavorite: "Odebrat z oblízených"
|
|
||||||
favorited: "Přidáno do oblíbených"
|
|
||||||
alreadyFavorited: "Už je mezi oblíbenými"
|
|
||||||
cantFavorite: "Nepodařilo se přidat mezi oblíbené."
|
|
||||||
pin: "Připnout"
|
|
||||||
unpin: "Odepnout"
|
|
||||||
copyContent: "Zkopírovat obsah"
|
|
||||||
copyLink: "Kopírovat odkaz"
|
|
||||||
delete: "Smazat"
|
|
||||||
deleteAndEdit: "Smazat a upravit"
|
|
||||||
deleteAndEditConfirm: "Jste si jistí že chcete smazat tuto poznámku a editovat ji? Ztratíte tím všechny reakce, sdílení a odpovědi na ni."
|
|
||||||
addToList: "Přidat do seznamu"
|
|
||||||
sendMessage: "Odeslat zprávu"
|
|
||||||
copyUsername: "Kopírovat uživatelské jméno"
|
|
||||||
searchUser: "Vyhledat uživatele"
|
|
||||||
reply: "Odpovědět"
|
|
||||||
loadMore: "Zobrazit více"
|
|
||||||
showMore: "Zobrazit více"
|
|
||||||
showLess: "Zavřít"
|
|
||||||
youGotNewFollower: "Máte nového následovníka"
|
|
||||||
receiveFollowRequest: "Žádost o sledování přijata"
|
|
||||||
followRequestAccepted: "Žádost o sledování přijata"
|
|
||||||
mention: "Zmínění"
|
|
||||||
mentions: "Zmínění"
|
|
||||||
importAndExport: "Import a export"
|
|
||||||
import: "Importovat"
|
|
||||||
export: "Exportovat"
|
|
||||||
files: "Soubor(ů)"
|
|
||||||
download: "Stáhnout"
|
|
||||||
driveFileDeleteConfirm: "Opravdu chcete smazat soubor \"{name}\"? Poznámky, ke kterým je tento soubor připojen, budou také smazány."
|
|
||||||
unfollowConfirm: "Jste si jisti že už nechcete sledovat {name}?"
|
|
||||||
exportRequested: "Požádali jste o export. To může chvíli trvat. Přidáme ho na váš Disk až bude dokončen."
|
|
||||||
importRequested: "Požádali jste o export. To může chvilku trvat."
|
|
||||||
lists: "Seznamy"
|
|
||||||
noLists: "Nemáte žádné seznamy"
|
|
||||||
note: "Poznámka"
|
|
||||||
notes: "Poznámky"
|
|
||||||
following: "Sledovaní"
|
|
||||||
followers: "Sledující"
|
|
||||||
followsYou: "Sledují vás"
|
|
||||||
createList: "Vytvořit seznam"
|
|
||||||
manageLists: "Spravovat seznam"
|
|
||||||
error: "Chyba"
|
|
||||||
somethingHappened: "Jejda. Něco se nepovedlo."
|
|
||||||
retry: "Opakovat"
|
|
||||||
pageLoadError: "Nepodařilo se načíst stránku"
|
|
||||||
serverIsDead: "Server neodpovídá. Počkejte chvíli a zkuste to znovu."
|
|
||||||
youShouldUpgradeClient: "Pro zobrazení této stránky obnovte stránku pro aktualizaci klienta."
|
|
||||||
enterListName: "Jméno seznamu"
|
|
||||||
privacy: "Soukromí"
|
|
||||||
makeFollowManuallyApprove: "Žádosti o sledování vyžadují potvrzení"
|
|
||||||
defaultNoteVisibility: "Výchozí viditelnost"
|
|
||||||
follow: "Sledovaní"
|
|
||||||
followRequest: "Odeslat žádost o sledování"
|
|
||||||
followRequests: "Žádosti o sledování"
|
|
||||||
unfollow: "Přestat sledovat"
|
|
||||||
followRequestPending: "Čekající žádosti o sledování"
|
|
||||||
enterEmoji: "Vložte emoji"
|
|
||||||
renote: "Přeposlat"
|
|
||||||
unrenote: "Zrušit přeposlání"
|
|
||||||
renoted: "Přeposláno"
|
|
||||||
cantRenote: "Tento příspěvek nelze přeposlat."
|
|
||||||
cantReRenote: "Odpověď nemůže být odstraněna."
|
|
||||||
quote: "Citovat"
|
|
||||||
pinnedNote: "Připnutá poznámka"
|
|
||||||
pinned: "Připnout"
|
|
||||||
you: "Vy"
|
|
||||||
clickToShow: "Klikněte pro zobrazení"
|
|
||||||
sensitive: "NSFW"
|
|
||||||
add: "Přidat"
|
|
||||||
reaction: "Reakce"
|
|
||||||
reactionSettingDescription2: "Přetažením změníte pořadí, kliknutím smažete, zmáčkněte \"+\" k přidání"
|
|
||||||
rememberNoteVisibility: "Zapamatovat nastavení zobrazení poznámky"
|
|
||||||
attachCancel: "Odstranit přílohu"
|
|
||||||
markAsSensitive: "Označit jako NSFW"
|
|
||||||
unmarkAsSensitive: "Odznačit jako NSFW"
|
|
||||||
enterFileName: "Zadejte název souboru"
|
|
||||||
mute: "Ztlumit"
|
|
||||||
unmute: "Odmlčet"
|
|
||||||
block: "Zablokovat"
|
|
||||||
unblock: "Odblokovat"
|
|
||||||
suspend: "Zmrazit"
|
|
||||||
unsuspend: "Odmrazit"
|
|
||||||
blockConfirm: "Jste si jistí že chcete zablokovat tento účet?"
|
|
||||||
unblockConfirm: "Jste si jistí že chcete odblokovat tento účet?"
|
|
||||||
suspendConfirm: "Jste si jistí že chcete suspendovat tenhle účet?"
|
|
||||||
unsuspendConfirm: "Jste si jistí že chcete obnovit tenhle účet?"
|
|
||||||
selectList: "Vybrat seznam"
|
|
||||||
selectAntenna: "Vyberte Anténu"
|
|
||||||
selectWidget: "Zvolte widget"
|
|
||||||
editWidgets: "Upravit widget"
|
|
||||||
editWidgetsExit: "Hotovo"
|
|
||||||
customEmojis: "Vlastní emoji"
|
|
||||||
emoji: "Emoji"
|
|
||||||
emojis: "Emoji"
|
|
||||||
emojiName: "Jméno emoji"
|
|
||||||
emojiUrl: "URL obrázku"
|
|
||||||
addEmoji: "Přidat emoji"
|
|
||||||
settingGuide: "Doporučené nastavení"
|
|
||||||
cacheRemoteFiles: "Ukládání vzdálených souborů do mezipaměti"
|
|
||||||
cacheRemoteFilesDescription: "Zakázání tohoto nastavení způsobí, že vzdálené soubory budou odkazovány přímo, místo aby byly ukládány do mezipaměti. Tím se ušetří úložiště na serveru, ale zvýší se provoz, protože se negenerují miniatury."
|
|
||||||
flagAsBot: "Tento účet je bot"
|
|
||||||
flagAsBotDescription: "Pokud je tento účet kontrolován programem zaškrtněte tuto možnost. To označí tento účet jako bot pro ostatní vývojáře a zabrání tak nekonečným interakcím s ostatními boty a upraví Misskey systém aby se choval k tomuhle účtu jako bot."
|
|
||||||
flagAsCat: "Tenhle účet je kočka"
|
|
||||||
flagAsCatDescription: "Vyberte tuto možnost aby tento účet byl označen jako kočka."
|
|
||||||
flagShowTimelineReplies: "Zobrazovat odpovědi na časové ose"
|
|
||||||
flagShowTimelineRepliesDescription: "Je-li zapnuto, zobrazí odpovědi uživatelů na poznámky jiných uživatelů na vaší časové ose."
|
|
||||||
autoAcceptFollowed: "Automaticky akceptovat následování od účtů které sledujete"
|
|
||||||
addAccount: "Přidat účet"
|
|
||||||
loginFailed: "Přihlášení se nezdařilo."
|
|
||||||
showOnRemote: "Více na původním profilu"
|
|
||||||
general: "Obecně"
|
|
||||||
wallpaper: "Obrázek na pozadí"
|
|
||||||
setWallpaper: "Nastavení obrázku na pozadí"
|
|
||||||
removeWallpaper: "Odstranit pozadí"
|
|
||||||
searchWith: "Hledat: {q}"
|
|
||||||
youHaveNoLists: "Nemáte žádné seznamy"
|
|
||||||
followConfirm: "Jste si jisti, že chcete sledovat {name}?"
|
|
||||||
proxyAccount: "Proxy účet"
|
|
||||||
proxyAccountDescription: "Proxy účet je účet, který za určitých podmínek sleduje uživatele na dálku vaším jménem. Například když uživatel zařadí vzdáleného uživatele do seznamu, pokud nikdo nesleduje uživatele na seznamu, aktivita nebude doručena instanci, takže místo toho bude uživatele sledovat účet proxy."
|
|
||||||
host: "Hostitel"
|
|
||||||
selectUser: "Vyberte uživatele"
|
|
||||||
recipient: "Pro"
|
|
||||||
annotation: "Komentáře"
|
|
||||||
federation: "Federace"
|
|
||||||
instances: "Instance"
|
|
||||||
registeredAt: "Registrován"
|
|
||||||
latestRequestSentAt: "Poslední požadavek poslán"
|
|
||||||
latestRequestReceivedAt: "Poslední požadavek přijat"
|
|
||||||
latestStatus: "Poslední status"
|
|
||||||
storageUsage: "Využití úložiště"
|
|
||||||
charts: "Grafy"
|
|
||||||
perHour: "za hodinu"
|
|
||||||
perDay: "za den"
|
|
||||||
stopActivityDelivery: "Přestat zasílat aktivitu"
|
|
||||||
blockThisInstance: "Blokovat tuto instanci"
|
|
||||||
operations: "Operace"
|
|
||||||
software: "Software"
|
|
||||||
version: "Verze"
|
|
||||||
metadata: "Metadata"
|
|
||||||
withNFiles: "{n} soubor(ů)"
|
|
||||||
monitor: "Monitorovat"
|
|
||||||
jobQueue: "Fronta úloh"
|
|
||||||
cpuAndMemory: "CPU a paměť"
|
|
||||||
network: "Síť"
|
|
||||||
disk: "Disk"
|
|
||||||
instanceInfo: "Informace o instanci"
|
|
||||||
statistics: "Statistiky"
|
|
||||||
clearQueue: "Vyčistit frontu"
|
|
||||||
clearQueueConfirmTitle: "Jste si jisti že zrušit všechny úlohy ve frontě?"
|
|
||||||
clearCachedFiles: "Vyprázdnit mezipaměť"
|
|
||||||
blockedInstances: "Blokované instance"
|
|
||||||
noUsers: "Žádní uživatelé"
|
|
||||||
editProfile: "Upravit můj profil"
|
|
||||||
pinLimitExceeded: "Nemůžete připnout další poznámky."
|
|
||||||
intro: "Instalace Misskey byla dokončena! Prosím vytvořte admina."
|
|
||||||
done: "Hotovo"
|
|
||||||
processing: "Zpracovávám"
|
|
||||||
preview: "Náhled"
|
|
||||||
default: "Výchozí"
|
|
||||||
noCustomEmojis: "Bez Emoji"
|
|
||||||
blocked: "Blokováno"
|
|
||||||
suspended: "Suspendováno"
|
|
||||||
all: "Vše"
|
|
||||||
subscribing: "Odebíráte"
|
|
||||||
publishing: "Publikuji"
|
|
||||||
notResponding: "Neodpovídá"
|
|
||||||
instanceFollowing: "Následovníci na instanci"
|
|
||||||
instanceFollowers: "Následovníci na instanci"
|
|
||||||
instanceUsers: "Uživatelé této instance"
|
|
||||||
changePassword: "Změnit heslo"
|
|
||||||
security: "Zabezpečení"
|
|
||||||
retypedNotMatch: "Zadané údaje se neshodují."
|
|
||||||
currentPassword: "Současné heslo"
|
|
||||||
newPassword: "Nové heslo"
|
|
||||||
newPasswordRetype: "Nové heslo (znovu)"
|
|
||||||
attachFile: "Přiložit soubor"
|
|
||||||
more: "Více!"
|
|
||||||
featured: "Oblíbené poznámky"
|
|
||||||
usernameOrUserId: "Uživatelské jméno nebo uživatelské id"
|
|
||||||
noSuchUser: "Uživatel nebyl nalezen"
|
|
||||||
announcements: "Oznámení"
|
|
||||||
imageUrl: "URL obrázku"
|
|
||||||
remove: "Smazat"
|
|
||||||
removed: "Smazáno"
|
|
||||||
removeAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
|
||||||
deleteAreYouSure: "Jste si jistí že chcete smazat \"{x}\"?"
|
|
||||||
resetAreYouSure: "Opravdu resetovat?"
|
|
||||||
saved: "Uloženo"
|
|
||||||
messaging: "Zprávy"
|
|
||||||
upload: "Nahrát soubory"
|
|
||||||
fromDrive: "Z disku"
|
|
||||||
fromUrl: "Z URL"
|
|
||||||
uploadFromUrl: "Nahrát z URL adresy"
|
|
||||||
uploadFromUrlDescription: "URL adresa souboru, který chcete nahrát"
|
|
||||||
uploadFromUrlMayTakeTime: "Může trvat nějakou dobu, dokud nebude dokončeno nahrávání."
|
|
||||||
explore: "Objevovat"
|
|
||||||
messageRead: "Přečtené"
|
|
||||||
noMoreHistory: "To je vše"
|
|
||||||
startMessaging: "Zahájit chat"
|
|
||||||
nUsersRead: "přečteno {n} uživateli"
|
|
||||||
agreeTo: "Souhlasím s {0}"
|
|
||||||
tos: "Podmínky užívání"
|
|
||||||
start: "Začít"
|
|
||||||
home: "Domů"
|
|
||||||
remoteUserCaution: "Tyto informace nemusí být aktuální jelikož uživatel je ze vzdálené instance."
|
|
||||||
activity: "Aktivita"
|
|
||||||
images: "Obrázky"
|
|
||||||
birthday: "Datum narození"
|
|
||||||
yearsOld: "{age} let"
|
|
||||||
registeredDate: "Datum registrace"
|
|
||||||
location: "Lokace"
|
|
||||||
theme: "Vzhled"
|
|
||||||
themeForLightMode: "Vzhled pro použití ve světlém režimu"
|
|
||||||
themeForDarkMode: "Vzhled k použití v tmavém režimu"
|
|
||||||
light: "Světlý"
|
|
||||||
dark: "Tmavý"
|
|
||||||
lightThemes: "Světlý vzhled"
|
|
||||||
darkThemes: "Tmavý vzhled"
|
|
||||||
syncDeviceDarkMode: "Synchronizovat tmavý vzhled s nastavením Vašeho systému"
|
|
||||||
drive: "Úložiště"
|
|
||||||
fileName: "Název souboru"
|
|
||||||
selectFile: "Vybrat soubor"
|
|
||||||
selectFiles: "Vybrat soubory"
|
|
||||||
selectFolder: "Vyberte složku"
|
|
||||||
selectFolders: "Vyberte složky"
|
|
||||||
renameFile: "Přejmenovat soubor"
|
|
||||||
folderName: "Název složky"
|
|
||||||
createFolder: "Vytvořit složku"
|
|
||||||
renameFolder: "Přejmenovat složku"
|
|
||||||
deleteFolder: "Odstranit složku"
|
|
||||||
addFile: "Přidat soubor"
|
|
||||||
emptyFolder: "Tato složka je prázdná"
|
|
||||||
unableToDelete: "Nelze smazat"
|
|
||||||
inputNewFileName: "Zadejte nový název"
|
|
||||||
inputNewFolderName: "Zadejte název nové složky"
|
|
||||||
copyUrl: "Kopírovat URL"
|
|
||||||
rename: "Přejmenovat"
|
|
||||||
avatar: "Avatar"
|
|
||||||
banner: "Baner"
|
|
||||||
nsfw: "NSFW"
|
|
||||||
disconnectedFromServer: "Spojení bylo přerušeno"
|
|
||||||
reload: "Aktualizovat"
|
|
||||||
doNothing: "Ignorovat"
|
|
||||||
watch: "Sledovat"
|
|
||||||
unwatch: "Přestat sledovat"
|
|
||||||
accept: "Souhlasím"
|
|
||||||
reject: "Odmítnout"
|
|
||||||
normal: "Normální"
|
|
||||||
instanceName: "Název instance"
|
|
||||||
instanceDescription: "Popis instance"
|
|
||||||
maintainerName: "Správce"
|
|
||||||
maintainerEmail: "E-mailová adresa správce"
|
|
||||||
tosUrl: "URL pro smluvní podmínky"
|
|
||||||
thisYear: "Tento rok"
|
|
||||||
thisMonth: "Tento měsíc"
|
|
||||||
today: "Dnes"
|
|
||||||
dayX: "{day}"
|
|
||||||
monthX: "{month}"
|
|
||||||
yearX: "{year}"
|
|
||||||
pages: "Stránky"
|
|
||||||
integration: "Integrace"
|
|
||||||
connectService: "Připojit"
|
|
||||||
disconnectService: "Odpojit"
|
|
||||||
enableLocalTimeline: "Povolit lokální čas"
|
|
||||||
enableGlobalTimeline: "Povolit globální čas"
|
|
||||||
registration: "Registrace"
|
|
||||||
enableRegistration: "Povolit registraci novým uživatelům"
|
|
||||||
invite: "Pozvat"
|
|
||||||
inMb: "V megabajtech"
|
|
||||||
iconUrl: "Favicon URL"
|
|
||||||
bannerUrl: "Baner URL"
|
|
||||||
backgroundImageUrl: "Adresa URL obrázku pozadí"
|
|
||||||
basicInfo: "Základní informace"
|
|
||||||
pinnedUsers: "Připnutí uživatelé"
|
|
||||||
pinnedNotes: "Připnutá poznámka"
|
|
||||||
hcaptcha: "hCaptcha"
|
|
||||||
enableHcaptcha: "Aktivovat hCaptchu"
|
|
||||||
hcaptchaSiteKey: "Klíč stránky"
|
|
||||||
hcaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
|
||||||
recaptcha: "reCAPTCHA"
|
|
||||||
enableRecaptcha: "Zapnout ReCAPTCHu"
|
|
||||||
recaptchaSiteKey: "Klíč stránky"
|
|
||||||
recaptchaSecretKey: "Tajný Klíč (Secret Key)"
|
|
||||||
antennas: "Antény"
|
|
||||||
manageAntennas: "Spravovat Antény"
|
|
||||||
name: "Jméno"
|
|
||||||
antennaSource: "Zdroj Antény"
|
|
||||||
enableServiceworker: "Povolit ServiceWorker"
|
|
||||||
caseSensitive: "Rozlišuje malá a velká písmena"
|
|
||||||
connectedTo: "Následující účty jsou připojeny"
|
|
||||||
notesAndReplies: "Poznámky a odpovědi"
|
|
||||||
withFiles: "Včetně souborů"
|
|
||||||
popularUsers: "Populární uživatelé"
|
|
||||||
recentlyUpdatedUsers: "Nedávno aktívni uživatelé"
|
|
||||||
popularTags: "Populární tagy"
|
|
||||||
userList: "Seznamy"
|
|
||||||
about: "Informace"
|
|
||||||
aboutMisskey: "O Misskey"
|
|
||||||
administrator: "Administrátor"
|
|
||||||
token: "Token"
|
|
||||||
twoStepAuthentication: "Dvoufaktorová autentikace"
|
|
||||||
moderator: "Moderátor"
|
|
||||||
nUsersMentioned: "{n} uživatelů zmínilo"
|
|
||||||
securityKey: "Bezpečnostní klíč"
|
|
||||||
securityKeyName: "Název klíče"
|
|
||||||
registerSecurityKey: "Registrovat bezpečnostní klíč"
|
|
||||||
lastUsed: "Naposledy použito"
|
|
||||||
unregister: "Odstranit"
|
|
||||||
resetPassword: "Resetovat heslo"
|
|
||||||
newPasswordIs: "Nové heslo je \"{password}\""
|
|
||||||
reduceUiAnimation: "Snížit UI animace"
|
|
||||||
share: "Sdílet"
|
|
||||||
notFound: "Nenalezeno"
|
|
||||||
notFoundDescription: "Nebyla nalezená žádná stránka korespondující se zadanou URL."
|
|
||||||
uploadFolder: "Výchozí lokace pro upload"
|
|
||||||
cacheClear: "Vymazat cache"
|
|
||||||
markAsReadAllNotifications: "Označit všechna oznámení za přečtená"
|
|
||||||
markAsReadAllUnreadNotes: "Označit všechny příspěvky za přečtené"
|
|
||||||
markAsReadAllTalkMessages: "Označit všechny zprávy za přečtené"
|
|
||||||
help: "Nápověda"
|
|
||||||
inputMessageHere: "Sem zadejte zprávu"
|
|
||||||
close: "Zavřít"
|
|
||||||
group: "Skupina"
|
|
||||||
groups: "Skupiny"
|
|
||||||
createGroup: "Vytvořit skupinu"
|
|
||||||
ownedGroups: "Vlastněné skupiny"
|
|
||||||
joinedGroups: "Členství ve skupinách"
|
|
||||||
invites: "Pozvat"
|
|
||||||
groupName: "Název skupiny"
|
|
||||||
members: "Členové"
|
|
||||||
transfer: "Převod"
|
|
||||||
title: "Titulek"
|
|
||||||
text: "Text"
|
|
||||||
enable: "Povolit"
|
|
||||||
next: "Další"
|
|
||||||
retype: "Zadejte znovu"
|
|
||||||
noteOf: "{user} poznámky"
|
|
||||||
inviteToGroup: "Pozvat do skupiny"
|
|
||||||
quoteAttached: "Citace"
|
|
||||||
quoteQuestion: "Přiložit jako citaci?"
|
|
||||||
noMessagesYet: "Zatím tu nejsou žádné zprávy"
|
|
||||||
newMessageExists: "Máte novou zprávu"
|
|
||||||
onlyOneFileCanBeAttached: "Ke zprávě můžete přiložit jenom jeden soubor"
|
|
||||||
signinRequired: "Přihlašte se, prosím"
|
|
||||||
invitations: "Pozvat"
|
|
||||||
invitationCode: "Kód pozvánky"
|
|
||||||
checking: "Ověřuji"
|
|
||||||
available: "K dispozici"
|
|
||||||
unavailable: "Není k dispozici"
|
|
||||||
usernameInvalidFormat: "Písmena, čísla a _ jsou povolená."
|
|
||||||
tooShort: "Příliš krátké"
|
|
||||||
tooLong: "Příliš dlouhé"
|
|
||||||
weakPassword: "Slabé heslo"
|
|
||||||
normalPassword: "Dobré heslo"
|
|
||||||
strongPassword: "Silné heslo"
|
|
||||||
passwordMatched: "Hesla se schodují"
|
|
||||||
passwordNotMatched: "Hesla se neschodují"
|
|
||||||
signinWith: "Přihlásit se s {x}"
|
|
||||||
signinFailed: "Nelze se přihlásit. Zkontrolujte prosím své uživatelské jméno a heslo."
|
|
||||||
tapSecurityKey: "Ťukněte na bezpečnostní klíč"
|
|
||||||
or: "Nebo"
|
|
||||||
language: "Jazyk"
|
|
||||||
uiLanguage: "Jazyk uživatelského rozhraní"
|
|
||||||
groupInvited: "Pozvat do skupiny"
|
|
||||||
aboutX: "O {x}"
|
|
||||||
useOsNativeEmojis: "Použití nativních emoji operačního systému"
|
|
||||||
youHaveNoGroups: "Nemáte žádné skupiny"
|
|
||||||
joinOrCreateGroup: "Můžete požádat o pozvání do stávající skupiny nebo vytvořit novou."
|
|
||||||
noHistory: "Žádná historie"
|
|
||||||
signinHistory: "Historie přihlášení"
|
|
||||||
category: "Kategorie"
|
|
||||||
tags: "Štítky"
|
|
||||||
createAccount: "Vytvořit účet"
|
|
||||||
existingAccount: "Existující účet"
|
|
||||||
regenerate: "Obnovit"
|
|
||||||
fontSize: "Velikost písma"
|
|
||||||
openImageInNewTab: "Otevřít obrázek v novém panelu"
|
|
||||||
dashboard: "Přehled"
|
|
||||||
local: "Lokální"
|
|
||||||
remote: "Vzdálené"
|
|
||||||
total: "Celkem"
|
|
||||||
weekOverWeekChanges: "Týdně"
|
|
||||||
dayOverDayChanges: "Denně"
|
|
||||||
appearance: "Vzhled"
|
|
||||||
clientSettings: "Nastavení klienta"
|
|
||||||
accountSettings: "Nastavení účtu"
|
|
||||||
promotion: "Propagace"
|
|
||||||
promote: "Propagovat"
|
|
||||||
numberOfDays: "Počet dní"
|
|
||||||
objectStorageBaseUrl: "Base URL"
|
|
||||||
objectStorageBucket: "Bucket"
|
|
||||||
objectStoragePrefix: "Předpona"
|
|
||||||
objectStorageEndpoint: "Endpoint"
|
|
||||||
objectStorageRegion: "Región"
|
|
||||||
objectStorageUseSSL: "Použít SSL"
|
|
||||||
deleteAll: "Smazat vše"
|
|
||||||
showFixedPostForm: "Zobrazit formulář pro nové příspěvky nad časovou osou"
|
|
||||||
listen: "Poslouchat"
|
|
||||||
showInPage: "Zobrazit na stránce"
|
|
||||||
popout: "Pop-out"
|
|
||||||
volume: "Hlasitost"
|
|
||||||
masterVolume: "Celková hlasitost"
|
|
||||||
details: "Detaily"
|
|
||||||
chooseEmoji: "Vybrat emotikon"
|
|
||||||
unableToProcess: "Operace nebyla dokončena."
|
|
||||||
recentUsed: "Naposledy použité"
|
|
||||||
install: "Nainstalovat"
|
|
||||||
uninstall: "Odinstalovat"
|
|
||||||
installedApps: "Autorizované aplikace"
|
|
||||||
nothing: "Nic nebylo nalezeno"
|
|
||||||
lastUsedDate: "Poslední použití"
|
|
||||||
state: "Stav"
|
|
||||||
sort: "Seřadit"
|
|
||||||
ascendingOrder: "Vzestupně"
|
|
||||||
descendingOrder: "Sestupně"
|
|
||||||
scratchpad: "Zápisník"
|
|
||||||
output: "Výstup"
|
|
||||||
script: "Skript"
|
|
||||||
updateRemoteUser: "Aktualizovat informace o vzdáleném účtu"
|
|
||||||
deleteAllFiles: "Smazat všechny soubory"
|
|
||||||
deleteAllFilesConfirm: "Jste si jistí že chcete smazat všechny soubory?"
|
|
||||||
userSuspended: "Tomuto uživateli byl pozastaven účet."
|
|
||||||
menu: "Menu"
|
|
||||||
divider: "Dělící čára"
|
|
||||||
addItem: "Přidat položku"
|
|
||||||
relays: "Relay"
|
|
||||||
addRelay: "Přidat Relay"
|
|
||||||
inboxUrl: "Inbox URL"
|
|
||||||
deletedNote: "Odstraněné příspěvky"
|
|
||||||
invisibleNote: "Skryté příspěvky"
|
|
||||||
description: "Popis"
|
|
||||||
author: "Autor"
|
|
||||||
manage: "Administrace"
|
|
||||||
width: "Šířka"
|
|
||||||
height: "Výška"
|
|
||||||
large: "Velké"
|
|
||||||
medium: "Střední"
|
|
||||||
small: "Malé"
|
|
||||||
generateAccessToken: "Vygenerovat přístupový token"
|
|
||||||
permission: "Oprávnění"
|
|
||||||
enableAll: "Povolit vše"
|
|
||||||
disableAll: "Vypnout vše"
|
|
||||||
notificationType: "Typy oznámení"
|
|
||||||
edit: "Upravit"
|
|
||||||
emailServer: "Mailový server"
|
|
||||||
enableEmail: "Zapnout email dystribuci"
|
|
||||||
email: "Email"
|
|
||||||
emailAddress: "Emailová adresa"
|
|
||||||
smtpConfig: "Konfigurace SMTP serveru"
|
|
||||||
smtpHost: "Hostitel"
|
|
||||||
smtpPort: "Port"
|
|
||||||
smtpUser: "Uživatelské jméno"
|
|
||||||
smtpPass: "Heslo"
|
|
||||||
smtpSecureInfo: "Toto vypněte pokud používáte STARTTLS"
|
|
||||||
testEmail: "Otestovat doručení emailů"
|
|
||||||
makeActive: "Aktivovat"
|
|
||||||
display: "Zobrazit"
|
|
||||||
copy: "Kopírovat"
|
|
||||||
metrics: "Metriky"
|
|
||||||
overview: "Shrnutí"
|
|
||||||
logs: "Logy"
|
|
||||||
delayed: "Prodleva"
|
|
||||||
database: "Databáze"
|
|
||||||
channel: "Kanály"
|
|
||||||
create: "Vytvořit"
|
|
||||||
notificationSetting: "Nastavení oznámení"
|
|
||||||
useGlobalSetting: "Použít globální nastavení"
|
|
||||||
other: "Ostatní"
|
|
||||||
fileIdOrUrl: "ID nebo URL souboru"
|
|
||||||
behavior: "Chování"
|
|
||||||
sample: "Ukázka"
|
|
||||||
send: "Odeslat"
|
|
||||||
openInNewTab: "Otevřít v nové kartě"
|
|
||||||
random: "Náhodně"
|
|
||||||
system: "Systém"
|
|
||||||
desktop: "Plocha"
|
|
||||||
clip: "Oříznout"
|
|
||||||
createNew: "Vytvořit nový"
|
|
||||||
optional: "Volitelné"
|
|
||||||
yes: "Ano"
|
|
||||||
no: "Ne"
|
|
||||||
notSet: "Není nastaveno"
|
|
||||||
emailVerified: "Váš e-mail byl ověřen"
|
|
||||||
contact: "Kontakt"
|
|
||||||
useSystemFont: "Použít výchozí font systému"
|
|
||||||
clips: "Oříznout"
|
|
||||||
experimentalFeatures: "Experimentální funkce"
|
|
||||||
developer: "Vývojář"
|
|
||||||
duplicate: "Duplikovat"
|
|
||||||
left: "Vlevo"
|
|
||||||
center: "Uprostřed"
|
|
||||||
wide: "Široké"
|
|
||||||
narrow: "Úzké"
|
|
||||||
clearCache: "Vyprázdnit mezipaměť"
|
|
||||||
nUsers: "{n} užívatelů"
|
|
||||||
nNotes: "{n} poznámek"
|
|
||||||
myTheme: "Moje vzhledy"
|
|
||||||
backgroundColor: "Pozadí"
|
|
||||||
accentColor: "Akcent"
|
|
||||||
textColor: "Barva textu"
|
|
||||||
saveAs: "Uložit jako…"
|
|
||||||
advanced: "Pokročilé"
|
|
||||||
value: "Hodnota"
|
|
||||||
createdAt: "Vytvořeno"
|
|
||||||
updatedAt: "Upraveno"
|
|
||||||
saveConfirm: "Uložit změny?"
|
|
||||||
deleteConfirm: "Opravdu smazat?"
|
|
||||||
invalidValue: "Neplatná hodnota."
|
|
||||||
registry: "Registr"
|
|
||||||
info: "Informace"
|
|
||||||
unknown: "Neznámý"
|
|
||||||
onlineStatus: "Online status"
|
|
||||||
hideOnlineStatus: "Skrýt Váš online status"
|
|
||||||
hideOnlineStatusDescription: "Skrytí vašeho online stavu může snížit funkcionalitu některých funkcí, například vyhledávání."
|
|
||||||
online: "Online"
|
|
||||||
active: "Aktivní"
|
|
||||||
offline: "Offline"
|
|
||||||
notRecommended: "Nedoporučuje se"
|
|
||||||
botProtection: "Bot ochrana"
|
|
||||||
instanceBlocking: "Blokované instance"
|
|
||||||
selectAccount: "Vybrat účet"
|
|
||||||
switchAccount: "Přepnout účet"
|
|
||||||
enabled: "Zapnuto"
|
|
||||||
disabled: "Vypnuto"
|
|
||||||
quickAction: "Rychlé akce"
|
|
||||||
user: "Uživatelé"
|
|
||||||
administration: "Administrace"
|
|
||||||
accounts: "Účty"
|
|
||||||
switch: "Přepnout"
|
|
||||||
configure: "Nastavit"
|
|
||||||
gallery: "Galerie"
|
|
||||||
recentPosts: "Poslední příspěvky"
|
|
||||||
ads: "Reklamy"
|
|
||||||
memo: "Memo"
|
|
||||||
priority: "Priorita"
|
|
||||||
high: "Vysoká"
|
|
||||||
middle: "Střední"
|
|
||||||
low: "Nízká"
|
|
||||||
emailNotConfiguredWarning: "E-mailová adresa není nastavena."
|
|
||||||
ratio: "Poměr"
|
|
||||||
global: "Globální"
|
|
||||||
sent: "Odeslat"
|
|
||||||
hashtags: "Hashtagy"
|
|
||||||
troubleshooting: "Poradce při potížích"
|
|
||||||
whatIsNew: "Zobrazit změny"
|
|
||||||
translate: "Přeložit"
|
|
||||||
hide: "Skrýt"
|
|
||||||
smartphone: "Telefon"
|
|
||||||
tablet: "Tablet"
|
|
||||||
auto: "Auto"
|
|
||||||
size: "Velikost"
|
|
||||||
numberOfColumn: "Počet sloupců"
|
|
||||||
searchByGoogle: "Vyhledávání"
|
|
||||||
indefinitely: "Navždy"
|
|
||||||
tenMinutes: "10 minut"
|
|
||||||
oneHour: "1 hodina"
|
|
||||||
oneDay: "1 den"
|
|
||||||
oneWeek: "1 týden"
|
|
||||||
reflectMayTakeTime: "Může trvat nějakou dobu, než se projeví změny."
|
|
||||||
cropImage: "Oříznout obrázek"
|
|
||||||
file: "Soubor(ů)"
|
|
||||||
recentNHours: "Posledních {n} hodin"
|
|
||||||
recentNDays: "Posledních {n} dnů"
|
|
||||||
recommended: "Doporučeno"
|
|
||||||
deleteAccount: "Odstranit účet"
|
|
||||||
document: "Dokumentace"
|
|
||||||
logoutConfirm: "Opravdu se chcete odhlásit?"
|
|
||||||
pleaseSelect: "Vybrat možnost"
|
|
||||||
reverse: "Otočit"
|
|
||||||
colored: "Barevné"
|
|
||||||
type: "Typ"
|
|
||||||
speed: "Rychlost"
|
|
||||||
slow: "Pomalá"
|
|
||||||
fast: "Rychlá"
|
|
||||||
account: "Účty"
|
|
||||||
_ad:
|
|
||||||
back: "Zpět"
|
|
||||||
_gallery:
|
|
||||||
my: "Moje galerie"
|
|
||||||
_email:
|
|
||||||
_follow:
|
|
||||||
title: "Máte nového následovníka"
|
|
||||||
_plugin:
|
|
||||||
install: "Instalovat plugin"
|
|
||||||
manage: "Správce pluginů"
|
|
||||||
_preferencesBackups:
|
|
||||||
list: "Vytvořit backup"
|
|
||||||
loadFile: "Načíst ze souboru"
|
|
||||||
save: "Uložit změny"
|
|
||||||
_registry:
|
|
||||||
scope: "Rozsah"
|
|
||||||
key: "Klíč"
|
|
||||||
keys: "Klíče"
|
|
||||||
domain: "Doména"
|
|
||||||
createKey: "Vytvořit klíč"
|
|
||||||
_aboutMisskey:
|
|
||||||
allContributors: "Všichni přispěvatelé"
|
|
||||||
source: "Zdrojový kód"
|
|
||||||
_mfm:
|
|
||||||
mention: "Zmínění"
|
|
||||||
hashtag: "Hashtag"
|
|
||||||
link: "Odkaz"
|
|
||||||
bold: "Tučně"
|
|
||||||
quote: "Citovat"
|
|
||||||
emoji: "Vlastní emoji"
|
|
||||||
search: "Vyhledávání"
|
|
||||||
flip: "Otočit"
|
|
||||||
tada: "Animace (tadá)"
|
|
||||||
blur: "Rozmazání"
|
|
||||||
font: "Font"
|
|
||||||
rainbow: "Duha"
|
|
||||||
_channel:
|
|
||||||
featured: "Trendy"
|
|
||||||
_menuDisplay:
|
|
||||||
top: "Nahoru"
|
|
||||||
hide: "Skrýt"
|
|
||||||
_theme:
|
|
||||||
install: "Nainstalovat vzhled"
|
|
||||||
manage: "Správa vzhledů"
|
|
||||||
code: "Kód vzhledu"
|
|
||||||
description: "Popis"
|
|
||||||
installedThemes: "Nainstalované vzhledy"
|
|
||||||
constant: "Konstanta"
|
|
||||||
defaultValue: "Výchozí hodnota"
|
|
||||||
color: "Barva"
|
|
||||||
key: "Klíč"
|
|
||||||
func: "Funkce "
|
|
||||||
keys:
|
|
||||||
shadow: "Stín"
|
|
||||||
header: "Nadpis"
|
|
||||||
link: "Odkaz"
|
|
||||||
hashtag: "Hashtag"
|
|
||||||
mention: "Zmínění"
|
|
||||||
renote: "Přeposlat"
|
|
||||||
divider: "Dělící čára"
|
|
||||||
_sfx:
|
|
||||||
note: "Poznámky"
|
|
||||||
notification: "Oznámení"
|
|
||||||
chat: "Zprávy"
|
|
||||||
_ago:
|
|
||||||
future: "Budoucí"
|
|
||||||
justNow: "Teď"
|
|
||||||
_time:
|
|
||||||
second: "Sekund"
|
|
||||||
minute: "Minut"
|
|
||||||
hour: "Hodin"
|
|
||||||
_2fa:
|
|
||||||
registerDevice: "Přidat zařízení"
|
|
||||||
registerKey: "Přidat bezpečnostní klíč"
|
|
||||||
_weekday:
|
|
||||||
sunday: "Neděle"
|
|
||||||
monday: "Pondělí"
|
|
||||||
tuesday: "Úterý"
|
|
||||||
wednesday: "Středa"
|
|
||||||
thursday: "Čtvrtek"
|
|
||||||
friday: "Pátek"
|
|
||||||
saturday: "Sobota"
|
|
||||||
_widgets:
|
|
||||||
notifications: "Oznámení"
|
|
||||||
timeline: "Časová osa"
|
|
||||||
calendar: "Kalendář"
|
|
||||||
trends: "Trendy"
|
|
||||||
clock: "Hodiny"
|
|
||||||
rss: "RSS čtečka"
|
|
||||||
activity: "Aktivita"
|
|
||||||
photos: "Fotky"
|
|
||||||
digitalClock: "Digitální hodiny"
|
|
||||||
federation: "Federace"
|
|
||||||
slideshow: "Prezentace"
|
|
||||||
button: "Tlačítko"
|
|
||||||
onlineUsers: "Online uživatelé"
|
|
||||||
jobQueue: "Fronta úloh"
|
|
||||||
aiscript: "AiScript conzole"
|
|
||||||
aichan: "Ai"
|
|
||||||
_cw:
|
|
||||||
hide: "Skrýt"
|
|
||||||
show: "Zobrazit více"
|
|
||||||
_poll:
|
|
||||||
noMore: "Více už přidat nemůžete"
|
|
||||||
infinite: "Nikdy"
|
|
||||||
deadlineDate: "Datum ukončení"
|
|
||||||
deadlineTime: "Hodin"
|
|
||||||
duration: "Trvání"
|
|
||||||
_visibility:
|
|
||||||
home: "Domů"
|
|
||||||
followers: "Sledující"
|
|
||||||
_postForm:
|
|
||||||
_placeholders:
|
|
||||||
f: "Čekám, až něco napíšete..."
|
|
||||||
_profile:
|
|
||||||
name: "Jméno"
|
|
||||||
username: "Uživatelské jméno"
|
|
||||||
description: "O mně"
|
|
||||||
youCanIncludeHashtags: "V popisku o Vás můžete použít i hastagy."
|
|
||||||
metadata: "Doplňující informace"
|
|
||||||
metadataContent: "Obsah"
|
|
||||||
_exportOrImport:
|
|
||||||
allNotes: "Všechny poznámky"
|
|
||||||
followingList: "Sledovaní"
|
|
||||||
muteList: "Ztlumit"
|
|
||||||
blockingList: "Zablokovat"
|
|
||||||
userLists: "Seznamy"
|
|
||||||
_charts:
|
|
||||||
federation: "Federace"
|
|
||||||
apRequest: "Požadavek"
|
|
||||||
usersTotal: "Celkem uživatelů"
|
|
||||||
activeUsers: "Aktivní uživatelé"
|
|
||||||
notesTotal: "Celkový počet poznámek"
|
|
||||||
_timelines:
|
|
||||||
home: "Domů"
|
|
||||||
global: "Globální"
|
|
||||||
_pages:
|
|
||||||
newPage: "Vytvořit novou stránku"
|
|
||||||
editPage: "Upravit stránku"
|
|
||||||
created: "Stránka byla úspěšně vytvořena"
|
|
||||||
updated: "Stránka byla úspěšně aktualizována"
|
|
||||||
deleted: "Stránka byla úspěšně smazána"
|
|
||||||
pageSetting: "Nastavení stránky"
|
|
||||||
invalidNameText: "Ujistěte se že jméno stránky je vyplněno"
|
|
||||||
contents: "Obsah"
|
|
||||||
fontSerif: "Serif"
|
|
||||||
fontSansSerif: "Sans Serif"
|
|
||||||
chooseBlock: "Přidat blok"
|
|
||||||
selectType: "Vyberte typ"
|
|
||||||
contentBlocks: "Obsah"
|
|
||||||
inputBlocks: "Vstup"
|
|
||||||
specialBlocks: "Speciální"
|
|
||||||
blocks:
|
|
||||||
text: "Text"
|
|
||||||
textarea: "Textové pole"
|
|
||||||
section: "Sekce"
|
|
||||||
image: "Obrázky"
|
|
||||||
button: "Tlačítko"
|
|
||||||
if: "Pokud"
|
|
||||||
_if:
|
|
||||||
variable: "Proměnná"
|
|
||||||
_post:
|
|
||||||
text: "Obsah"
|
|
||||||
canvasId: "Canvas ID"
|
|
||||||
_textInput:
|
|
||||||
name: "Jméno proměnné"
|
|
||||||
text: "Titulek"
|
|
||||||
default: "Výchozí hodnota"
|
|
||||||
_textareaInput:
|
|
||||||
name: "Jméno proměnné"
|
|
||||||
text: "Titulek"
|
|
||||||
default: "Výchozí hodnota"
|
|
||||||
_numberInput:
|
|
||||||
name: "Jméno proměnné"
|
|
||||||
text: "Titulek"
|
|
||||||
default: "Výchozí hodnota"
|
|
||||||
canvas: "Canvas"
|
|
||||||
_canvas:
|
|
||||||
id: "Canvas ID"
|
|
||||||
width: "Šířka"
|
|
||||||
height: "Výška"
|
|
||||||
_switch:
|
|
||||||
name: "Jméno proměnné"
|
|
||||||
text: "Titulek"
|
|
||||||
default: "Výchozí hodnota"
|
|
||||||
_counter:
|
|
||||||
name: "Jméno proměnné"
|
|
||||||
text: "Titulek"
|
|
||||||
inc: "Krok"
|
|
||||||
_button:
|
|
||||||
text: "Titulek"
|
|
||||||
colored: "Barevné"
|
|
||||||
_action:
|
|
||||||
_dialog:
|
|
||||||
content: "Obsah"
|
|
||||||
_radioButton:
|
|
||||||
name: "Jméno proměnné"
|
|
||||||
default: "Výchozí hodnota"
|
|
||||||
script:
|
|
||||||
categories:
|
|
||||||
list: "Seznamy"
|
|
||||||
blocks:
|
|
||||||
text: "Text"
|
|
||||||
_strLen:
|
|
||||||
arg1: "Text"
|
|
||||||
_strPick:
|
|
||||||
arg1: "Text"
|
|
||||||
_strReplace:
|
|
||||||
arg1: "Text"
|
|
||||||
_strReverse:
|
|
||||||
arg1: "Text"
|
|
||||||
_join:
|
|
||||||
arg1: "Seznamy"
|
|
||||||
_subtract:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
_multiply:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
_divide:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
_mod:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
round: "Zaokrouhlení zlomku"
|
|
||||||
_round:
|
|
||||||
arg1: "Číselná hodnota"
|
|
||||||
eq: "A a B jsou stejné"
|
|
||||||
_eq:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
notEq: "A a B jsou odlišné"
|
|
||||||
_notEq:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
_and:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
_or:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
_lt:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
_gt:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
_ltEq:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
_gtEq:
|
|
||||||
arg1: "A"
|
|
||||||
arg2: "B"
|
|
||||||
if: "Větev"
|
|
||||||
_if:
|
|
||||||
arg1: "Pokud"
|
|
||||||
arg2: "Potom"
|
|
||||||
arg3: "Nebo"
|
|
||||||
random: "Náhodně"
|
|
||||||
_random:
|
|
||||||
arg1: "Pravděpodobnost"
|
|
||||||
rannum: "Náhodné číslo"
|
|
||||||
_rannum:
|
|
||||||
arg1: "Minimální hodnota"
|
|
||||||
arg2: "Maximální hodnota"
|
|
||||||
_randomPick:
|
|
||||||
arg1: "Seznamy"
|
|
||||||
_dailyRandom:
|
|
||||||
arg1: "Pravděpodobnost"
|
|
||||||
_dailyRannum:
|
|
||||||
arg1: "Minimální hodnota"
|
|
||||||
arg2: "Maximální hodnota"
|
|
||||||
_dailyRandomPick:
|
|
||||||
arg1: "Seznamy"
|
|
||||||
_seedRandom:
|
|
||||||
arg2: "Pravděpodobnost"
|
|
||||||
_seedRannum:
|
|
||||||
arg2: "Minimální hodnota"
|
|
||||||
arg3: "Maximální hodnota"
|
|
||||||
_seedRandomPick:
|
|
||||||
arg2: "Seznamy"
|
|
||||||
_pick:
|
|
||||||
arg1: "Seznamy"
|
|
||||||
_listLen:
|
|
||||||
arg1: "Seznamy"
|
|
||||||
number: "Číselná hodnota"
|
|
||||||
_stringToNumber:
|
|
||||||
arg1: "Text"
|
|
||||||
_numberToString:
|
|
||||||
arg1: "Číselná hodnota"
|
|
||||||
_splitStrByLine:
|
|
||||||
arg1: "Text"
|
|
||||||
types:
|
|
||||||
string: "Text"
|
|
||||||
number: "Číselná hodnota"
|
|
||||||
array: "Seznamy"
|
|
||||||
_notification:
|
|
||||||
youWereFollowed: "Máte nového následovníka"
|
|
||||||
youWereInvitedToGroup: "Pozvat do skupiny"
|
|
||||||
_types:
|
|
||||||
all: "Vše"
|
|
||||||
follow: "Sledovaní"
|
|
||||||
mention: "Zmínění"
|
|
||||||
reply: "Odpovědi"
|
|
||||||
renote: "Přeposlat"
|
|
||||||
quote: "Citovat"
|
|
||||||
reaction: "Reakce"
|
|
||||||
_actions:
|
|
||||||
reply: "Odpovědět"
|
|
||||||
renote: "Přeposlat"
|
|
||||||
_deck:
|
|
||||||
_columns:
|
|
||||||
notifications: "Oznámení"
|
|
||||||
tl: "Časová osa"
|
|
||||||
antenna: "Antény"
|
|
||||||
list: "Seznamy"
|
|
||||||
mentions: "Zmínění"
|
|
||||||
|
|
1244
locales/de-DE.yml
1282
locales/en-US.yml
|
@ -1 +0,0 @@
|
||||||
---
|
|
|
@ -1 +0,0 @@
|
||||||
---
|
|
1668
locales/id-ID.yml
|
@ -15,28 +15,17 @@ const merge = (...args) => args.reduce((a, c) => ({
|
||||||
|
|
||||||
const languages = [
|
const languages = [
|
||||||
'ar-SA',
|
'ar-SA',
|
||||||
'cs-CZ',
|
//'cs-CZ',
|
||||||
'da-DK',
|
//'da-DK',
|
||||||
'de-DE',
|
'de-DE',
|
||||||
'en-US',
|
'en-US',
|
||||||
'es-ES',
|
'es-ES',
|
||||||
'fr-FR',
|
'fr-FR',
|
||||||
'id-ID',
|
|
||||||
'it-IT',
|
|
||||||
'ja-JP',
|
'ja-JP',
|
||||||
'ja-KS',
|
'ja-KS',
|
||||||
'kab-KAB',
|
|
||||||
'kn-IN',
|
|
||||||
'ko-KR',
|
'ko-KR',
|
||||||
'nl-NL',
|
//'nl-NL',
|
||||||
'no-NO',
|
//'pl-PL',
|
||||||
'pl-PL',
|
|
||||||
'pt-PT',
|
|
||||||
'ru-RU',
|
|
||||||
'sk-SK',
|
|
||||||
'ug-CN',
|
|
||||||
'uk-UA',
|
|
||||||
'vi-VN',
|
|
||||||
'zh-CN',
|
'zh-CN',
|
||||||
'zh-TW',
|
'zh-TW',
|
||||||
];
|
];
|
||||||
|
@ -47,10 +36,7 @@ const primaries = {
|
||||||
'zh': 'CN',
|
'zh': 'CN',
|
||||||
};
|
};
|
||||||
|
|
||||||
// 何故か文字列にバックスペース文字が混入することがあり、YAMLが壊れるので取り除く
|
const locales = languages.reduce((a, c) => (a[c] = yaml.safeLoad(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8')) || {}, a), {});
|
||||||
const clean = (text) => text.replace(new RegExp(String.fromCodePoint(0x08), 'g'), '');
|
|
||||||
|
|
||||||
const locales = languages.reduce((a, c) => (a[c] = yaml.load(clean(fs.readFileSync(`${__dirname}/${c}.yml`, 'utf-8'))) || {}, a), {});
|
|
||||||
|
|
||||||
module.exports = Object.entries(locales)
|
module.exports = Object.entries(locales)
|
||||||
.reduce((a, [k ,v]) => (a[k] = (() => {
|
.reduce((a, [k ,v]) => (a[k] = (() => {
|
||||||
|
|