This repository contains GitHub Actions workflows and utilities for automatically updating AWS CRT library JLL packages in the Julia ecosystem.
Strategy
Problem
Previously, when updating a library (e.g., aws_c_cal from version 0.9.0 to 0.9.1), the workflow would:
Update the library’s build_tarballs.jl
Update ALL other build_tarballs.jl files that depend on this library to use the new version
This caused a cascade of unnecessary rebuilds in Yggdrasil, since every change to a build_tarballs.jl file requires incrementing the version and rebuilding.
Solution
The new strategy focuses on updating dependencies within the library being updated, rather than updating dependents:
When updating a library: Update its own dependencies to use the latest available JLL versions
Maintain a JLL versions cache: Keep a jll-versions.json file with the latest known versions of all AWS-related JLL packages
Dynamic dependency resolution: When updating a library’s build_tarballs.jl, automatically fetch and update its dependencies to the latest versions
Components
1. JLL Versions Cache (jll-versions.json)
A JSON file containing the latest known versions of all AWS-related JLL packages:
This cache is updated periodically by the GitHub Actions workflow.
2. JLL Version Manager (jll-version-manager.jl)
A Julia utility script that:
Queries Julia registries and GitHub for latest JLL package versions
Updates the versions cache
Parses build_tarballs.jl files and updates dependency versions
Provides a CLI interface for version management
Usage:
julia jll-version-manager.jl update-cache # Update the versions cache
julia jll-version-manager.jl update-deps build_tarballs.jl # Update dependencies in a file
julia jll-version-manager.jl get-version aws_c_common_jll # Get latest version of a package
3. GitHub Actions Workflow
The workflow runs hourly and:
Updates the JLL cache with latest versions from Julia registries
Checks each AWS library for new releases
When a new release is found:
Updates the library version and SHA in its build_tarballs.jl
Updates all dependencies in that file to use the latest available versions
Creates a PR with the changes
Benefits
Fewer unnecessary rebuilds: Only the updated library gets rebuilt, not all its dependents
Always up-to-date dependencies: When a library is updated, it automatically gets the latest dependency versions
Cached version lookups: Fast dependency resolution using the maintained cache
Fallback to live queries: If cache is stale, automatically queries for latest versions
Comprehensive dependency management: Handles both Dependency and BuildDependency declarations
Example
When aws_c_common is updated from 0.12.2 to 0.12.3:
Old approach:
Update aws_c_common/build_tarballs.jl to version 0.12.3
Find and update ~10 other libraries that depend on aws_c_common_jll
All ~10 libraries get rebuilt unnecessarily
New approach:
Update aws_c_common/build_tarballs.jl to version 0.12.3
Update any dependencies within aws_c_common to their latest versions
Only aws_c_common gets rebuilt
Other libraries will pick up the new version naturally when they’re next updated
This results in significantly fewer spurious rebuilds while keeping the ecosystem current.
AWS JLL Auto-Update
This repository contains GitHub Actions workflows and utilities for automatically updating AWS CRT library JLL packages in the Julia ecosystem.
Strategy
Problem
Previously, when updating a library (e.g.,
aws_c_calfrom version 0.9.0 to 0.9.1), the workflow would:build_tarballs.jlbuild_tarballs.jlfiles that depend on this library to use the new versionThis caused a cascade of unnecessary rebuilds in Yggdrasil, since every change to a
build_tarballs.jlfile requires incrementing the version and rebuilding.Solution
The new strategy focuses on updating dependencies within the library being updated, rather than updating dependents:
jll-versions.jsonfile with the latest known versions of all AWS-related JLL packagesbuild_tarballs.jl, automatically fetch and update its dependencies to the latest versionsComponents
1. JLL Versions Cache (
jll-versions.json)A JSON file containing the latest known versions of all AWS-related JLL packages:
This cache is updated periodically by the GitHub Actions workflow.
2. JLL Version Manager (
jll-version-manager.jl)A Julia utility script that:
build_tarballs.jlfiles and updates dependency versionsUsage:
3. GitHub Actions Workflow
The workflow runs hourly and:
build_tarballs.jlBenefits
DependencyandBuildDependencydeclarationsExample
When
aws_c_commonis updated from 0.12.2 to 0.12.3:Old approach:
aws_c_common/build_tarballs.jlto version 0.12.3aws_c_common_jllNew approach:
aws_c_common/build_tarballs.jlto version 0.12.3aws_c_commonto their latest versionsaws_c_commongets rebuiltThis results in significantly fewer spurious rebuilds while keeping the ecosystem current.