Newer
Older
iw-project-support / dev-logs / 20250402-notes.md

Notes for Mill Support Implementation - 2025-04-02

Today's Accomplishments

  1. Completed research on Mill build tool structure and extension development
  2. Analyzed existing SBT infrastructure to understand equivalent implementation in Mill
  3. Created proof-of-concept implementation of key components:

    • IWMillVersions - Centralized version management
    • IWMillDeps - Standardized dependency management
    • IWScalaModule - Standard module configuration
    • IWPublishModule - Publishing configuration
  4. Created example project showing usage

  5. Documented approach and usage in README.md

Key Observations

Advantages of Mill

  1. More intuitive and readable build files

    • Regular Scala code vs. SBT's DSL
    • Method-based configuration vs. key-value pairs
    • Cleaner module definition and inheritance
  2. Simpler extension development

    • Regular library vs. complex plugin system
    • Trait-based sharing of functionality
    • Easier to understand and maintain
  3. Better performance

    • Aggressive caching of build tasks
    • More explicit task dependencies
    • Faster incremental compilation
  4. Improved developer experience

    • Better IDE support with type-checked build files
    • More consistent error messages
    • Easier to debug and troubleshoot

Implementation Notes

  1. IWMillVersions

    • Direct port of IWMaterialsVersions
    • Same version constants, same naming scheme
    • Can be used directly by library users
  2. IWMillDeps

    • Uses Mill's ivy"org::name:version" syntax
    • Same helper methods as IWMaterialsDeps (useZIO, useZIOAll, etc.)
    • Returns Loose.Agg[Dep] instead of SBT's Seq[Def.Setting[_]]
  3. IWScalaModule

    • Extends Mill's ScalaModule and ScalafmtModule
    • Sets default Scala version (3.6.3)
    • Configures standard compiler options
    • Enables SemanticDB for tooling
    • Includes nested IWTests for standard test configuration
  4. IWPublishModule

    • Configures publishing to IW Maven repositories
    • Handles snapshots vs. releases based on version
    • Uses environment variables for credentials

Issues to Address

  1. Scala.js Support

    • Need to implement IWScalaJSModule for JS compilation
    • Need to handle cross-platform dependencies properly
    • Need to support timezone and locale configuration
  2. Mill Plugin Ecosystem

    • Need to identify and integrate with essential Mill plugins
    • Equivalent functionality to SBT plugins we currently use
  3. Testing Framework

    • Currently using utest, but need to support ZIO Test
    • Need to configure proper test initialization
  4. Build Integration

    • Need to test with Nix and direnv
    • Need to ensure compatibility with CI/CD pipelines

Next Development Steps

For Next Session (2025-04-03)

  1. Create IWScalaJSModule

    • Support for Scala.js compilation
    • Cross-platform dependency handling
    • JS-specific configuration
  2. Enhanced Test Support

    • Implement ZIO Test integration
    • Configure proper test initialization
    • Add test logging configurations
  3. Multi-Module Example

    • Create example with multiple modules
    • Show inter-module dependencies
    • Demonstrate publishing configuration

For Future Sessions

  1. Documentation

    • Create comprehensive migration guide
    • Document all traits and components
    • Provide examples for different use cases
  2. Integration Testing

    • Test with real-world projects
    • Measure performance vs. SBT
    • Validate build equivalence
  3. Release Planning

    • Define versioning strategy
    • Setup CI/CD for the library
    • Create announcement for the team

Migration Considerations

  1. Incremental Approach

    • Start with new projects
    • Test on non-critical projects first
    • Gradually migrate existing projects
  2. Dual Build Configuration

    • Initial phase: support both SBT and Mill
    • Update IWMaterialsVersions and IWMillVersions together
    • Maintain feature parity during transition
  3. Knowledge Transfer

    • Create training materials
    • Run workshops for the team
    • Pair programming for initial migrations
  4. Compatibility Monitoring

    • Keep track of SBT plugin updates
    • Ensure Mill implementation stays up to date
    • Regular testing of both build systems