Files

297 lines
11 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!-- 英文 SEO 标签 -->
<meta name="description" content="Official releases page for ap_ds. Full version list: v3.0.0 LTS (current stable), branch APDSLTS001, release date 2026-03-01. Each version includes ZIP/TAR.GZ/WHL downloads, detailed changelogs (deterministic cleanup, hash verification), upgrade guides, and version status labels (stable/withdrawn/incident).">
<meta name="keywords" content="ap_ds releases, download v3.0.0, changelog, LTS version, Python audio library stable release, APDSLTS001, hash verification, deterministic cleanup, WHL download">
<meta property="og:title" content="ap_ds Releases – v3.0.0 LTS & Version Archive">
<meta property="og:description" content="Official ap_ds release history. Download stable builds, read detailed changelogs, check version status (stable/withdrawn/incident).">
<meta property="og:type" content="software">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="ap_ds Releases & Changelogs">
<!-- 中文 SEO 标签 -->
<meta name="description" lang="zh-CN" content="ap_ds 官方发行版页面。完整版本列表:v3.0.0 LTS(当前稳定版),分支 APDSLTS001,发布日期 2026-03-01。每个版本附 ZIP/TAR.GZ/WHL 下载、详细更新日志(确定性资源清理、哈希验证)、升级指南及版本状态标注(稳定版/已撤回/开发事故)。">
<meta name="keywords" lang="zh-CN" content="ap_ds 发行版, 下载 v3.0.0, 更新日志, LTS版本, Python音频库稳定版, APDSLTS001, 哈希验证, 确定性清理, WHL下载">
<meta property="og:title" lang="zh-CN" content="ap_ds 发行版 – v3.0.0 LTS 及版本归档">
<meta property="og:description" lang="zh-CN" content="ap_ds 官方版本历史。下载稳定版,阅读详细更新日志,查看版本状态(稳定/已撤回/开发事故)。">{% extends "base.html" %}{% block content %}{% block title %}ap_ds Releases – Version History, Changelogs & Stable Downloads (v3.0.0 LTS){% endblock %}
<div class="repo-header">
<div class="repo-path">
<span>📦 发行版</span>
</div>
<p style="color: var(--repo-color-text-tertiary); margin-top: 8px;">所有 ap_ds 版本下载</p>
</div>
<!-- 版本列表 -->
<div class="file-list">
<div class="file-list-header">
<span>版本</span>
<span>分支</span>
<span>发布日期</span>
<span>下载</span>
</div>
{% for release in releases %}
<div class="file-row">
<div class="file-name" style="flex: 0.3;">
<span class="icon">🏷️</span>
<strong style="color: var(--repo-color-primary);">{{ release.version }}</strong>
</div>
<div class="file-message" style="flex: 0.3;">{{ release.branch }}</div>
<div class="file-time" style="flex: 0.2;">{{ release.date }}</div>
<div style="display: flex; gap: 8px; flex: 0.2;">
<a href="{{ url_for('download_zip', branch=release.branch, version=release.version) }}" class="btn btn-secondary" style="padding: 4px 8px;">ZIP</a>
<a href="{{ url_for('download_tar', branch=release.branch, version=release.version) }}" class="btn btn-secondary" style="padding: 4px 8px;">TAR.GZ</a>
<a href="{{ url_for('download_whl', version=release.version) }}" class="btn btn-primary" style="padding: 4px 8px;">WHL</a>
</div>
</div>
{% endfor %}
</div>
<!-- 版本详情 - 展开/收起 -->
<div class="releases-details">
{% for release in releases %}
<div class="release-card" data-version="{{ release.version }}">
<div class="release-header" onclick="toggleRelease('{{ release.version }}')">
<div class="release-header-left">
<span class="release-version">{{ release.version }}</span>
<span class="release-branch">{{ release.branch }}</span>
<span class="release-date">{{ release.date }}</span>
</div>
<div class="release-header-right">
<span class="release-status">
{% if release.has_whl %}
<span class="repo-tag repo-tag--success">PyPI</span>
{% endif %}
</span>
<span class="release-toggle" id="toggle-{{ release.version }}">▼</span>
</div>
</div>
<div class="release-body" id="release-{{ release.version }}" style="display: none;">
<div class="release-content">
{% if release.announcement %}
{{ release.announcement|safe }}
{% else %}
<div class="info-message">
📄 暂无版本说明文档。请查看 <a href="{{ url_for('view_file', file_path=release.branch + '/' + release.version + '/README.md', branch=release.branch, version=release.version) }}">README.md</a>
</div>
{% endif %}
</div>
<div class="release-downloads">
<a href="{{ url_for('download_zip', branch=release.branch, version=release.version) }}" class="btn btn-secondary">📦 下载 ZIP</a>
<a href="{{ url_for('download_tar', branch=release.branch, version=release.version) }}" class="btn btn-secondary">📦 下载 TAR.GZ</a>
<a href="{{ url_for('download_whl', version=release.version) }}" class="btn btn-primary">📦 下载 WHL</a>
<a href="{{ url_for('view_file', file_path=release.branch + '/' + release.version + '/README.md', branch=release.branch, version=release.version) }}" class="btn btn-secondary">📖 查看 README</a>
</div>
</div>
</div>
{% endfor %}
</div>
<style>
.releases-details {
margin-top: 32px;
display: flex;
flex-direction: column;
gap: 12px;
}
.release-card {
border: 1px solid var(--repo-color-border);
border-radius: var(--repo-radius-lg, 8px);
overflow: hidden;
background-color: var(--repo-color-bg);
}
.release-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 16px 20px;
background-color: var(--repo-color-bg-secondary);
cursor: pointer;
transition: background 0.2s;
}
.release-header:hover {
background-color: var(--repo-color-bg-hover);
}
.release-header-left {
display: flex;
align-items: center;
gap: 16px;
flex-wrap: wrap;
}
.release-version {
font-size: 18px;
font-weight: 600;
color: var(--repo-color-primary);
}
.release-branch {
font-size: 13px;
color: var(--repo-color-text-secondary);
background-color: var(--repo-color-bg-tertiary);
padding: 2px 8px;
border-radius: 20px;
}
.release-date {
font-size: 13px;
color: var(--repo-color-text-tertiary);
}
.release-header-right {
display: flex;
align-items: center;
gap: 16px;
}
.release-toggle {
font-size: 16px;
color: var(--repo-color-text-tertiary);
transition: transform 0.2s;
}
.release-card.open .release-toggle {
transform: rotate(180deg);
}
.release-body {
padding: 24px;
border-top: 1px solid var(--repo-color-border);
background-color: var(--repo-color-bg);
}
.release-content {
margin-bottom: 24px;
padding-bottom: 24px;
border-bottom: 1px solid var(--repo-color-border);
}
/* README 内容样式 */
.release-content h1, .release-content h2, .release-content h3 {
margin-top: 24px;
margin-bottom: 16px;
font-weight: 600;
}
.release-content h1 { font-size: 1.8em; border-bottom: 1px solid var(--repo-color-border); padding-bottom: 0.3em; }
.release-content h2 { font-size: 1.5em; border-bottom: 1px solid var(--repo-color-border); padding-bottom: 0.3em; }
.release-content h3 { font-size: 1.25em; }
.release-content h4 { font-size: 1.1em; }
.release-content p { margin-bottom: 16px; line-height: 1.6; }
.release-content code {
background-color: var(--repo-color-bg-tertiary);
padding: 0.2em 0.4em;
border-radius: 4px;
font-family: var(--repo-font-family-mono, monospace);
font-size: 0.9em;
}
.release-content pre {
background-color: var(--repo-color-bg-tertiary);
padding: 16px;
border-radius: 8px;
overflow-x: auto;
margin-bottom: 16px;
}
.release-content pre code {
background: none;
padding: 0;
}
.release-content ul, .release-content ol {
padding-left: 2em;
margin-bottom: 16px;
}
.release-content blockquote {
border-left: 4px solid var(--repo-color-border);
padding-left: 16px;
color: var(--repo-color-text-tertiary);
margin-bottom: 16px;
}
.release-content table {
border-collapse: collapse;
margin-bottom: 16px;
width: 100%;
}
.release-content th, .release-content td {
border: 1px solid var(--repo-color-border);
padding: 8px 12px;
}
.release-content th {
background-color: var(--repo-color-bg-secondary);
}
.release-content hr {
border: none;
border-top: 1px solid var(--repo-color-border);
margin: 24px 0;
}
.release-content img {
max-width: 100%;
}
.release-downloads {
display: flex;
gap: 12px;
flex-wrap: wrap;
}
.info-message {
padding: 16px;
background-color: var(--repo-color-bg-secondary);
border-radius: var(--repo-radius-md, 6px);
color: var(--repo-color-text-secondary);
text-align: center;
}
.repo-tag--success {
background-color: rgba(16, 185, 129, 0.1);
color: #10b981;
padding: 2px 8px;
border-radius: 20px;
font-size: 12px;
}
@media (max-width: 768px) {
.release-header-left {
flex-direction: column;
align-items: flex-start;
gap: 8px;
}
.release-downloads {
flex-direction: column;
}
.release-downloads .btn {
text-align: center;
}
}
</style>
<script>
function toggleRelease(version) {
var body = document.getElementById('release-' + version);
var card = document.querySelector('.release-card[data-version="' + version + '"]');
if (body.style.display === 'none') {
body.style.display = 'block';
card.classList.add('open');
} else {
body.style.display = 'none';
card.classList.remove('open');
}
}
// 默认展开第一个版本
document.addEventListener('DOMContentLoaded', function() {
var firstRelease = document.querySelector('.release-card');
if (firstRelease) {
var version = firstRelease.getAttribute('data-version');
if (version) {
var body = document.getElementById('release-' + version);
if (body) {
body.style.display = 'block';
firstRelease.classList.add('open');
}
}
}
});
</script>
{% endblock %}