Compare commits

...

4 Commits

Author SHA1 Message Date
Berk d5108e854d chore: bump version to 0.0.3-hotfix-2 (#687) 2026-07-29 01:50:26 +03:00
ParantezTech b020f1676a Merge branch 'main' of https://github.com/sharpemu/sharpemu 2026-07-29 01:48:28 +03:00
ParantezTech 02938b5d5b [GUI] removed not official Discord link from GUI 2026-07-29 01:47:35 +03:00
Berk 7b7a48a834 [CI] Commits are now automatically added to the release notes (#686) 2026-07-29 01:47:21 +03:00
20 changed files with 141 additions and 34 deletions
+61 -4
View File
@@ -231,6 +231,11 @@ jobs:
permissions: permissions:
contents: write contents: write
steps: steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Download build artifacts - name: Download build artifacts
uses: actions/download-artifact@v8 uses: actions/download-artifact@v8
with: with:
@@ -258,6 +263,61 @@ jobs:
tar -czf "release-assets/sharpemu-${VERSION}-linux-x64.tar.gz" -C "${linux_dir}" . tar -czf "release-assets/sharpemu-${VERSION}-linux-x64.tar.gz" -C "${linux_dir}" .
tar -czf "release-assets/sharpemu-${VERSION}-osx-x64.tar.gz" -C "${macos_dir}" . tar -czf "release-assets/sharpemu-${VERSION}-osx-x64.tar.gz" -C "${macos_dir}" .
- name: Build release notes
shell: bash
env:
MAX_COMMITS: 200
RELEASE_TAG: ${{ needs.init.outputs.release-tag }}
REPO_URL: ${{ github.server_url }}/${{ github.repository }}
SHORT_SHA: ${{ needs.init.outputs.short-sha }}
VERSION: ${{ needs.init.outputs.version }}
run: |
set -euo pipefail
previous_tag="$(git describe --tags --abbrev=0 --match 'v*' "${RELEASE_TAG}^" 2>/dev/null || true)"
if [ -n "${previous_tag}" ]; then
range="${previous_tag}..${RELEASE_TAG}"
else
range="${RELEASE_TAG}"
fi
git log --no-merges --reverse --pretty=tformat:"%H%x1f%h%x1f%s" "${range}" > commits.txt
total="$(wc -l < commits.txt)"
{
printf 'Automated SharpEmu v%s build for commit [`%s`](%s/commit/%s).\n\n' \
"${VERSION}" "${SHORT_SHA}" "${REPO_URL}" "${GITHUB_SHA}"
if [ -n "${previous_tag}" ]; then
printf '## Changes since %s\n\n' "${previous_tag}"
else
printf '## Changes\n\n'
fi
if [ "${total}" -eq 0 ]; then
printf '_No commits since %s._\n' "${previous_tag}"
else
head -n "${MAX_COMMITS}" commits.txt | while IFS=$'\x1f' read -r sha short subject; do
printf -- '- %s ([`%s`](%s/commit/%s))\n' "${subject}" "${short}" "${REPO_URL}" "${sha}"
done
if [ "${total}" -gt "${MAX_COMMITS}" ]; then
printf '\n_…and %s more commits._\n' "$((total - MAX_COMMITS))"
fi
fi
printf '\n'
if [ -n "${previous_tag}" ]; then
printf '**Full changelog**: %s/compare/%s...%s\n' "${REPO_URL}" "${previous_tag}" "${RELEASE_TAG}"
else
printf '**Full changelog**: %s/commits/%s\n' "${REPO_URL}" "${RELEASE_TAG}"
fi
} > release-notes.md
cat release-notes.md
- name: Create release - name: Create release
shell: bash shell: bash
env: env:
@@ -265,7 +325,6 @@ jobs:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
RELEASE_NAME: ${{ needs.init.outputs.release-name }} RELEASE_NAME: ${{ needs.init.outputs.release-name }}
RELEASE_TAG: ${{ needs.init.outputs.release-tag }} RELEASE_TAG: ${{ needs.init.outputs.release-tag }}
VERSION: ${{ needs.init.outputs.version }}
run: | run: |
mapfile -t assets < <(find release-assets -maxdepth 1 -type f \( -name '*.zip' -o -name '*.tar.gz' \) | sort) mapfile -t assets < <(find release-assets -maxdepth 1 -type f \( -name '*.zip' -o -name '*.tar.gz' \) | sort)
if [ "${#assets[@]}" -ne 3 ]; then if [ "${#assets[@]}" -ne 3 ]; then
@@ -273,8 +332,6 @@ jobs:
exit 1 exit 1
fi fi
notes="Automated SharpEmu v${VERSION} build for commit ${GITHUB_SHA}."
if gh release view "${RELEASE_TAG}" >/dev/null 2>&1; then if gh release view "${RELEASE_TAG}" >/dev/null 2>&1; then
echo "Release ${RELEASE_TAG} already exists and will not be modified." >&2 echo "Release ${RELEASE_TAG} already exists and will not be modified." >&2
exit 1 exit 1
@@ -283,4 +340,4 @@ jobs:
gh release create "${RELEASE_TAG}" "${assets[@]}" \ gh release create "${RELEASE_TAG}" "${assets[@]}" \
--verify-tag \ --verify-tag \
--title "${RELEASE_NAME}" \ --title "${RELEASE_NAME}" \
--notes "${notes}" --notes-file release-notes.md
+1 -1
View File
@@ -9,7 +9,7 @@ SPDX-License-Identifier: GPL-2.0-or-later
<ImplicitUsings>enable</ImplicitUsings> <ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<GenerateDocumentationFile>true</GenerateDocumentationFile> <GenerateDocumentationFile>true</GenerateDocumentationFile>
<SharpEmuVersion>0.0.3-hotfix-1</SharpEmuVersion> <SharpEmuVersion>0.0.3-hotfix-2</SharpEmuVersion>
<Version>$(SharpEmuVersion)</Version> <Version>$(SharpEmuVersion)</Version>
<RepoRoot>$([MSBuild]::NormalizeDirectory('$(MSBuildThisFileDirectory)'))</RepoRoot> <RepoRoot>$([MSBuild]::NormalizeDirectory('$(MSBuildThisFileDirectory)'))</RepoRoot>
+58
View File
@@ -157,6 +157,62 @@ def ensure_tag_does_not_exist(
raise ReleaseError(f"Tag {tag} already exists on {remote}.") raise ReleaseError(f"Tag {tag} already exists on {remote}.")
def get_previous_tag(repository_root: Path) -> str:
try:
return run_git(
"describe",
"--tags",
"--abbrev=0",
"--match",
"v*",
"HEAD",
cwd=repository_root,
capture_output=True,
)
except ReleaseError:
return ""
def get_release_commits(
repository_root: Path,
previous_tag: str,
) -> list[str]:
revision_range = f"{previous_tag}..HEAD" if previous_tag else "HEAD"
output = run_git(
"log",
"--no-merges",
"--reverse",
"--pretty=tformat:%h %s",
revision_range,
cwd=repository_root,
capture_output=True,
)
return output.splitlines()
def print_release_notes_preview(repository_root: Path) -> None:
previous_tag = get_previous_tag(repository_root)
commits = get_release_commits(repository_root, previous_tag)
print()
if previous_tag:
print(f"Commits since {previous_tag} ({len(commits)}):")
else:
print(f"Commits in this release ({len(commits)}):")
if not commits:
print(" (none)")
for commit in commits:
print(f" {commit}")
print()
print("These commits go into the generated release notes.")
def read_version(props_path: Path) -> str: def read_version(props_path: Path) -> str:
if not props_path.exists(): if not props_path.exists():
raise ReleaseError(f"Version file not found: {props_path}") raise ReleaseError(f"Version file not found: {props_path}")
@@ -323,6 +379,8 @@ def create_release_tag(
remote, remote,
) )
print_release_notes_preview(repository_root)
run_git( run_git(
"tag", "tag",
"-a", "-a",
+1 -1
View File
@@ -153,7 +153,7 @@
"About.Discord.Label": "دسكورد", "About.Discord.Label": "دسكورد",
"About.Discord.Desc": "انضم إلى المجتمع واحصل على الدعم وتابع التطوير.", "About.Discord.Desc": "انضم إلى المجتمع واحصل على الدعم وتابع التطوير.",
"About.GithubButton": "ساهم على GitHub!", "About.GithubButton": "ساهم على GitHub!",
"About.DiscordButton": "انضم إلى دسكوردنا!", "About.DiscordComingSoon": "قريبًا",
"Updater.Auto.Label": "التحقق من التحديثات عند بدء التشغيل", "Updater.Auto.Label": "التحقق من التحديثات عند بدء التشغيل",
"Updater.Auto.Desc": "يتحقق من GitHub دون تأخير بدء التشغيل.", "Updater.Auto.Desc": "يتحقق من GitHub دون تأخير بدء التشغيل.",
"Updater.Label": "التحديثات", "Updater.Label": "التحديثات",
+1 -1
View File
@@ -142,7 +142,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Participe da comunidade, obtenha suporte e acompanhe o desenvolvimento.", "About.Discord.Desc": "Participe da comunidade, obtenha suporte e acompanhe o desenvolvimento.",
"About.GithubButton": "Contribua no GitHub!", "About.GithubButton": "Contribua no GitHub!",
"About.DiscordButton": "Entre no nosso Discord!", "About.DiscordComingSoon": "Em breve",
"Library.Context.GameSettings": "Configurações do jogo…", "Library.Context.GameSettings": "Configurações do jogo…",
"Options.Env.WritableApp0.Desc": "Permite que os jogos criem e gravem arquivos dentro da própria pasta de instalação.\nNecessário para dumps não empacotados que gravam seus saves ou configurações em /app0.", "Options.Env.WritableApp0.Desc": "Permite que os jogos criem e gravem arquivos dentro da própria pasta de instalação.\nNecessário para dumps não empacotados que gravam seus saves ou configurações em /app0.",
+1 -1
View File
@@ -153,7 +153,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Tritt der Community bei, erhalte Support und verfolge die Entwicklung.", "About.Discord.Desc": "Tritt der Community bei, erhalte Support und verfolge die Entwicklung.",
"About.GithubButton": "Auf GitHub mitwirken!", "About.GithubButton": "Auf GitHub mitwirken!",
"About.DiscordButton": "Tritt unserem Discord bei!", "About.DiscordComingSoon": "Demnächst verfügbar",
"Updater.Auto.Label": "Beim Start nach Updates suchen", "Updater.Auto.Label": "Beim Start nach Updates suchen",
"Updater.Auto.Desc": "Fragt GitHub ab, ohne den Start zu verzögern.", "Updater.Auto.Desc": "Fragt GitHub ab, ohne den Start zu verzögern.",
"Updater.Label": "Updates", "Updater.Label": "Updates",
+1 -1
View File
@@ -153,7 +153,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Bliv en del af fællesskabet, få hjælp og følg udviklingen.", "About.Discord.Desc": "Bliv en del af fællesskabet, få hjælp og følg udviklingen.",
"About.GithubButton": "Bidrag på GitHub!", "About.GithubButton": "Bidrag på GitHub!",
"About.DiscordButton": "Bliv medlem af vores Discord!", "About.DiscordComingSoon": "Kommer snart",
"Updater.Auto.Label": "Søg efter opdateringer ved start", "Updater.Auto.Label": "Søg efter opdateringer ved start",
"Updater.Auto.Desc": "Tjekker GitHub uden at forsinke opstarten.", "Updater.Auto.Desc": "Tjekker GitHub uden at forsinke opstarten.",
"Updater.Label": "Opdateringer", "Updater.Label": "Opdateringer",
+1 -1
View File
@@ -186,7 +186,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Join the community, get support and follow development.", "About.Discord.Desc": "Join the community, get support and follow development.",
"About.GithubButton": "Contribute in GitHub!", "About.GithubButton": "Contribute in GitHub!",
"About.DiscordButton": "Join our Discord!", "About.DiscordComingSoon": "Coming soon",
"Updater.Auto.Label": "Check for updates on startup", "Updater.Auto.Label": "Check for updates on startup",
"Updater.Auto.Desc": "Checks GitHub without delaying startup.", "Updater.Auto.Desc": "Checks GitHub without delaying startup.",
+1 -1
View File
@@ -134,7 +134,7 @@
"About.Github.LatestCommitDescription": "Último commit en la rama main", "About.Github.LatestCommitDescription": "Último commit en la rama main",
"About.Discord.Desc": "Únete a la comunidad, recibe soporte y sigue el desarrollo.", "About.Discord.Desc": "Únete a la comunidad, recibe soporte y sigue el desarrollo.",
"About.GithubButton": "Contribuye en GitHub!", "About.GithubButton": "Contribuye en GitHub!",
"About.DiscordButton": "Únete a nuestro Discord!", "About.DiscordComingSoon": "Próximamente",
"Library.Context.GameSettings": "Ajustes del juego…", "Library.Context.GameSettings": "Ajustes del juego…",
"Options.Env.Tab": "Entorno", "Options.Env.Tab": "Entorno",
+1 -1
View File
@@ -142,7 +142,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Rejoignez la communauté, obtenez de laide et suivez le développement.", "About.Discord.Desc": "Rejoignez la communauté, obtenez de laide et suivez le développement.",
"About.GithubButton": "Contribuer sur GitHub !", "About.GithubButton": "Contribuer sur GitHub !",
"About.DiscordButton": "Rejoindre notre Discord !", "About.DiscordComingSoon": "Bientôt disponible",
"Library.Context.GameSettings": "Paramètres du jeu…", "Library.Context.GameSettings": "Paramètres du jeu…",
"Options.Env.WritableApp0.Desc": "Autoriser les jeux à créer et écrire des fichiers dans leur dossier dinstallation.\nNécessaire pour les dumps non empaquetés qui écrivent leurs sauvegardes ou leur configuration sous /app0.", "Options.Env.WritableApp0.Desc": "Autoriser les jeux à créer et écrire des fichiers dans leur dossier dinstallation.\nNécessaire pour les dumps non empaquetés qui écrivent leurs sauvegardes ou leur configuration sous /app0.",
+1 -1
View File
@@ -142,7 +142,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Csatlakozz a közösséghe, kérj segítéget és kövesd nyomon a fejlesztést.", "About.Discord.Desc": "Csatlakozz a közösséghe, kérj segítéget és kövesd nyomon a fejlesztést.",
"About.GithubButton": "Járulj hozzá GitHubon!", "About.GithubButton": "Járulj hozzá GitHubon!",
"About.DiscordButton": "Csatlakozz a Discordunhoz!", "About.DiscordComingSoon": "Hamarosan",
"Library.Context.GameSettings": "Játékbeállítások…", "Library.Context.GameSettings": "Játékbeállítások…",
"Options.Env.WritableApp0.Desc": "Engedélyezi, hogy a játékok fájlokat hozzanak létre és írjanak a telepítési mappájukban.\nA kicsomagolt dumpokhoz szükséges, amelyek a mentéseiket vagy beállításaikat az /app0 alá írják.", "Options.Env.WritableApp0.Desc": "Engedélyezi, hogy a játékok fájlokat hozzanak létre és írjanak a telepítési mappájukban.\nA kicsomagolt dumpokhoz szükséges, amelyek a mentéseiket vagy beállításaikat az /app0 alá írják.",
+1 -1
View File
@@ -158,7 +158,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Unisciti alla community, ricevi supporto e segui lo sviluppo.", "About.Discord.Desc": "Unisciti alla community, ricevi supporto e segui lo sviluppo.",
"About.GithubButton": "Contribuisci su GitHub!", "About.GithubButton": "Contribuisci su GitHub!",
"About.DiscordButton": "Unisciti al nostro Discord!", "About.DiscordComingSoon": "Prossimamente",
"Updater.Auto.Label": "Controlla aggiornamenti all'avvio", "Updater.Auto.Label": "Controlla aggiornamenti all'avvio",
"Updater.Auto.Desc": "Interroga GitHub senza rallentare l'avvio.", "Updater.Auto.Desc": "Interroga GitHub senza rallentare l'avvio.",
"Updater.Label": "Aggiornamenti", "Updater.Label": "Aggiornamenti",
+1 -1
View File
@@ -153,7 +153,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "コミュニティに参加して、サポートを受けたり開発を追いかけたりしましょう。", "About.Discord.Desc": "コミュニティに参加して、サポートを受けたり開発を追いかけたりしましょう。",
"About.GithubButton": "GitHubで貢献しよう!", "About.GithubButton": "GitHubで貢献しよう!",
"About.DiscordButton": "Discordに参加しよう!", "About.DiscordComingSoon": "近日公開",
"Updater.Auto.Label": "起動時にアップデートを確認", "Updater.Auto.Label": "起動時にアップデートを確認",
"Updater.Auto.Desc": "起動を遅らせずにGitHubへ確認します。", "Updater.Auto.Desc": "起動を遅らせずにGitHubへ確認します。",
"Updater.Label": "アップデート", "Updater.Label": "アップデート",
+1 -1
View File
@@ -153,7 +153,7 @@
"About.Discord.Label": "디스코드", "About.Discord.Label": "디스코드",
"About.Discord.Desc": "커뮤니티에 참여해 지원을 받고 개발 소식을 확인하세요.", "About.Discord.Desc": "커뮤니티에 참여해 지원을 받고 개발 소식을 확인하세요.",
"About.GithubButton": "GitHub에서 기여하기!", "About.GithubButton": "GitHub에서 기여하기!",
"About.DiscordButton": "디스코드 참여하기!", "About.DiscordComingSoon": "곧 공개",
"Updater.Auto.Label": "시작 시 업데이트 확인", "Updater.Auto.Label": "시작 시 업데이트 확인",
"Updater.Auto.Desc": "시작을 지연시키지 않고 GitHub를 확인합니다.", "Updater.Auto.Desc": "시작을 지연시키지 않고 GitHub를 확인합니다.",
"Updater.Label": "업데이트", "Updater.Label": "업데이트",
+1 -1
View File
@@ -153,7 +153,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Word lid van de community, krijg ondersteuning en volg de ontwikkeling.", "About.Discord.Desc": "Word lid van de community, krijg ondersteuning en volg de ontwikkeling.",
"About.GithubButton": "Draag bij op GitHub!", "About.GithubButton": "Draag bij op GitHub!",
"About.DiscordButton": "Word lid van onze Discord!", "About.DiscordComingSoon": "Binnenkort",
"Updater.Auto.Label": "Bij het opstarten controleren op updates", "Updater.Auto.Label": "Bij het opstarten controleren op updates",
"Updater.Auto.Desc": "Controleert GitHub zonder het opstarten te vertragen.", "Updater.Auto.Desc": "Controleert GitHub zonder het opstarten te vertragen.",
"Updater.Label": "Updates", "Updater.Label": "Updates",
+1 -1
View File
@@ -142,7 +142,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Junte-se à comunidade, obtenha suporte e acompanhe o desenvolvimento.", "About.Discord.Desc": "Junte-se à comunidade, obtenha suporte e acompanhe o desenvolvimento.",
"About.GithubButton": "Contribua no GitHub!", "About.GithubButton": "Contribua no GitHub!",
"About.DiscordButton": "Junte-se ao nosso Discord!", "About.DiscordComingSoon": "Em breve",
"Library.Context.GameSettings": "Definições do jogo…", "Library.Context.GameSettings": "Definições do jogo…",
"Options.Env.WritableApp0.Desc": "Permitir que os jogos criem e escrevam ficheiros dentro da sua pasta de instalação.\nNecessário para dumps não empacotados que escrevem os seus dados guardados ou configurações em /app0.", "Options.Env.WritableApp0.Desc": "Permitir que os jogos criem e escrevam ficheiros dentro da sua pasta de instalação.\nNecessário para dumps não empacotados que escrevem os seus dados guardados ou configurações em /app0.",
+1 -1
View File
@@ -186,7 +186,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Присоединяйтесь к сообществу, получайте поддержку и следите за разработкой.", "About.Discord.Desc": "Присоединяйтесь к сообществу, получайте поддержку и следите за разработкой.",
"About.GithubButton": "Участвовать в разработке на GitHub!", "About.GithubButton": "Участвовать в разработке на GitHub!",
"About.DiscordButton": "Присоединиться к нашему Discord!", "About.DiscordComingSoon": "Скоро",
"Updater.Auto.Label": "Проверять обновления при запуске", "Updater.Auto.Label": "Проверять обновления при запуске",
"Updater.Auto.Desc": "Проверяет GitHub без задержки запуска.", "Updater.Auto.Desc": "Проверяет GitHub без задержки запуска.",
+1 -1
View File
@@ -189,7 +189,7 @@
"About.Discord.Label": "Discord", "About.Discord.Label": "Discord",
"About.Discord.Desc": "Topluluğa katılın, destek alın ve geliştirmeyi takip edin.", "About.Discord.Desc": "Topluluğa katılın, destek alın ve geliştirmeyi takip edin.",
"About.GithubButton": "GitHub'da katkıda bulun!", "About.GithubButton": "GitHub'da katkıda bulun!",
"About.DiscordButton": "Discord'umuza katıl!", "About.DiscordComingSoon": "Yakında",
"Options.Section.Rendering": "GÖRÜNTÜ İŞLEME", "Options.Section.Rendering": "GÖRÜNTÜ İŞLEME",
"Options.RenderResolution.Label": "Dahili çözünürlük", "Options.RenderResolution.Label": "Dahili çözünürlük",
"Options.RenderResolution.Desc": "Ekran dışı hedefleri doğal çözünürlüğün altında işle ve sunum sırasında ölçeklendir. Daha düşük değerler GPU payı karşılığında görüntü kalitesini azaltır; bir sonraki başlatmada etkili olur.", "Options.RenderResolution.Desc": "Ekran dışı hedefleri doğal çözünürlüğün altında işle ve sunum sırasında ölçeklendir. Daha düşük değerler GPU payı karşılığında görüntü kalitesini azaltır; bir sonraki başlatmada etkili olur.",
+6 -5
View File
@@ -473,11 +473,12 @@ SPDX-License-Identifier: GPL-2.0-or-later
</StackPanel> </StackPanel>
</StackPanel> </StackPanel>
<Button Grid.Column="1" <TextBlock Grid.Column="1"
x:Name="DiscordButton" x:Name="DiscordComingSoonText"
Classes="ghost" Text="{Binding [About.DiscordComingSoon], Source={x:Static local:Localization.Instance}}"
Content="{Binding [About.DiscordButton], Source={x:Static local:Localization.Instance}}" FontSize="12"
VerticalAlignment="Center" /> Foreground="{StaticResource MutedBrush}"
VerticalAlignment="Center" />
</Grid> </Grid>
</StackPanel> </StackPanel>
</Border> </Border>
-9
View File
@@ -332,15 +332,6 @@ public partial class MainWindow : Window
}); });
}; };
DiscordButton.Click += (_, _) =>
{
Process.Start(new ProcessStartInfo
{
FileName = "https://discord.com/invite/6GejPEDqpc",
UseShellExecute = true
});
};
LatestCommitHashText.Click += (_, _) => LatestCommitHashText.Click += (_, _) =>
{ {
if (string.IsNullOrWhiteSpace(_latestCommitSha)) if (string.IsNullOrWhiteSpace(_latestCommitSha))