Skip to content

Commit

Permalink
Merge branch 'kb_development' into kb_migration
Browse files Browse the repository at this point in the history
  • Loading branch information
kmycode committed Sep 12, 2023
2 parents 75b39e5 + 3707153 commit bf41ee1
Show file tree
Hide file tree
Showing 61 changed files with 561 additions and 93 deletions.
5 changes: 5 additions & 0 deletions .env.test
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,8 @@ NODE_ENV=tests
# Federation
LOCAL_DOMAIN=cb6e6126.ngrok.io
LOCAL_HTTPS=true
# Elasticsearch
ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
ES_PREFIX=test
2 changes: 2 additions & 0 deletions .github/workflows/test-ruby.yml
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,7 @@ jobs:
CAS_ENABLED: true
BUNDLE_WITH: 'pam_authentication test'
CI_JOBS: ${{ matrix.ci_job }}/4
ES_ENABLED: false

strategy:
fail-fast: false
Expand Down Expand Up @@ -192,6 +193,7 @@ jobs:
DISABLE_SIMPLECOV: true
RAILS_ENV: test
BUNDLE_WITH: test
ES_ENABLED: false

strategy:
fail-fast: false
Expand Down
56 changes: 23 additions & 33 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,46 +1,36 @@
# Contributing
# CONTRIBUTING

Thank you for considering contributing to Mastodon 🐘
kmyblueは、コミュニティの意見も聞くには聞きますが導入する・しないは管理人が決定します。

You can contribute in the following ways:
## バグ報告

- Finding and reporting bugs
- Translating the Mastodon interface into various languages
- Contributing code to Mastodon by fixing bugs or implementing features
- Improving the documentation
バグについて、最新よりも過去のバージョンへの対応は特別な場合以外は行いません。

If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon).
以下のいずれかの方法で報告してください。

## Bug reports
- [GitHub Issues](https://github.com/kmycode/mastodon/issues)
- [kmyblue開発者への連絡](https://kmy.blue/@askyq)
- [kmyblue開発者へのメール](https://kmy.blue/about)

Bug reports and feature suggestions must use descriptive and concise titles and be submitted to [GitHub Issues](https://github.com/mastodon/mastodon/issues). Please use the search function to make sure that you are not submitting duplicates, and that a similar report or request has not already been resolved or rejected.
## 翻訳、プルリクエスト

## Translations
新しい機能や既存機能の修正については、プルリクエストのためにコードを作成する前に、まずGitHub Issuesで機能の提案を行いkmyblue開発者の考えを聞くことをおすすめします。バグ修正、翻訳、テストコードなどは基本受け入れますが、依存モジュールのバージョンアップについては本家Mastodonよりも先に行かないようにしてください。

You can submit translations via [Crowdin](https://crowdin.com/project/mastodon). They are periodically merged into the codebase.
プルリクエストのタイトルには、プルリクエストの内容が明確になるようなものを設定してください。

[![Crowdin](https://d322cqt584bo4o.cloudfront.net/mastodon/localized.svg)](https://crowdin.com/project/mastodon)
### kmyblueの開発方針

## Pull requests
下記のものに矛盾がなければ、あとは管理人の意向次第です。

**Please use clean, concise titles for your pull requests.** Unless the pull request is about refactoring code, updating dependencies or other internal tasks, assume that the person reading the pull request title is not a programmer or Mastodon developer, but instead a Mastodon user or server administrator, and **try to describe your change or fix from their perspective**. We use commit squashing, so the final commit in the main branch will carry the title of the pull request, and commits from the main branch are fed into the changelog. The changelog is separated into [keepachangelog.com categories](https://keepachangelog.com/en/1.0.0/), and while that spec does not prescribe how the entries ought to be named, for easier sorting, start your pull request titles using one of the verbs "Add", "Change", "Deprecate", "Remove", or "Fix" (present tense).
- **自分の投稿を見せたくない人に見せない**
- **他人の見たくない投稿を見ない**
- ただし本家Mastodonで上記原則に矛盾した機能が追加された場合は従う
- 画面を騒がしくするような機能(絵文字を大きく表示するなど)は追加しないか、控えめにする。ただし他のソフトウェアにも導入され利用者が多くいる場合などは別途判断して、オプトアウト可能な設定項目とともに追加する
- 負荷を著しく上げるような機能はできるだけ追加しない

Example:
kmyblueが意図的に実装していない機能は、例えば以下のものがあります。詳しい理由が知りたい場合は[この記事を参照するか](https://note.com/kmycode/n/n463410b5e03c)、別途お問い合わせください。もちろん明確な根拠がある場合、あなたはこれに抗議する権利を有しますが、あなたがこのkmyblueをフォークして新しいリポジトリを作るほうがより自由でしょう。

| Not ideal | Better |
| ------------------------------------ | ------------------------------------------------------------- |
| Fixed NoMethodError in RemovalWorker | Fix nil error when removing statuses caused by race condition |

It is not always possible to phrase every change in such a manner, but it is desired.

**The smaller the set of changes in the pull request is, the quicker it can be reviewed and merged.** Splitting tasks into multiple smaller pull requests is often preferable.

**Pull requests that do not pass automated checks may not be reviewed**. In particular, you need to keep in mind:

- Unit and integration tests (rspec, jest)
- Code style rules (rubocop, eslint)
- Normalization of locale files (i18n-tasks)

## Documentation

The [Mastodon documentation](https://docs.joinmastodon.org) is a statically generated site. You can [submit merge requests to mastodon/documentation](https://github.com/mastodon/documentation).
- 引用機能
- お気に入り一覧の公開
- ブックマーク分類の公開
- 他のサーバーの投稿に対して他のサーバーのアカウントが行った絵文字リアクションの受け入れ
60 changes: 60 additions & 0 deletions INSTALL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
# kmyblueインストール手順

## 共通の注意事項

### 必須ソフトウェアのバージョン

Ruby、ElasticSearch、ImageMagick、PostgreSQLなど必須ソフトウェアのバージョンは、本家Mastodonに準じます。リリースノートに対応する本家Mastodonバージョンが記載されていますので、本家Mastodonのリリースノートから対応するバージョンを探して調べてください。

### 一般的な注意事項

kmyblueは頻繁にバージョンアップを行います。

- 本家Mastodonの開発中のバージョンを平然と取り込みます
- バグが含まれていることがあります
- 特に最新コミットでは、デバッグ用コードや、`kmy.blue`本番サーバーで動作確認を行うためのコードが含まれている場合があります。ブランチの最新コミットではなく最新タグを取り込むことを強くおすすめします

### ElasticSearchを使用する場合

kmyblueでは、sudachiの使用を前提としています。

下記URLより、ElasticSearchにSudachiプラグインを追加してください。
ただし辞書ファイル(sudachi dictionary archive)は手順書で指示されたパスではなく`/etc/elasticsearch/sudachi`に格納してください。

https://github.com/WorksApplications/elasticsearch-sudachi

Sudachiインストール終了後、追加で`/etc/elasticsearch/sudachi/config.json`に下記を記述して保存してください。`system_full.dic`を使用する場合は適宜`systemDict`プロパティの内容を置き換えてください。

```json
{
"systemDict": "system_core.dic"
}
```

## 新規インストールの場合

1. 本家Mastodonとセットアップ手順はほとんど一緒です。kmyblueが独自に必須ソフトウェアを追加したわけではありません。ただしkmyblueはMastodonの開発中コードを取り込んでいるので、Rubyなどのバージョンアップ作業が必要になる場合があります。Mastodon公式のセットアップ手順を盲信せず、画面の指示に従ってインストールを進めてください。CloudFlareを組み合わせてセットアップしたとき、サーバーに接続すると400が出るなどのトラブルが出ることがありますが、大抵はMastodon本家由来のトラブルだと思われるので基本サポートはしません
2. ただひとつ差異があります。Gitリポジトリはこのkmyblueに向けてください。`kb_development`ブランチの最新コミットではなく、`kb`で始まる最新のタグを取り込むことを強くおすすめします

## 本家Mastodonからのマイグレーションの場合

kmyblueから本家Mastodonに戻りたい場合もあると思いますので、**必ずデータベースのバックアップをとってください**

1. kmyblueのリリースノートに、kmyblueバージョンに対応した本家Mastodonのバージョンが記載されています。それを参照して、まず本家Mastodonをそのバージョンまでバージョンアップしてください
2. Gitのリモートにkmyblueを追加して、そのままチェックアウトしてください
3. データベースのマイグレーションなどを行ってください

```
sudo systemctl stop mastodon-*
bundle install
yarn install
RAILS_ENV=production bin/rails db:migrate
RAILS_ENV=production bin/rails assets:clobber
RAILS_ENV=production bin/rails assets:precompile
# ElasticSearchを使用する場合
RAILS_ENV=production bin/tootctl search deploy
sudo systemctl start mastodon-web mastodon-streaming@4000 mastodon-sidekiq
```
12 changes: 10 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,19 @@ kmyblueは[Mastodon](https://github.com/mastodon/mastodon)のフォークです

kmyblueはフォーク名であり、同時に[サーバー名](https://kmy.blue)でもあります。以下は特に記述がない限り、フォークとしてのkmyblueをさします。

kmyblueは AGPL ライセンスで公開されているため、どなたでも自由にフォークし、このソースコードを元に自分でサーバーを立てて公開することができます。また ActivityPub に参加することもできます。サーバーkmyblueは創作作家向けのものですが、フォークとしてのkmyblueは作者の嫌いな政治に関する過激な話を取り扱うコミュニティ、創作活動の一部(エロ関係含む)または全体を否定するコミュニティなども平等にお使いいただけますし、サーバーkmyblueのルールを適用する必要もありません
ただしkmyblueにおいてテストコードは飾りでしかないため、不具合が発生しても自己責任になります。既知のバグもいくつかありますし、直す予定のないものも含まれます。
kmyblueは AGPL ライセンスで公開されているため、どなたでも自由にフォークし、このソースコードを元に自分でサーバーを立てて公開することができます。また ActivityPub に参加することもできます。確かにサーバーkmyblueは創作作家向けのものですが、フォークとしてのkmyblueは作者と政治的に対立するコミュニティ、創作活動の一部(エロ関係含む)または全体を否定するコミュニティなどにも平等にお使いいただけます。いかなるコミュニティがkmyblueフォークを使用しても、それ自体に作者が抗議することもありません。サーバーkmyblueのルールを適用する必要もなく、「Anyone But Kmyblue」なルールを設定することすら許容されます
ただしkmyblueにおいて**テストコードは飾り**でしかありません。独自機能のテストを記述するだけでなく、本家のテストコードの補強も行っておりますが、確認漏れは必ず発生するものです。不具合が発生しても自己責任になります。既知のバグもいくつかありますし、直す予定のないものも含まれます。

テストコード、Lint どちらも動いています。

## インストール方法

INSTALL.mdを参照してください。

## 開発への参加方法

CONTRIBUTING.mdを参照してください。

## kmyblueの強み

### 本家Mastodonへの積極的追従
Expand Down
71 changes: 69 additions & 2 deletions app/chewy/accounts_index.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,72 @@
# frozen_string_literal: true

class AccountsIndex < Chewy::Index
settings index: index_preset(refresh_interval: '30s'), analysis: {
DEVELOPMENT_SETTINGS = {
filter: {
english_stop: {
type: 'stop',
stopwords: '_english_',
},

english_stemmer: {
type: 'stemmer',
language: 'english',
},

english_possessive_stemmer: {
type: 'stemmer',
language: 'possessive_english',
},
},

analyzer: {
natural: {
tokenizer: 'standard',
filter: %w(
lowercase
asciifolding
cjk_width
elision
english_possessive_stemmer
english_stop
english_stemmer
),
},

sudachi_analyzer: {
tokenizer: 'standard',
filter: %w(
lowercase
asciifolding
cjk_width
elision
english_possessive_stemmer
english_stop
english_stemmer
),
},

verbatim: {
tokenizer: 'standard',
filter: %w(lowercase asciifolding cjk_width),
},

edge_ngram: {
tokenizer: 'edge_ngram',
filter: %w(lowercase asciifolding cjk_width),
},
},

tokenizer: {
edge_ngram: {
type: 'edge_ngram',
min_gram: 1,
max_gram: 15,
},
},
}.freeze

PRODUCTION_SETTINGS = {
filter: {
english_stop: {
type: 'stop',
Expand Down Expand Up @@ -77,7 +142,9 @@ class AccountsIndex < Chewy::Index
discard_punctuation: 'true',
},
},
}
}.freeze

settings index: index_preset(refresh_interval: '30s'), analysis: Rails.env.test? ? DEVELOPMENT_SETTINGS : PRODUCTION_SETTINGS

index_scope ::Account.searchable.includes(:account_stat)

Expand Down
15 changes: 14 additions & 1 deletion app/chewy/public_statuses_index.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,19 @@ class PublicStatusesIndex < Chewy::Index
),
},

sudachi_analyzer: {
tokenizer: 'standard',
filter: %w(
lowercase
asciifolding
cjk_width
elision
english_possessive_stemmer
english_stop
english_stemmer
),
},

hashtag: {
tokenizer: 'keyword',
filter: %w(
Expand Down Expand Up @@ -126,7 +139,7 @@ class PublicStatusesIndex < Chewy::Index
},
}.freeze

settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: PRODUCTION_SETTINGS
settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: Rails.env.test? ? DEVELOPMENT_SETTINGS : PRODUCTION_SETTINGS

index_scope ::Status.unscoped
.kept
Expand Down
15 changes: 14 additions & 1 deletion app/chewy/statuses_index.rb
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,19 @@ class StatusesIndex < Chewy::Index
),
},

sudachi_analyzer: {
tokenizer: 'standard',
filter: %w(
lowercase
asciifolding
cjk_width
elision
english_possessive_stemmer
english_stop
english_stemmer
),
},

hashtag: {
tokenizer: 'keyword',
filter: %w(
Expand Down Expand Up @@ -129,7 +142,7 @@ class StatusesIndex < Chewy::Index
},
}.freeze

settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: PRODUCTION_SETTINGS
settings index: index_preset(refresh_interval: '30s', number_of_shards: 5), analysis: Rails.env.test? ? DEVELOPMENT_SETTINGS : PRODUCTION_SETTINGS

index_scope ::Status.unscoped.kept.without_reblogs.includes(
:media_attachments,
Expand Down
2 changes: 1 addition & 1 deletion app/controllers/api/v1/antennas_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,6 @@ def set_antenna
end

def antenna_params
params.permit(:title, :list_id, :insert_feeds, :stl, :with_media_only, :ignore_reblog)
params.permit(:title, :list_id, :insert_feeds, :stl, :ltl, :with_media_only, :ignore_reblog)
end
end
7 changes: 7 additions & 0 deletions app/controllers/settings/preferences/other_controller.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
# frozen_string_literal: true

class Settings::Preferences::OtherController < Settings::Preferences::BaseController
include DtlHelper

def show
@dtl_enabled = DTL_ENABLED
@dtl_tag = DTL_TAG
end

private

def after_update_redirect_path
Expand Down
6 changes: 6 additions & 0 deletions app/helpers/dtl_helper.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# frozen_string_literal: true

module DtlHelper
DTL_ENABLED = ENV.fetch('DTL_ENABLED', 'false') == 'true'
DTL_TAG = ENV.fetch('DTL_TAG', 'kmyblue')
end
Binary file modified app/javascript/icons/android-chrome-144x144.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/android-chrome-192x192.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/android-chrome-256x256.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/android-chrome-36x36.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/android-chrome-384x384.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/android-chrome-48x48.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/android-chrome-512x512.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/android-chrome-72x72.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/android-chrome-96x96.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-1024x1024.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-114x114.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-120x120.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-144x144.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-152x152.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-167x167.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-180x180.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-57x57.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-60x60.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-72x72.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/apple-touch-icon-76x76.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/favicon-16x16.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/favicon-32x32.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file modified app/javascript/icons/favicon-48x48.png
100644 → 100755
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions app/javascript/mastodon/actions/antennas.js
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,10 @@ export const createAntennaFail = error => ({
error,
});

export const updateAntenna = (id, title, shouldReset, list_id, stl, with_media_only, ignore_reblog, insert_feeds) => (dispatch, getState) => {
export const updateAntenna = (id, title, shouldReset, list_id, stl, ltl, with_media_only, ignore_reblog, insert_feeds) => (dispatch, getState) => {
dispatch(updateAntennaRequest(id));

api(getState).put(`/api/v1/antennas/${id}`, { title, list_id, stl, with_media_only, ignore_reblog, insert_feeds }).then(({ data }) => {
api(getState).put(`/api/v1/antennas/${id}`, { title, list_id, stl, ltl, with_media_only, ignore_reblog, insert_feeds }).then(({ data }) => {
dispatch(updateAntennaSuccess(data));

if (shouldReset) {
Expand Down
Loading

0 comments on commit bf41ee1

Please sign in to comment.