Repository: canonical/snapcraft

Issue:
Use `core24` buildd daily image
### What needs to get done

1. Release and update craft-providers
2. Add support for the core24 base
3. Update spread tests

### Why it needs to get done

Now that https://github.com/canonical/craft-providers/pull/456 has landed, snapcraft add support for the `core24` buildd daily image.

This means developers will be able to use:
```
base: core24
grade: devel
```

instead of the current paradigm:
```
base: core24
build-base: devel
grade: devel
```



Discussion:
@sergiusens, do we need to retain the requirement for `grade: devel`?

And is this the correct approach?
Currently blocked by https://github.com/canonical/craft-providers/issues/498
Per Sergio, the correct approach is to not make changes to the `snapcraft.yaml`, but swap out the `devel` daily for the `core24` buildd daily.

Once `core24` is in beta, then we can make changes to the `snapcraft.yaml`.

Resolving patch:
diff --git a/snapcraft/extensions/gnome.py b/snapcraft/extensions/gnome.py
--- a/snapcraft/extensions/gnome.py
+++ b/snapcraft/extensions/gnome.py
@@ -155,8 +155,17 @@ def get_root_snippet(self) -> Dict[str, Any]:
                 }
             },
             "layout": {
-                "/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0": {
-                    "bind": "$SNAP/gnome-platform/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0"
+                "/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0": {
+                    "bind": (
+                        "$SNAP/gnome-platform/usr/lib/"
+                        "$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0"
+                    )
+                },
+                "/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1": {
+                    "bind": (
+                        "$SNAP/gnome-platform/usr/lib/"
+                        "$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1"
+                    )
                 },
                 "/usr/share/xml/iso-codes": {
                     "bind": "$SNAP/gnome-platform/usr/share/xml/iso-codes"
@@ -189,11 +198,14 @@ def get_part_snippet(self, *, plugin_name: str) -> Dict[str, Any]:
                     "LD_LIBRARY_PATH": prepend_to_env(
                         "LD_LIBRARY_PATH",
                         [
-                            f"/snap/{sdk_snap}/current/lib/$CRAFT_ARCH_TRIPLET",
-                            f"/snap/{sdk_snap}/current/usr/lib/$CRAFT_ARCH_TRIPLET",
+                            f"/snap/{sdk_snap}/current/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR",
+                            f"/snap/{sdk_snap}/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR",
                             f"/snap/{sdk_snap}/current/usr/lib",
                             f"/snap/{sdk_snap}/current/usr/lib/vala-current",
-                            f"/snap/{sdk_snap}/current/usr/lib/$CRAFT_ARCH_TRIPLET/pulseaudio",
+                            (
+                                f"/snap/{sdk_snap}/current/usr/lib/"
+                                "$CRAFT_ARCH_TRIPLET_BUILD_FOR/pulseaudio"
+                            ),
                         ],
                     ),
                 },
@@ -201,7 +213,10 @@ def get_part_snippet(self, *, plugin_name: str) -> Dict[str, Any]:
                     "PKG_CONFIG_PATH": prepend_to_env(
                         "PKG_CONFIG_PATH",
                         [
-                            f"/snap/{sdk_snap}/current/usr/lib/$CRAFT_ARCH_TRIPLET/pkgconfig",
+                            (
+                                f"/snap/{sdk_snap}/current/usr/lib/"
+                                "$CRAFT_ARCH_TRIPLET_BUILD_FOR/pkgconfig"
+                            ),
                             f"/snap/{sdk_snap}/current/usr/lib/pkgconfig",
                             f"/snap/{sdk_snap}/current/usr/share/pkgconfig",
                         ],
@@ -217,7 +232,7 @@ def get_part_snippet(self, *, plugin_name: str) -> Dict[str, Any]:
                 },
                 {
                     "GDK_PIXBUF_MODULE_FILE": (
-                        f"/snap/{sdk_snap}/current/usr/lib/$CRAFT_ARCH_TRIPLET"
+                        f"/snap/{sdk_snap}/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR"
                         "/gdk-pixbuf-current/loaders.cache"
                     ),
                 },
@@ -235,11 +250,23 @@ def get_part_snippet(self, *, plugin_name: str) -> Dict[str, Any]:
                         [
                             f"/snap/{sdk_snap}/current/usr/lib/python3.10",
                             f"/snap/{sdk_snap}/current/usr/lib/python3/dist-packages",
-                            f"/snap/{sdk_snap}/current/usr/lib/$CRAFT_ARCH_TRIPLET"
+                            f"/snap/{sdk_snap}/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR"
                             "/gobject-introspection",
                         ],
                     ),
                 },
+                {
+                    "GI_TYPELIB_PATH": prepend_to_env(
+                        "GI_TYPELIB_PATH",
+                        [
+                            f"/snap/{sdk_snap}/current/usr/lib/girepository-1.0",
+                            (
+                                f"/snap/{sdk_snap}/usr/lib/"
+                                "$CRAFT_ARCH_TRIPLET_BUILD_FOR/girepository-1.0"
+                            ),
+                        ],
+                    )
+                },
             ],
         }
 
diff --git a/snapcraft/providers.py b/snapcraft/providers.py
--- a/snapcraft/providers.py
+++ b/snapcraft/providers.py
@@ -42,7 +42,7 @@
     "core18": bases.BuilddBaseAlias.BIONIC,
     "core20": bases.BuilddBaseAlias.FOCAL,
     "core22": bases.BuilddBaseAlias.JAMMY,
-    "core24": bases.BuilddBaseAlias.DEVEL,
+    "core24": bases.BuilddBaseAlias.NOBLE,
     "devel": bases.BuilddBaseAlias.DEVEL,
 }
 


Test patch:
diff --git a/tests/unit/extensions/test_gnome.py b/tests/unit/extensions/test_gnome.py
--- a/tests/unit/extensions/test_gnome.py
+++ b/tests/unit/extensions/test_gnome.py
@@ -93,8 +93,11 @@ def test_get_root_snippet(gnome_extension):
             }
         },
         "layout": {
-            "/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0": {
-                "bind": "$SNAP/gnome-platform/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0"
+            "/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0": {
+                "bind": "$SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0"
+            },
+            "/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1": {
+                "bind": "$SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1"
             },
             "/usr/share/xml/iso-codes": {
                 "bind": "$SNAP/gnome-platform/usr/share/xml/iso-codes"
@@ -141,8 +144,11 @@ def test_get_root_snippet_with_external_sdk(gnome_extension_with_build_snap):
             }
         },
         "layout": {
-            "/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0": {
-                "bind": "$SNAP/gnome-platform/usr/lib/$SNAPCRAFT_ARCH_TRIPLET/webkit2gtk-4.0"
+            "/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0": {
+                "bind": "$SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.0"
+            },
+            "/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1": {
+                "bind": "$SNAP/gnome-platform/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR/webkit2gtk-4.1"
             },
             "/usr/share/xml/iso-codes": {
                 "bind": "$SNAP/gnome-platform/usr/share/xml/iso-codes"
@@ -202,19 +208,20 @@ def assert_get_part_snippet(gnome_instance):
                 {
                     "LD_LIBRARY_PATH": ":".join(
                         [
-                            "/snap/gnome-42-2204-sdk/current/lib/$CRAFT_ARCH_TRIPLET",
-                            "/snap/gnome-42-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET",
+                            "/snap/gnome-42-2204-sdk/current/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR",
+                            "/snap/gnome-42-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR",
                             "/snap/gnome-42-2204-sdk/current/usr/lib",
                             "/snap/gnome-42-2204-sdk/current/usr/lib/vala-current",
                             "/snap/gnome-42-2204-sdk/current/usr/lib/"
-                            "$CRAFT_ARCH_TRIPLET/pulseaudio",
+                            "$CRAFT_ARCH_TRIPLET_BUILD_FOR/pulseaudio",
                         ]
                     )
                     + "${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
                 },
                 {
                     "PKG_CONFIG_PATH": (
-                        "/snap/gnome-42-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET/pkgconfig:"
+                        "/snap/gnome-42-2204-sdk/current/usr/lib/"
+                        "$CRAFT_ARCH_TRIPLET_BUILD_FOR/pkgconfig:"
                         "/snap/gnome-42-2204-sdk/current/usr/lib/pkgconfig:"
                         "/snap/gnome-42-2204-sdk/current/usr/share/pkgconfig"
                         "${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
@@ -228,7 +235,7 @@ def assert_get_part_snippet(gnome_instance):
                 },
                 {
                     "GDK_PIXBUF_MODULE_FILE": (
-                        "/snap/gnome-42-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET"
+                        "/snap/gnome-42-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR"
                         "/gdk-pixbuf-current/loaders.cache"
                     )
                 },
@@ -243,12 +250,24 @@ def assert_get_part_snippet(gnome_instance):
                         [
                             "/snap/gnome-42-2204-sdk/current/usr/lib/python3.10",
                             "/snap/gnome-42-2204-sdk/current/usr/lib/python3/dist-packages",
-                            "/snap/gnome-42-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET"
+                            "/snap/gnome-42-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR"
                             "/gobject-introspection",
                         ]
                     )
                     + "${PYTHONPATH:+:$PYTHONPATH}"
                 },
+                {
+                    "GI_TYPELIB_PATH": ":".join(
+                        [
+                            "/snap/gnome-42-2204-sdk/current/usr/lib/girepository-1.0",
+                            (
+                                "/snap/gnome-42-2204-sdk/usr/lib/"
+                                "$CRAFT_ARCH_TRIPLET_BUILD_FOR/girepository-1.0"
+                            ),
+                        ]
+                    )
+                    + "${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
+                },
             ]
         }
 
@@ -266,18 +285,22 @@ def test_get_part_snippet_with_external_sdk(gnome_extension_with_build_snap):
             {
                 "LD_LIBRARY_PATH": ":".join(
                     [
-                        "/snap/gnome-44-2204-sdk/current/lib/$CRAFT_ARCH_TRIPLET",
-                        "/snap/gnome-44-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET",
+                        "/snap/gnome-44-2204-sdk/current/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR",
+                        "/snap/gnome-44-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR",
                         "/snap/gnome-44-2204-sdk/current/usr/lib",
                         "/snap/gnome-44-2204-sdk/current/usr/lib/vala-current",
-                        "/snap/gnome-44-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET/pulseaudio",
+                        (
+                            "/snap/gnome-44-2204-sdk/current/usr/lib/"
+                            "$CRAFT_ARCH_TRIPLET_BUILD_FOR/pulseaudio"
+                        ),
                     ]
                 )
                 + "${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
             },
             {
                 "PKG_CONFIG_PATH": (
-                    "/snap/gnome-44-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET/pkgconfig:"
+                    "/snap/gnome-44-2204-sdk/current/usr/lib/"
+                    "$CRAFT_ARCH_TRIPLET_BUILD_FOR/pkgconfig:"
                     "/snap/gnome-44-2204-sdk/current/usr/lib/pkgconfig:"
                     "/snap/gnome-44-2204-sdk/current/usr/share/pkgconfig"
                     "${PKG_CONFIG_PATH:+:$PKG_CONFIG_PATH}"
@@ -291,7 +314,7 @@ def test_get_part_snippet_with_external_sdk(gnome_extension_with_build_snap):
             },
             {
                 "GDK_PIXBUF_MODULE_FILE": (
-                    "/snap/gnome-44-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET"
+                    "/snap/gnome-44-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR"
                     "/gdk-pixbuf-current/loaders.cache"
                 )
             },
@@ -306,12 +329,24 @@ def test_get_part_snippet_with_external_sdk(gnome_extension_with_build_snap):
                     [
                         "/snap/gnome-44-2204-sdk/current/usr/lib/python3.10",
                         "/snap/gnome-44-2204-sdk/current/usr/lib/python3/dist-packages",
-                        "/snap/gnome-44-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET"
+                        "/snap/gnome-44-2204-sdk/current/usr/lib/$CRAFT_ARCH_TRIPLET_BUILD_FOR"
                         "/gobject-introspection",
                     ]
                 )
                 + "${PYTHONPATH:+:$PYTHONPATH}"
             },
+            {
+                "GI_TYPELIB_PATH": ":".join(
+                    [
+                        "/snap/gnome-44-2204-sdk/current/usr/lib/girepository-1.0",
+                        (
+                            "/snap/gnome-44-2204-sdk/usr/lib/"
+                            "$CRAFT_ARCH_TRIPLET_BUILD_FOR/girepository-1.0"
+                        ),
+                    ]
+                )
+                + "${GI_TYPELIB_PATH:+:$GI_TYPELIB_PATH}"
+            },
         ]
     }