diff --git a/.github/workflows/require-label.yml b/.github/workflows/require-label.yml new file mode 100644 index 00000000..0a7f27c0 --- /dev/null +++ b/.github/workflows/require-label.yml @@ -0,0 +1,17 @@ +name: Pull Request Labels +on: + pull_request: + types: [opened, labeled, unlabeled, synchronize] +jobs: + label: + runs-on: ubuntu-latest + steps: + - uses: mheap/github-action-required-labels@v5 + with: + mode: minimum + count: 1 + labels: | + documentation + internal + bug + enhancement diff --git a/apps/docs/astro.config.mjs b/apps/docs/astro.config.mjs index e3fee847..241a5e0d 100644 --- a/apps/docs/astro.config.mjs +++ b/apps/docs/astro.config.mjs @@ -13,17 +13,19 @@ export default defineConfig({ alias: { '@assets': path.resolve(process.cwd(), './src/assets'), '@components': path.resolve(process.cwd(), './src/components'), + '@utils': path.resolve(process.cwd(), './src/utils'), }, }, }, integrations: [ starlight({ + routeMiddleware: './src/route-data.ts', components: { SiteTitle: './src/components/SiteTitle.astro', Hero: './src/components/Hero.astro', Footer: './src/components/Footer.astro', }, - title: '@sheepdog/svelte', + title: '@sheepdog', expressiveCode: { themes: ['github-dark-default', 'github-light-default'], }, @@ -60,6 +62,7 @@ export default defineConfig({ editLink: { baseUrl: 'https://github.com/mainmatter/sheepdog/edit/main', }, + // the sidebar is updated in `route-data.ts` to prepend the correct package name sidebar: [ { label: 'Getting started', @@ -143,4 +146,22 @@ export default defineConfig({ ], output: 'static', adapter: netlify({}), + redirects: { + '/explainers/async-transform': '/svelte/explainers/async-transform', + '/explainers/linking-tasks': '/svelte/explainers/linking-tasks', + '/explainers/mid-run-cancellation': '/svelte/explainers/mid-run-cancellation', + '/explainers/task-modifiers': '/svelte/explainers/task-modifiers', + '/getting-started/installation': '/svelte/getting-started/installation', + '/getting-started/usage': '/svelte/getting-started/usage', + '/getting-started/what-is-it': '/svelte/getting-started/what-is-it', + '/reference/[...all]': '/svelte/reference/[...all]', + '/reference/default': '/svelte/reference/default', + '/reference/drop': '/svelte/reference/drop', + '/reference/enqueue': '/svelte/reference/enqueue', + '/reference/keep-latest': '/svelte/reference/keep-latest', + '/reference/restart': '/svelte/reference/restart', + '/reference/sheepdog-utils': '/svelte/reference/sheepdog-utils', + '/reference/task-instance': '/svelte/reference/task-instance', + '/reference/transform': '/svelte/reference/transform', + }, }); diff --git a/apps/docs/src/components/Footer.astro b/apps/docs/src/components/Footer.astro index 8054029e..51a9cd31 100644 --- a/apps/docs/src/components/Footer.astro +++ b/apps/docs/src/components/Footer.astro @@ -1,9 +1,9 @@ --- -import type { Props } from '@astrojs/starlight/props'; import Default from '@astrojs/starlight/components/Footer.astro'; import MainmatterLogo from '../assets/Mainmatter.astro'; +import { is_homepage } from '@utils/is-homepage'; -const isHomepage = Astro.locals.starlightRoute.id === ''; +const isHomepage = is_homepage(Astro.locals.starlightRoute.id); --- { diff --git a/apps/docs/src/components/Hero.astro b/apps/docs/src/components/Hero.astro index 83d1c96a..2fe2a254 100644 --- a/apps/docs/src/components/Hero.astro +++ b/apps/docs/src/components/Hero.astro @@ -5,7 +5,7 @@ import type { ImageMetadata } from 'astro'; const PAGE_TITLE_ID = '_top'; const { data } = Astro.locals.starlightRoute.entry; -const { title = data.title ?? "Sheepdog", tagline, image, actions = [] } = data?.hero ?? {}; +const { tagline, image, actions = [] } = data?.hero ?? {}; const imageAttrs = { loading: 'eager' as const, @@ -65,6 +65,40 @@ if (image) { isWoofed = !isWoofed; }), ); + + const package_span = document.getElementById('package'); + + if (package_span) { + const packages = package_span?.dataset.packages?.split(',') ?? []; + + let current_package = 0; + let current_wrote = 0; + let deleting = false; + + function typewrite_package() { + if (packages[current_package]) { + let time = 100; + if (current_wrote < packages[current_package].length && !deleting) { + current_wrote++; + package_span!.innerHTML = packages[current_package].substring(0, current_wrote); + if (current_wrote === packages[current_package].length) { + deleting = true; + time = 2000; + } + } else if (current_wrote > 0) { + current_wrote--; + package_span!.innerHTML = packages[current_package].substring(0, current_wrote); + if (current_wrote === 0) { + deleting = false; + current_package = (current_package + 1) % packages.length; + } + } + setTimeout(typewrite_package, time); + } + } + + setTimeout(typewrite_package, 100); + }