diff --git a/.github/workflows/_kotlin.yml b/.github/workflows/_kotlin.yml index 43479355d..43c55ab9a 100644 --- a/.github/workflows/_kotlin.yml +++ b/.github/workflows/_kotlin.yml @@ -63,7 +63,7 @@ jobs: path: | ./kotlin/android/${{ matrix.output-path }} - name: Upload package to release - if: ${{ github.event_name == 'workflow_dispatch' || github.ref_name == 'main' }} + if: ${{ matrix.package-type == 'apk' && github.event_name == 'workflow_dispatch' }} env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # mark:next-android-version @@ -73,7 +73,7 @@ jobs: cp "${{ matrix.output-path }}" "$ARTIFACT_PATH" ../../scripts/upload/github-release.sh - name: Distribute release to Firebase App Distribution - if: ${{ github.event_name == 'workflow_dispatch' || (github.ref == 'refs/heads/main' && contains(github.event.head_commit.modified, 'elixir/VERSION')) }} + if: ${{ matrix.package-type == 'aab' && github.event_name == 'workflow_dispatch' }} env: FIREBASE_APP_DISTRIBUTION_CREDENTIALS: ${{ secrets.FIREBASE_APP_DISTRIBUTION_CREDENTIALS }} FIREBASE_CREDENTIALS_PATH: firebase-credentials.json diff --git a/website/redirects.js b/website/redirects.js index 0e0d67307..6dc37ee9f 100644 --- a/website/redirects.js +++ b/website/redirects.js @@ -1,6 +1,18 @@ // Add all server-side redirects here. Will be loaded by next.config.mjs. module.exports = [ + /* + * + * Android Client + * + */ + { + source: "/dl/firezone-client-android/latest", + destination: + // mark:current-android-version + "https://www.github.com/firezone/firezone/releases/download/android-client-1.4.0/firezone-android-client-1.4.0.apk", + permanent: false, + }, /* * * Windows GUI Client diff --git a/website/src/app/kb/client-apps/android-client/readme.mdx b/website/src/app/kb/client-apps/android-client/readme.mdx index 22697b113..70cc5a5eb 100644 --- a/website/src/app/kb/client-apps/android-client/readme.mdx +++ b/website/src/app/kb/client-apps/android-client/readme.mdx @@ -15,7 +15,9 @@ Google Play Store. ## Installation 1. [Download the Firezone app](https://play.google.com/store/apps/details?id=dev.firezone.android) - from the Google Play Store. + from the Google Play Store or + [download an APK](https://www.github.com/firezone/firezone/releases) from + GitHub. 1. Run the app. The welcome screen will show "Enable VPN Permission" and the Firezone logo. 1. Tap `Request Permission`. Android will show a dialog saying, @@ -54,11 +56,14 @@ use its normal DNS and Internet behavior. ## Upgrading -Updates for the Android client are handled through the Google Play Store. -Consult the +Updates for the Android client are handled through the Google Play Store if you +installed the app from there. Consult the [Play Store documentation](https://support.google.com/googleplay/answer/113412?hl=en) for more information on how to update apps on your device. +If you installed the app from an APK directly, you will need to download and +install the new APK manually. + ## Diagnostic logs Firezone writes log files to the device's memory. These logs stay on the device diff --git a/website/src/components/Changelog/Android.tsx b/website/src/components/Changelog/Android.tsx index d79bbe0c3..904d12527 100644 --- a/website/src/components/Changelog/Android.tsx +++ b/website/src/components/Changelog/Android.tsx @@ -5,11 +5,19 @@ import Link from "next/link"; import Unreleased from "./Unreleased"; export default function Android() { + const downloadLinks = [ + { + href: "https://play.google.com/store/apps/details?id=dev.firezone.android", + title: "Download on Google Play", + }, + { + href: "https://www.firezone.dev/dl/firezone-client-android/:version", + title: "Download APK", + }, + ]; + return ( - + {/* When you cut a release, remove any solved issues from the "known issues" lists over in `client-apps`. This must not be done when the issue's PR merges. */} diff --git a/website/src/components/Changelog/Apple.tsx b/website/src/components/Changelog/Apple.tsx index 24a45da31..065687ba7 100644 --- a/website/src/components/Changelog/Apple.tsx +++ b/website/src/components/Changelog/Apple.tsx @@ -5,11 +5,15 @@ import ChangeItem from "./ChangeItem"; import Unreleased from "./Unreleased"; export default function Apple() { + const downloadLinks = [ + { + href: "https://apps.apple.com/us/app/firezone/id6443661826", + title: "Download on App Store", + }, + ]; + return ( - + {/* When you cut a release, remove any solved issues from the "known issues" lists over in `client-apps`. This must not be done when the issue's PR merges. */} diff --git a/website/src/components/Changelog/Entries.tsx b/website/src/components/Changelog/Entries.tsx index 72fecf117..74a3f2afe 100644 --- a/website/src/components/Changelog/Entries.tsx +++ b/website/src/components/Changelog/Entries.tsx @@ -3,16 +3,19 @@ import Entry from "./Entry"; import Link from "next/link"; import Unreleased from "./Unreleased"; +export type DownloadLink = { + title: string; + href: string; +}; + function Latest({ - arches, - href, + downloadLinks, title, version, date, children, }: { - arches?: string[]; - href: string; + downloadLinks: DownloadLink[]; title: string; version: string; date: Date; @@ -41,29 +44,15 @@ function Latest({

- Download: - {arches ? ( - arches.map((arch) => ( - - {arch} - - )) - ) : ( + {downloadLinks.map((link) => ( - Download for all platforms + {link.title} - )} + ))}

{children} @@ -113,13 +102,11 @@ function Previous({ } export default function Entries({ - href, - arches, + downloadLinks, title, children, }: { - href: string; - arches?: string[]; + downloadLinks: DownloadLink[]; title: string; children: React.ReactNode; }) { @@ -135,8 +122,7 @@ export default function Entries({ return (
+ {/* When you cut a release, remove any solved issues from the "known issues" lists over in `client-apps`. This must not be done when the issue's PR merges. */} diff --git a/website/src/components/Changelog/Gateway.tsx b/website/src/components/Changelog/Gateway.tsx index 69e67924e..461232ed7 100644 --- a/website/src/components/Changelog/Gateway.tsx +++ b/website/src/components/Changelog/Gateway.tsx @@ -5,11 +5,23 @@ import ChangeItem from "./ChangeItem"; import Unreleased from "./Unreleased"; export default function Gateway() { - const href = "/dl/firezone-gateway/:version/:arch"; - const arches = ["x86_64", "aarch64", "armv7"]; + const downloadLinks = [ + { + href: "https://www.firezone.dev/dl/firezone-gateway/:version/x86_64", + title: "Download for x86_64", + }, + { + href: "https://www.firezone.dev/dl/firezone-gateway/:version/aarch64", + title: "Download for aarch64", + }, + { + href: "https://www.firezone.dev/dl/firezone-gateway/:version/armv7", + title: "Download for armv7", + }, + ]; return ( - + Fixes an issue where ICMPv6's `PacketTooBig' errors were not correctly diff --git a/website/src/components/Changelog/Headless.tsx b/website/src/components/Changelog/Headless.tsx index 7d6dd429f..6f2eb6752 100644 --- a/website/src/components/Changelog/Headless.tsx +++ b/website/src/components/Changelog/Headless.tsx @@ -5,11 +5,23 @@ import Link from "next/link"; import Unreleased from "./Unreleased"; export default function Headless() { - const href = "/dl/firezone-client-headless-linux/:version/:arch"; - const arches = ["x86_64", "aarch64", "armv7"]; + const downloadLinks = [ + { + href: "https://www.firezone.dev/dl/firezone-client-headless-linux/:version/x86_64", + title: "Download for x86_64", + }, + { + href: "https://www.firezone.dev/dl/firezone-client-headless-linux/:version/aarch64", + title: "Download for aarch64", + }, + { + href: "https://www.firezone.dev/dl/firezone-client-headless-linux/:version/armv7", + title: "Download for armv7", + }, + ]; return ( - + {/* When you cut a release, remove any solved issues from the "known issues" lists over in `client-apps`. This must not be done when the issue's PR merges. */} diff --git a/website/src/middleware.ts b/website/src/middleware.ts index aba899df0..7711d09f7 100644 --- a/website/src/middleware.ts +++ b/website/src/middleware.ts @@ -3,6 +3,11 @@ import { NextResponse, NextRequest } from "next/server"; // This middleware is needed because NextJS doesn't populate params in the destination // more than once. See https://github.com/vercel/next.js/issues/66891 const versionedRedirects = [ + { + source: /^\/dl\/firezone-client-android\/(\d+\.\d+\.\d+)$/, + destination: + "https://www.github.com/firezone/firezone/releases/download/android-client-:version/firezone-android-client-:version.apk", + }, { source: /^\/dl\/firezone-client-gui-windows\/(\d+\.\d+\.\d+)\/x86_64$/, destination: