@@ -5,7 +5,7 @@ use std::sync::atomic::{AtomicBool, Ordering};
5
5
use std:: { env, fs, time} ;
6
6
7
7
use super :: custom:: { Dockerfile , PreBuild } ;
8
- use super :: image:: PossibleImage ;
8
+ use super :: image:: { ImageReference , PossibleImage } ;
9
9
use super :: Image ;
10
10
use super :: PROVIDED_IMAGES ;
11
11
use super :: { engine:: * , ProvidedImage } ;
@@ -1251,6 +1251,13 @@ fn get_user_image(
1251
1251
image = config. zig_image ( target) . map_err ( GetImageError :: Other ) ?;
1252
1252
}
1253
1253
1254
+ if let Some ( image) = & mut image {
1255
+ if let ImageReference :: Identifier ( id) = & image. reference {
1256
+ let target_name = get_target_name ( target, uses_zig) ;
1257
+ image. reference = ImageReference :: Name ( format ! ( "{CROSS_IMAGE}/{target_name}{id}" ) ) ;
1258
+ }
1259
+ }
1260
+
1254
1261
Ok ( image)
1255
1262
}
1256
1263
@@ -1276,7 +1283,7 @@ pub fn get_image_name(
1276
1283
uses_zig : bool ,
1277
1284
) -> Result < String , GetImageError > {
1278
1285
if let Some ( image) = get_user_image ( config, target, uses_zig) ? {
1279
- return Ok ( image. name ) ;
1286
+ return Ok ( image. reference . get ( ) . to_owned ( ) ) ;
1280
1287
}
1281
1288
1282
1289
let target_name = get_target_name ( target, uses_zig) ;
@@ -1542,8 +1549,10 @@ pub fn path_hash(path: &Path, count: usize) -> Result<String> {
1542
1549
1543
1550
#[ cfg( test) ]
1544
1551
mod tests {
1552
+ use std:: collections:: HashMap ;
1553
+
1545
1554
use super :: * ;
1546
- use crate :: id ;
1555
+ use crate :: { config :: Environment , id } ;
1547
1556
1548
1557
#[ cfg( not( target_os = "windows" ) ) ]
1549
1558
use crate :: file:: PathExt ;
@@ -1598,6 +1607,48 @@ mod tests {
1598
1607
}
1599
1608
}
1600
1609
1610
+ #[ test]
1611
+ fn test_tag_only_image ( ) -> Result < ( ) > {
1612
+ let target: Target = TargetTriple :: X86_64UnknownLinuxGnu . into ( ) ;
1613
+ let test = |map, expected_ver : & str , expected_ver_zig : & str | -> Result < ( ) > {
1614
+ let env = Environment :: new ( Some ( map) ) ;
1615
+ let config = Config :: new_with ( None , env) ;
1616
+ for ( uses_zig, expected_ver) in [ ( false , expected_ver) , ( true , expected_ver_zig) ] {
1617
+ let expected_image_target = if uses_zig {
1618
+ "zig"
1619
+ } else {
1620
+ "x86_64-unknown-linux-gnu"
1621
+ } ;
1622
+ let expected = format ! ( "ghcr.io/cross-rs/{expected_image_target}{expected_ver}" ) ;
1623
+
1624
+ let image = get_image ( & config, & target, uses_zig) ?;
1625
+ assert_eq ! ( image. reference. get( ) , expected) ;
1626
+ let image_name = get_image_name ( & config, & target, uses_zig) ?;
1627
+ assert_eq ! ( image_name, expected) ;
1628
+ }
1629
+ Ok ( ( ) )
1630
+ } ;
1631
+
1632
+ let default_ver = format ! ( ":{DEFAULT_IMAGE_VERSION}" ) ;
1633
+ let mut map = HashMap :: new ( ) ;
1634
+ test ( map. clone ( ) , & default_ver, & default_ver) ?;
1635
+
1636
+ map. insert ( "CROSS_TARGET_X86_64_UNKNOWN_LINUX_GNU_IMAGE" , ":edge" ) ;
1637
+ test ( map. clone ( ) , ":edge" , ":edge" ) ?;
1638
+
1639
+ // `image` always takes precedence over `zig.image`, even when `uses_zig` is `true`
1640
+ map. insert (
1641
+ "CROSS_TARGET_X86_64_UNKNOWN_LINUX_GNU_ZIG_IMAGE" ,
1642
+ "@sha256:foobar" ,
1643
+ ) ;
1644
+ test ( map. clone ( ) , ":edge" , ":edge" ) ?;
1645
+
1646
+ map. remove ( "CROSS_TARGET_X86_64_UNKNOWN_LINUX_GNU_IMAGE" ) ;
1647
+ test ( map. clone ( ) , & default_ver, "@sha256:foobar" ) ?;
1648
+
1649
+ Ok ( ( ) )
1650
+ }
1651
+
1601
1652
mod directories {
1602
1653
use super :: * ;
1603
1654
use crate :: cargo:: cargo_metadata_with_args;
0 commit comments