Migrate to .NET 8 LTS, consolidate Docker infrastructure, and fix GitHub workflows
This PR migrates all F# projects from .NET Core 3.0/3.1 to .NET 8 LTS, consolidates Docker infrastructure, and updates GitHub workflows to use supported runner images.
F# Projects Migration
Updated all F# projects to target .NET 8:
-
src/visualizations/App.fsprojfromnetcoreapp3.0tonet8.0 -
tests/Visualizations.Tests/Visualizations.Tests.fsprojfromnetcoreapp3.1tonet8.0 -
Owid.Analyzer/Owid.Analyzer.fsprojfromnetcoreapp3.1tonet8.0
Docker Infrastructure Consolidation
Replaced the problematic two-Dockerfile setup with a single consolidated Dockerfile:
Before: Separate base.Dockerfile (for ghcr.io/sledilnik/website-base) + Dockerfile
After: Single Dockerfile with multi-stage build
The new Docker setup:
- Uses
node:20-alpine3.22base image with--platform=$BUILDPLATFORMfor native build performance - Manually installs .NET 8 SDK with multi-architecture support (amd64/arm64)
- Eliminates dependency on potentially outdated base images
- Follows Docker best practices with optimized layer caching
GitHub Workflows
Fixed deprecated actions and updated versions:
- Updated all workflows from
ubuntu-20.04toubuntu-22.04 - Fixed deprecated
actions/[email protected]toactions/cache@v4 - Updated Node.js version from 18 to 20.11.1 across all workflows
- Updated
actions/setup-nodeto v4 and other actions to latest versions
DevContainer Updates
Updated development environment to match production:
- Upgraded from .NET Core 3.1 to .NET 8.0
- Updated Node.js from 14.0 to 20.11.1
- Updated F# runtime settings to
net8.0
Package Compatibility
Fixed Node.js 20 compatibility issues:
- Added yarn resolution for
@achrinza/[email protected] - Downgraded
@vue/cli-plugin-babelto maintain Vue CLI v4 consistency
Benefits
- Security: .NET 8 LTS support until November 2026
- Performance: Native build platform and latest runtime optimizations
- Reliability: Eliminates base image dependency issues
- Multi-arch: Native support for both amd64 and arm64 architectures
- Maintenance: All workflows use currently supported runner images
The docker build . command now works reliably on both amd64 and arm64 architectures without external image dependencies.
Fixes #1364.
💡 You can make Copilot smarter by setting up custom instructions, customizing its development environment and configuring Model Context Protocol (MCP) servers. Learn more Copilot coding agent tips in the docs.