-
Notifications
You must be signed in to change notification settings - Fork 318
Astro migration foundation #3522
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Open
dannon
wants to merge
106
commits into
galaxyproject:master
Choose a base branch
from
dannon:astro-migrate
base: master
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Open
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
- Add Astro-specific directories to ignore - Exclude generated content collections - Exclude node_modules and build artifacts
- Set up Astro with Vue 3 and MDX integrations - Configure for static site generation - Add base layout with Bootstrap 5 styling - Port SCSS files from original project - Create initial homepage
- Create Bootstrap Vue replacement components (BButton, BAlert, BCard, BFormInput) - Set up global component registration - Add test component demonstrating compatibility - Configure content collections schema with all field types
- Port preprocessing logic to Astro content collections - Detect Vue component usage automatically - Convert Gridsome syntax (g-link, g-image) to standard HTML - Add development scripts for preprocessing workflow - Successfully processes 4,346 content files
- Create test page to verify content collections - Display sample items from each collection type - Show content counts for verification
- Copy images and assets alongside markdown files - Update image paths to use public directory structure - Handle case-insensitive image extensions - Remove unsupported layout field from frontmatter
- Remove deprecated ~ prefix from imports - Convert deprecated color functions (lighten/darken) to modern syntax - Add required @use statements for sass modules
- Copy all images from content directories during preprocessing - Maintain original directory structure under public/images/
- Add content configuration with proper schemas - Create templates for Article, VueArticle, Platform, and BareArticle - Implement dynamic catch-all routing for all content types - Add homepage with recent news and navigation - Add news listing page - Update BaseLayout with navigation and bare mode support - Fix LinkBox component to handle undefined data safely
- Add safety checks for tags arrays in templates - Process frontmatter to ensure tags, subsites, and authors are arrays - Fix optional chaining in LinkBox component - Remove test pages that were causing errors - Successfully build 4147 pages from content
- Define schemas for all content types (articles, vue-articles, platforms, etc.) - Set up proper type validation for frontmatter fields - Support varying content structures across collections
- Create Navbar component with dropdown support and mobile toggle - Create Carousel component with autoplay and controls - Create Tabs component with keyboard navigation - Create Accordion component with multiple/single mode - Register all new components globally in vue-app
- Create search index generator using Lunr.js - Extract content from all markdown files for indexing - Create Search component with pagination and filtering - Add search page with tips and instructions - Integrate search index generation into build process
- Configure sitemap with proper URL and filtering - Add code splitting for better performance - Separate vendor chunks for vue, vega, and search - Add search link to main navigation - Never inline stylesheets for better caching
- Limit indexed content to first 1000 characters - Reduce preview content to 300 characters - Remove fullContent from search index fields - Reduced index size from 30MB to 7MB
- Create events collection schema in content config - Add events detection in preprocessing based on path - Create /events listing page with upcoming/past events - Process 1,312 event files into separate collection - Add date-fns for event date formatting
- Install @playwright/test as dev dependency - Create playwright.config.ts with basic setup - Add comprehensive test suites for navigation, events, and search - Configure test scripts in package.json - Add test artifacts to .gitignore - Tests verify basic functionality and help catch regressions
- Add Use Galaxy page listing public servers and installation options - Add Community page with support, collaboration, and contribution info - Add Search page with client-side Lunr.js search functionality - Create comprehensive tests for all main landing pages - All navigation tests now pass
- Verify articles, events, and platforms collections work - Test search index contains documents - Verify content metadata rendering - Test Vue article pages - All tests passing with 3730 documents indexed
- Track progress: 70% feature parity achieved - Document completed infrastructure and pages - List pending components and upcoming phases - Include key metrics and next steps
- Prioritize remaining Phase 3 components - Detail Phase 4 regional subsites implementation - List all Phase 5 missing features - Include quick wins and timeline estimates - Add command reference and success criteria
- Create Vue 3 Footer component with all links - Include Galaxy logo and social media links - Add responsive styling - Integrate into BaseLayout - Add comprehensive Playwright tests - All footer tests passing
- Create Vue 3 Twitter component using Twitter widgets API - Support both single tweets and user timelines - Add theme support (light/dark) - Implement centering and responsive design - Create test page with multiple examples - Add comprehensive Playwright tests - All tests passing
- Migrate CalendarEmbed from Vue 2 to Vue 3 composition API - Support both Eventzilla event widgets and Google Calendar embeds - Add configurable dimensions, timezone, and calendar ID props - Create comprehensive test page at /test/calendar - Add full Playwright test coverage for calendar functionality - Register component globally in vue-app.js
- Create CarouselDefault component for backward compatibility with Gridsome carousel - Update existing Carousel component to support links on slides - Register both default and custom carousel components globally - Add comprehensive test pages demonstrating carousel variations - Create Playwright tests for carousel functionality - Support autoplay, indicators, controls, and custom intervals
- VideoPlayer component was already migrated to Vue 3 - Create comprehensive test page demonstrating all video player features - Add Playwright tests for video player functionality - Test autoplay, loop, muted, poster, and dimension attributes - Verify proper video element rendering and controls
- MarkdownEmbed component was already migrated to Vue 3 - Create comprehensive test page with remote, local, and direct markdown - Add sample markdown file for testing local loading - Create Playwright tests for all markdown rendering features - Test loading states, error handling, and markdown styling - Verify support for various markdown elements
- Update MIGRATION-PROGRESS.md with Phase 3 completion status - Create comprehensive ASTRO-MIGRATION-PRD.md document - Document all 12 migrated components with test coverage - Update project status to 40% complete (3 of 8 phases) - Outline remaining work for Phases 4-8 - Add timeline estimates and success metrics
- Create subsites configuration system with all regional sites - Implement dynamic routing for subsite homepages, news, and events - Create SubsiteHome component for regional landing pages - Update Navbar to support subsite-specific navigation and styling - Add subsite switcher dropdown in navigation - Parse and apply regional navbar.yml configurations - Implement content filtering by subsite - Add comprehensive tests for all subsite functionality - Support external subsites (e.g., Australia redirect) - Test with EU subsite content and navigation
…o the content type'
Styled news/events index pages to match article layout (white background, gold separator). Added load more pagination to news list and past events. Added contextual back links for news and events content pages.
News and past events now show year buttons to jump between years. Each year still has "load more" if there are many items. Defaults to the most recent year with content.
Moved the SubsiteSwitcher component from Sidebar.astro into SidebarNav.vue, placing it after the Applications section and before the @jxtx Foundation link. Also fixed the homepage grid pattern by using a pseudo-element so it properly layers over section backgrounds instead of getting overwritten by them.
Set up linting and formatting for the Astro migration: - ESLint with TypeScript, Astro, and Vue plugins - Prettier with Astro plugin - GitHub Actions workflow that runs on changes to astro/ directory - Fixed various lint errors (computed side effects, JSX comments) - Applied consistent formatting across all source files
Member
|
Very cool strategy! |
Homepage masthead now appears when hovering near the top of the page, giving users quick access to navigation without scrolling. Also added LinkedIn to the sidebar social links.
The homepage now uses HomeLayout without a sidebar, so tests that expected sidebar elements on / needed to use article pages like /admin/ instead. Also updated tests to match the current homepage structure (pillar cards, custom hero/footer classes).
The Astro project uses Vitest for its tests, so the root Jest should not try to run test files in the astro/ directory.
Builds and deploys the Astro site to /astro-preview/ alongside the main Gridsome site. The Astro base path is configurable via ASTRO_BASE env var so local dev still works at root. Once merged, the preview will be at https://galaxyproject.org/astro-preview/
The <Insert> component syntax broke Gridsome builds because Vue's template compiler treats it differently than the native <slot> element. Content files now use <slot name="..."> which works with Gridsome. Astro's preprocessing converts these to <Insert name="..."/> during the build via convertGridsomeSyntax(). This keeps both build systems happy with the same source content.
bgruening
approved these changes
Jan 13, 2026
Member
|
Works great! I guess for people like me a Makefile integration would be nice, but I got it to work and its a awesome start. |
Added make targets for working with the Astro site: - astro-install: Install dependencies - astro-dev: Run dev server - astro-build: Build the site - astro-preview: Preview built site The dev/build/preview targets depend on astro-install to ensure dependencies are present.
Member
Author
|
Added build targets to the makefile and linked up our board (Astro Migration) in the description as well. Thanks again! |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
Foundation work for migrating Galaxy Community Hub from Gridsome to Astro. This is a parallel development effort - the existing Gridsome site continues to work unchanged and this PR does not affect the current production setup in any way.
The Astro implementation lives entirely in the
/astrosubdirectory and can be developed, tested, and refined independently while the main site remains on Gridsome.There are content migration/staging scripts that run as a part of the build (for now) so that parallel development is easy without conflicts.
Will close #3505
Homepage
Internal Article Page
What's included
What this enables
Technical approach
/astrodirectoryQuick start
Known issues & roadmap
We're tracking known issues and planned improvements on the project board:
Astro Migration
Contributions welcome! Pick an issue and help us get to the finish line.
Test plan
make astro-dev)