feat: consolidate prerelease downloads

This commit is contained in:
Teetow
2025-10-16 19:14:43 +02:00
parent 5be2826e2d
commit eb92b4332b
9 changed files with 274 additions and 13 deletions

View File

@@ -19,7 +19,7 @@
/gitbook-access https://app.gitbook.com/invite/-MhmG2mhIIHTtQPuHV_k/acNI2LAF6LtdJW06t4Hc
/devserver https://discord.gg/N3XKxzTrq3
/dev https://audacity.gitbook.io/dev/
/nightly /beta
/nightly /next
/au4win https://nightly.link/audacity/audacity/workflows/au4_build_windows/master
/au4mac https://nightly.link/audacity/audacity/workflows/au4_build_macos/master
/au4lin https://nightly.link/audacity/audacity/workflows/au4_build_linux/master
@@ -29,6 +29,11 @@
/) /
/vpat /VPAT.pdf
# prerelease
/au4 /next 301
/alpha /next 301
/beta /next 301
# campaign links
/survey https://docs.google.com/forms/d/e/1FAIpQLSd42XPhC69bKUA9kbYiTXboRLaj9Q11_BUEXTK0v0TzWJQmDQ/viewform?usp=dialog
/audacitypromo https://www.youtube.com/watch?v=Lb7jx4wdXXE&mtm_campaign=audacityapp&mtm_content=welcomescreen_video

View File

@@ -13,8 +13,6 @@ export type ReleaseDirectory = {
src?: ReleaseInfo[];
};
export type ActivationState = "active" | "inactive";
export const audacityReleases: ReleaseDirectory = {
version: "3.7.5",
win: [
@@ -149,7 +147,7 @@ export const hasDownloadAssets = (downloads?: ReleaseDirectory): boolean => {
export type PreReleaseEntry = {
id: string;
label: string;
status: ActivationState;
isActive: boolean;
summary: string;
pageHref: string;
downloads: ReleaseDirectory;
@@ -158,10 +156,10 @@ export type PreReleaseEntry = {
export const alphaPreRelease: PreReleaseEntry = {
id: "alpha",
label: "Alpha",
status: "active",
isActive: true,
summary:
"Get an early look at the next major release. Expect unfinished features and potential bugs.",
pageHref: "/au4",
pageHref: "/next",
downloads: {
version: "Audacity 4 Alpha 1",
win: [
@@ -195,9 +193,9 @@ export const alphaPreRelease: PreReleaseEntry = {
export const betaPreRelease: PreReleaseEntry = {
id: "beta",
label: "Beta",
status: "inactive",
isActive: false,
summary: "Help us test upcoming features before they ship.",
pageHref: "/beta",
pageHref: "/next",
downloads: {
version: "3.5.0 beta",
win: [

View File

@@ -24,11 +24,11 @@ const promoData: Record<string, PromoData> = {
audacity4Alpha: {
isActive: true,
priority: 50,
suppressOnPaths: ["/au4", "/download"],
suppressOnPaths: ["/next", "/download"],
message: "Want a peek at our next big release?",
cta: {
text: "Try the Audacity 4 Alpha",
link: "/au4",
link: "/next",
},
tracking: {
category: "Promo CTA",

View File

@@ -5,7 +5,7 @@ import {
preReleaseList,
} from "../../assets/data/audacityReleases";
const activeDownloadCampaign = preReleaseList.find((entry) =>
entry.status === "active" && hasDownloadAssets(entry.downloads)
entry.isActive && hasDownloadAssets(entry.downloads)
) ?? null;
const hasPreRelease = Boolean(activeDownloadCampaign);
const activePreReleaseAriaLabel = hasPreRelease && activeDownloadCampaign

View File

@@ -0,0 +1,75 @@
---
---
<div class="mt-6">
<p>
The purpose of this alpha build is to test the core features of Audacity 4 on a
wide selection of hardware and operating systems.
</p>
<p>
If you experience severe issues or crashes, please file an issue on GitHub
(requires a free GitHub account).
</p>
<ul class="py-2 list-none">
<li>
<a href="https://github.com/audacity/audacity/issues" class="hyperlink">
Github issues
</a>
</li>
</ul>
<h2 class="mt-6 text-2xl">What's implemented</h2>
<ul class="list-disc mt-2 ml-6">
<li>Recording and playback</li>
<li>Editing audio</li>
<li>Applying effects (destructive and real-time)</li>
<li>Exporting audio files</li>
<li>
Configuring and re-arranging the interface (including the new Workspaces
feature)
</li>
</ul>
<h3 class="mt-2">A note on compatibility ⚠️</h3>
<p class="mt-2">
Projects saved in Audacity 4 are not backwards compatible. We recommend you make
a copy of your important projects before opening them in Audacity 4.
</p>
<h2 class="mt-6 text-2xl">Unimplemented features</h2>
<p class="mt-2">
Some yet-to-be finalized features might appear non-functional, or have been
excluded from Audacity's interface. These are features not yet ready for user
testing, and have been disabled.
</p>
<ul class="list-disc mt-2 ml-6">
<li>Nyquist, LADSPA and VAMP and the OpenVINO plugins</li>
<li>Preferences from Audacity 3 are not carried over</li>
<li>Envelopes and label tracks</li>
<li>Spectrogram view and the spectral editing mode</li>
<li>Most built-in effects, including generators and analyzers</li>
<li>Opening multiple projects at the same time</li>
</ul>
<div>
<h2 class="mt-4 text-2xl">Submit your feedback!</h2>
<p class="mt-2">
We're always eager to hear what you have to say, but it's especially important
we hear from you during this early phase. Please let us know what you think,
using the following places:
</p>
<ul class="py-2 list-none">
<li class="hyperlink">
<a href="https://forum.audacityteam.org/c/au4/64">Audacity Forum</a>
</li>
<li class="hyperlink">
<a href="https://discord.gg/audacity">Audacity Discord</a>
</li>
<li>
<a href="https://github.com/audacity/audacity/issues" class="hyperlink">
Github issues
</a>
</li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,17 @@
---
---
<div class="my-6">
<p>
Download the latest beta build and help us test upcoming Audacity features.
</p>
<p class="my-2">
If you'd like to help us with testing, instructions can be found below.
</p>
<div class="flex items-center justify-center w-fit rounded-md text-white my-6">
<a href="https://support.audacityteam.org/community/contributing/testing">
<div class="flex items-center gap-3 h-10 pl-4 pr-3 rounded-md bg-blue-700 hover:bg-blue-600">
Instructions for testing
</div>
</a>
</div>
</div>

View File

@@ -20,7 +20,7 @@ const {
const isNoAdPage =
Astro.request.url.includes("/post-download") ||
Astro.request.url.includes("/au4");
Astro.request.url.includes("/next");
const hasActiveStaticPromo = Object.values(promoData).some((promo) => {
const isActive = promo.isActive ?? true;
return isActive && Boolean(promo.cta);

View File

@@ -14,7 +14,7 @@ const { version } = audacityReleases;
const sourceDownloads = audacityReleases.src ?? [];
const primarySourceDownload = sourceDownloads[0] ?? null;
const activeDownloadEntries = preReleaseList.filter(
(entry) => entry.status === "active" && hasDownloadAssets(entry.downloads),
(entry) => entry.isActive && hasDownloadAssets(entry.downloads),
);
const hasDownloadCampaigns = activeDownloadEntries.length > 0;

166
src/pages/next.astro Normal file
View File

@@ -0,0 +1,166 @@
---
import {
alphaPreRelease,
betaPreRelease,
} from "../assets/data/audacityReleases";
import SplitDownloadButton from "../components/button/SplitDownloadButton.jsx";
import FeaturedVideo from "../components/video/FeaturedVideo";
import AlphaDetails from "../components/next/AlphaDetails.astro";
import BetaDetails from "../components/next/BetaDetails.astro";
import BaseLayout from "../layouts/BaseLayout.astro";
import "../styles/icons.css";
const pageTitle = "Audacity ® | Pre-release downloads";
const pageDescription =
"Test upcoming Audacity builds for Windows, macOS, and Linux.";
const releaseConfigurations = [
{
entry: betaPreRelease,
Details: BetaDetails,
},
{
entry: alphaPreRelease,
Details: AlphaDetails,
},
];
const activeConfig =
releaseConfigurations.find(({ entry }) => entry.isActive) ?? null;
const activeRelease = activeConfig?.entry ?? null;
const DetailsComponent = activeConfig?.Details ?? null;
const releaseDownloads = activeRelease?.downloads ?? null;
const releaseVersion = releaseDownloads?.version ?? "";
const windowsDownloads = releaseDownloads?.win ?? [];
const macDownloads = releaseDownloads?.mac ?? [];
const linuxDownloads = releaseDownloads?.lin ?? [];
const isAlphaRelease = activeRelease?.id === "alpha";
const downloadSections = activeRelease
? [
{
id: "windows",
title: `${releaseVersion} for Windows`,
os: "Windows",
entries: windowsDownloads,
},
{
id: "mac",
title: `${releaseVersion} for macOS`,
os: "macOS",
entries: macDownloads,
},
{
id: "linux",
title: `${releaseVersion} for Linux`,
os: "Linux",
entries: linuxDownloads,
},
].filter((section) => section.entries.length > 0)
: [];
---
<BaseLayout
title={pageTitle}
description={pageDescription}
showPromoBanner={false}
>
<main id="main" class="max-w-screen-xl mx-auto text-gray-700">
<div class="grid grid-cols-12 pt-8 pb-32 gap-y-12">
<section class="col-start-2 col-span-10 sm:col-start-2 sm:col-span-5">
{
activeRelease ? (
<>
<h1>{releaseVersion}</h1>
{DetailsComponent && <DetailsComponent />}
{isAlphaRelease && (
<FeaturedVideo
client:load
placeholderImage="https://i.ytimg.com/vi/QYM3TWf_G38/maxresdefault.jpg"
imageAltText="Video: How we made Audacity 4"
videoURL="https://www.youtube-nocookie.com/embed/QYM3TWf_G38?autoplay=1"
title="Video: How we made Audacity 4"
label="Watch a behind-the-scenes video on the making of Audacity 4"
class="mt-8"
/>
)}
</>
) : (
<div class="border border-yellow-300 bg-yellow-50 text-yellow-900 rounded-md p-6">
<h1 class="text-3xl font-semibold text-yellow-900">
Pre-release downloads are currently unavailable.
</h1>
<p class="mt-4">
Check back soon or download the latest stable version of Audacity.
</p>
<a
class="hyperlink inline-flex items-center gap-1 mt-4"
href="/download"
>
Browse stable downloads
<span class="align-middle icon icon-share text-blue-600" />
</a>
</div>
)
}
</section>
<aside
class="row-start-2 sm:row-start-1 col-start-2 col-span-10 sm:col-start-8 sm:col-span-4"
>
<h2 class="text-sm uppercase font-normal">Download links</h2>
{
activeRelease ? (
downloadSections.length > 0 ? (
<div class="flex flex-col gap-6 mt-2">
{downloadSections.map((section) => (
<div class="border border-bg-200 rounded-md p-6">
<h3 class="additional-resource-heading">
{section.title}
</h3>
<div class="mt-2">
<SplitDownloadButton
OS={section.os}
releaseData={section.entries}
client:load
/>
</div>
</div>
))}
</div>
) : (
<div class="mt-4 p-4 border border-gray-200 rounded-md bg-gray-50">
<p class="text-sm text-gray-700">
Download packages for this pre-release are not available right now.
</p>
<a
class="hyperlink text-sm inline-flex items-center gap-1 mt-3"
href="/download"
>
Browse stable downloads
<span class="align-middle icon icon-share text-blue-600" />
</a>
</div>
)
) : (
<div class="mt-4 p-4 border border-gray-200 rounded-md bg-gray-50">
<p class="text-sm text-gray-700">
Pre-release downloads are currently unavailable.
</p>
<p class="text-sm text-gray-700 mt-1">
You can still download the latest stable version of Audacity.
</p>
<a
class="hyperlink text-sm inline-flex items-center gap-1 mt-3"
href="/download"
>
Browse stable downloads
<span class="align-middle icon icon-share text-blue-600" />
</a>
</div>
)
}
</aside>
</div>
</main>
</BaseLayout>