forked from naskya/firefish
feat: show changelog on updates
This commit is contained in:
parent
03807b7815
commit
7c887421f4
16 changed files with 116 additions and 29 deletions
|
@ -42,3 +42,6 @@ packages/backend/assets/instance.css
|
|||
.git
|
||||
Dockerfile
|
||||
docker-compose.yml
|
||||
|
||||
# Auto-generated files
|
||||
/neko/volume
|
||||
|
|
|
@ -38,6 +38,8 @@
|
|||
|
||||
## 細かい変更点
|
||||
|
||||
- アップデート時に更新内容を確認できる機能を追加
|
||||
- 英語のメッセージしか出ないけど、日本語に翻訳する機能も欲しいですか?
|
||||
- 依存ライブラリを最新版にアップデート
|
||||
- ちゃんと動くか本家に push する前に実験したいという意図もあります
|
||||
- 中国語の猫モードでは 0.1 の確率で投稿の末尾に「喵」を追加するように
|
||||
|
|
|
@ -19,6 +19,7 @@ services:
|
|||
- ./assets:/firefish/custom/assets
|
||||
- ./files:/firefish/files
|
||||
- ./.config:/firefish/.config:ro
|
||||
- ./neko/volume:/firefish/neko/volume:ro
|
||||
|
||||
redis:
|
||||
restart: unless-stopped
|
||||
|
|
|
@ -917,6 +917,7 @@ useBlurEffect: "Use blur effects in the UI"
|
|||
learnMore: "Learn more"
|
||||
misskeyUpdated: "Firefish has been updated!"
|
||||
whatIsNew: "Show changes"
|
||||
releaseNotes: "Changes"
|
||||
translate: "Translate"
|
||||
translatedFrom: "Translated from {x}"
|
||||
accountDeletionInProgress: "Account deletion is currently in progress"
|
||||
|
|
|
@ -831,6 +831,7 @@ useBlurEffect: "UIにぼかし効果を使用"
|
|||
learnMore: "詳しく"
|
||||
misskeyUpdated: "Firefishが更新されました!"
|
||||
whatIsNew: "更新情報を見る"
|
||||
releaseNotes: "更新情報"
|
||||
translate: "翻訳"
|
||||
translatedFrom: "{x}から翻訳"
|
||||
accountDeletionInProgress: "アカウントの削除が進行中です"
|
||||
|
|
|
@ -801,6 +801,7 @@ useBlurEffect: "在 UI 上使用模糊效果"
|
|||
learnMore: "更多信息"
|
||||
misskeyUpdated: "Firefish 更新完成!"
|
||||
whatIsNew: "显示更新信息"
|
||||
releaseNotes: "更新信息"
|
||||
translate: "翻译"
|
||||
translatedFrom: "从 {x} 翻译"
|
||||
accountDeletionInProgress: "正在删除账号"
|
||||
|
|
|
@ -797,6 +797,7 @@ useBlurEffect: "在 UI 上使用模糊效果"
|
|||
learnMore: "更多資訊"
|
||||
misskeyUpdated: "Firefish 更新完成!"
|
||||
whatIsNew: "顯示更新資訊"
|
||||
releaseNotes: "更新資訊"
|
||||
translate: "翻譯"
|
||||
translatedFrom: "從 {x} 翻譯"
|
||||
accountDeletionInProgress: "正在刪除帳戶"
|
||||
|
|
15
neko/messages/add_volume_to_docker_compose
Normal file
15
neko/messages/add_volume_to_docker_compose
Normal file
|
@ -0,0 +1,15 @@
|
|||
-------------------------------------------------------------------
|
||||
| For Docker users: |
|
||||
| Please add ./neko/volume:/firefish/neko/volume:ro to |
|
||||
| services.web.volumes in your docker-compose.yml before upgrading! |
|
||||
| |
|
||||
| After editing, services.web.volumes should look like this: |
|
||||
| volumes: |
|
||||
| - ./assets:/firefish/custom/assets |
|
||||
| - ./files:/firefish/files |
|
||||
| - ./.config:/firefish/.config:ro |
|
||||
| - ./neko/volume:/firefish/neko/volume:ro <-- add this line |
|
||||
| |
|
||||
| For the detailed explanation, see: |
|
||||
| https://post.naskya.net/notes/9nywqr2nkh0rjoum |
|
||||
-------------------------------------------------------------------
|
4
neko/volume/.gitignore
vendored
Normal file
4
neko/volume/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
# Ignore everything in this directory
|
||||
*
|
||||
# Except this file
|
||||
!.gitignore
|
|
@ -507,7 +507,7 @@ export default define(meta, paramDef, async (ps, me) => {
|
|||
recommendedTimeline: !instance.disableRecommendedTimeline,
|
||||
globalTimeLine: !instance.disableGlobalTimeline,
|
||||
emailRequiredForSignup: instance.emailRequiredForSignup,
|
||||
searchFilters: config.meilisearch ? true : false,
|
||||
searchFilters: false, // TODO: implement search filters
|
||||
hcaptcha: instance.enableHcaptcha,
|
||||
recaptcha: instance.enableRecaptcha,
|
||||
objectStorage: instance.useObjectStorage,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import define from "@/server/api/define.js";
|
||||
import { redisClient } from "@/db/redis.js";
|
||||
// import { redisClient } from "@/db/redis.js";
|
||||
import * as fs from "node:fs";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import { dirname } from "node:path";
|
||||
|
|
|
@ -1,8 +1,15 @@
|
|||
import * as fs from "node:fs/promises";
|
||||
import { dirname } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import define from "@/server/api/define.js";
|
||||
import config from "@/config/index.js";
|
||||
|
||||
const _filename = fileURLToPath(import.meta.url);
|
||||
const _dirname = dirname(_filename);
|
||||
|
||||
export const meta = {
|
||||
tags: ["meta"],
|
||||
description: "Get release notes from Codeberg",
|
||||
description: "Get changelog",
|
||||
|
||||
requireCredential: false,
|
||||
requireCredentialPrivateMode: false,
|
||||
|
@ -14,15 +21,11 @@ export const paramDef = {
|
|||
required: [],
|
||||
} as const;
|
||||
|
||||
export default define(meta, paramDef, async () => {
|
||||
let release;
|
||||
|
||||
await fetch(
|
||||
"https://git.joinfirefish.org/firefish/firefish/-/raw/develop/release.json",
|
||||
)
|
||||
.then((response) => response.json())
|
||||
.then((data) => {
|
||||
release = data;
|
||||
});
|
||||
return release;
|
||||
});
|
||||
export default define(meta, paramDef, async () => ({
|
||||
version: config.version,
|
||||
notes: await fs.readFile(
|
||||
`${_dirname}/../../../../../../neko/volume/CHANGELOG`,
|
||||
"utf-8",
|
||||
),
|
||||
screenshots: [],
|
||||
}));
|
||||
|
|
38
packages/client/src/components/MkReleaseNotesWindow.vue
Normal file
38
packages/client/src/components/MkReleaseNotesWindow.vue
Normal file
|
@ -0,0 +1,38 @@
|
|||
<template>
|
||||
<XWindow
|
||||
:initial-width="800"
|
||||
:can-resize="true"
|
||||
:front="true"
|
||||
@closed="emit('closed')"
|
||||
>
|
||||
<template #header>
|
||||
{{ i18n.ts.releaseNotes }}
|
||||
</template>
|
||||
<div class="asnohbod">
|
||||
<ul>
|
||||
<li v-for="(item, i) in notes" :key="i">{{ item }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</XWindow>
|
||||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import XWindow from "@/components/MkWindow.vue";
|
||||
import { i18n } from "@/i18n";
|
||||
|
||||
defineProps<{
|
||||
notes: string[];
|
||||
}>();
|
||||
|
||||
const emit = defineEmits<{
|
||||
(ev: "closed"): void;
|
||||
}>();
|
||||
</script>
|
||||
|
||||
<style lang="scss" scoped>
|
||||
.asnohbod {
|
||||
white-space: pre-wrap;
|
||||
font-size: 1.2em;
|
||||
padding: 5px 20px 10px;
|
||||
}
|
||||
</style>
|
|
@ -10,7 +10,7 @@
|
|||
<MkSparkle>{{ i18n.ts.misskeyUpdated }}</MkSparkle>
|
||||
</div>
|
||||
<div :class="$style.version">✨ {{ version }} 🚀</div>
|
||||
<div v-if="newRelease" :class="$style.releaseNotes">
|
||||
<!-- <div :class="$style.releaseNotes">
|
||||
<Mfm :text="data.notes" />
|
||||
<div v-if="data.screenshots.length > 0" style="max-width: 500">
|
||||
<img
|
||||
|
@ -20,7 +20,14 @@
|
|||
alt="screenshot"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
</div> -->
|
||||
<MkButton
|
||||
v-if="notes.length > 0"
|
||||
:class="$style.gotIt"
|
||||
full
|
||||
@click="openReleaseNotes"
|
||||
>{{ i18n.ts.whatIsNew }}</MkButton
|
||||
>
|
||||
<MkButton
|
||||
:class="$style.gotIt"
|
||||
primary
|
||||
|
@ -33,7 +40,7 @@
|
|||
</template>
|
||||
|
||||
<script lang="ts" setup>
|
||||
import { ref, shallowRef } from "vue";
|
||||
import { defineAsyncComponent, ref, shallowRef } from "vue";
|
||||
import MkModal from "@/components/MkModal.vue";
|
||||
import MkSparkle from "@/components/MkSparkle.vue";
|
||||
import MkButton from "@/components/MkButton.vue";
|
||||
|
@ -43,18 +50,24 @@ import * as os from "@/os";
|
|||
|
||||
const modal = shallowRef<InstanceType<typeof MkModal>>();
|
||||
|
||||
const newRelease = ref(false);
|
||||
const data = ref(Object);
|
||||
const notes = ref([] as string[]);
|
||||
|
||||
os.api("release").then((res) => {
|
||||
data.value = res;
|
||||
newRelease.value = version === data.value?.version;
|
||||
notes.value = res.notes.trim().split("\n");
|
||||
});
|
||||
|
||||
console.log(`Version: ${version}`);
|
||||
console.log(`Data version: ${data.value.version}`);
|
||||
console.log(newRelease.value);
|
||||
console.log(data.value);
|
||||
function openReleaseNotes(): void {
|
||||
os.popup(
|
||||
defineAsyncComponent(
|
||||
() => import("@/components/MkReleaseNotesWindow.vue"),
|
||||
),
|
||||
{
|
||||
notes: notes.value,
|
||||
},
|
||||
{},
|
||||
"closed",
|
||||
);
|
||||
}
|
||||
</script>
|
||||
|
||||
<style lang="scss" module>
|
||||
|
|
|
@ -22,7 +22,7 @@ if (accounts) {
|
|||
}
|
||||
// #endregion
|
||||
|
||||
import { compareVersions } from "compare-versions";
|
||||
// import { compareVersions } from "compare-versions";
|
||||
import {
|
||||
computed,
|
||||
createApp,
|
||||
|
|
|
@ -8,13 +8,17 @@ br
|
|||
|
||||
# Pull changes
|
||||
## git pull
|
||||
OLD_COMMIT=$(git rev-parse HEAD)
|
||||
OLD_COMMIT=$(git rev-parse --short HEAD)
|
||||
|
||||
say 'Pulling changes from the remote repo...'
|
||||
run 'git checkout -- package.json packages/backend/assets'
|
||||
run 'git pull --ff --no-edit --autostash --strategy-option theirs'
|
||||
|
||||
NEW_COMMIT=$(git rev-parse HEAD)
|
||||
NEW_COMMIT=$(git rev-parse --short HEAD)
|
||||
|
||||
if [ "${OLD_COMMIT}" != "${NEW_COMMIT}" ]; then
|
||||
run "git log --reverse --format='%s (by %an)' ${OLD_COMMIT}..${NEW_COMMIT} > neko/volume/CHANGELOG"
|
||||
fi
|
||||
|
||||
say 'Pulled successfully!'
|
||||
br
|
||||
|
|
Loading…
Reference in a new issue