diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml
index 90e7d7b559748..69bc09b6d3c28 100644
--- a/.github/workflows/publish.yml
+++ b/.github/workflows/publish.yml
@@ -153,16 +153,17 @@ jobs:
strategy:
matrix:
node-version: [22.x]
- os-version: ["macos-13"]
target: ["x86_64-apple-darwin", "aarch64-apple-darwin"]
python-version: ["3.9", "3.10", "3.11", "3.12", "fallback"]
include:
- target: x86_64-apple-darwin
+ os-version: macos-15-intel
package_target_arch: x64
package_target_platform: darwin
package_target_libc: unknown
tar_executable: gtar
- target: aarch64-apple-darwin
+ os-version: macos-14
package_target_arch: arm64
package_target_platform: darwin
package_target_libc: unknown
@@ -590,19 +591,23 @@ jobs:
- x86_64-unknown-linux-musl
- aarch64-unknown-linux-gnu
include:
- - target: x86_64-unknown-linux-gnu
- os: ubuntu-24.04
+ # Please use minimal possible version of ubuntu, because it produces constraint on glibc
+ - os: ubuntu-22.04
+ target: x86_64-unknown-linux-gnu
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024
executable_name: cubestored
strip: true
compress: false
- - target: x86_64-unknown-linux-musl
- os: ubuntu-24.04
+ - os: ubuntu-22.04
+ target: x86_64-unknown-linux-musl
+ image: cubejs/rust-cross:x86_64-unknown-linux-musl-15082024
executable_name: cubestored
strip: true
# cubestored: CantPackException: bad DT_HASH nbucket=0x344 len=0x1890
compress: false
- - target: aarch64-unknown-linux-gnu
- os: ubuntu-24.04
+ - os: ubuntu-24.04-arm
+ image: cubejs/rust-builder:bullseye-llvm-18
+ target: aarch64-unknown-linux-gnu
executable_name: cubestored
# Unable to recognise the format of the input file `rust/cubestore/target/aarch64-unknown-linux-gnu/release/cubestored'
strip: false
@@ -610,7 +615,7 @@ jobs:
compress: false
fail-fast: false
container:
- image: cubejs/rust-cross:${{ matrix.target }}-15082024
+ image: ${{ matrix.image }}
permissions:
contents: write
steps:
@@ -626,7 +631,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
workspaces: ./rust/cubestore -> target
- prefix-key: v0-rust-cubestore-cross
+ prefix-key: v1-rust-cubestore-cross
key: target-${{ matrix.target }}
- name: Build with Cargo
run: |
@@ -678,7 +683,7 @@ jobs:
tar_executable: tar
# Please use minimal possible version of macOS, because it produces constraint on libstdc++
- target: x86_64-apple-darwin
- os: macos-13
+ os: macos-15-intel
executable_name: cubestored
# upx has been disabled because it is crashing for macOS Ventura or above! It was disabled on 2024-09-05.
strip: false
diff --git a/.github/workflows/rust-cubesql.yml b/.github/workflows/rust-cubesql.yml
index 967de2813004a..1603c9756fe92 100644
--- a/.github/workflows/rust-cubesql.yml
+++ b/.github/workflows/rust-cubesql.yml
@@ -232,20 +232,25 @@ jobs:
matrix:
# We do not need to test under all versions, we do it under linux
node-version: [22.x]
- os-version: ["macos-14"]
target: ["x86_64-apple-darwin", "aarch64-apple-darwin"]
include:
- target: x86_64-apple-darwin
+ os-version: macos-15-intel
python-version: "3.9"
- target: x86_64-apple-darwin
+ os-version: macos-15-intel
python-version: "3.10"
- target: x86_64-apple-darwin
+ os-version: macos-15-intel
python-version: "3.11"
- target: x86_64-apple-darwin
+ os-version: macos-15-intel
python-version: "3.12"
- target: x86_64-apple-darwin
+ os-version: macos-15-intel
python-version: "fallback"
- target: aarch64-apple-darwin
+ os-version: macos-14
python-version: "fallback"
fail-fast: false
diff --git a/.github/workflows/rust-cubestore-master.yml b/.github/workflows/rust-cubestore-master.yml
index db2c66df847bd..325251283cf84 100644
--- a/.github/workflows/rust-cubestore-master.yml
+++ b/.github/workflows/rust-cubestore-master.yml
@@ -180,7 +180,7 @@ jobs:
# cubestored.exe: CantPackException: superfluous data between sections
compress: false
# Please use minimal possible version of macOS, because it produces constraint on libstdc++
- - os: macos-13
+ - os: macos-15-intel
target: x86_64-apple-darwin
executable_name: cubestored
# upx has been disabled because it is crashing for macOS Ventura or above! It was disabled on 2024-09-05.
@@ -264,16 +264,19 @@ jobs:
# Please use minimal possible version of ubuntu, because it produces constraint on glibc
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024
executable_name: cubestored
strip: true
compress: false
- os: ubuntu-22.04
target: x86_64-unknown-linux-musl
+ image: cubejs/rust-cross:x86_64-unknown-linux-musl-15082024
executable_name: cubestored
strip: true
# cubestored: CantPackException: bad DT_HASH nbucket=0x344 len=0x1890
compress: false
- - os: ubuntu-22.04
+ - os: ubuntu-24.04-arm
+ image: cubejs/rust-builder:bullseye-llvm-18
target: aarch64-unknown-linux-gnu
executable_name: cubestored
# Unable to recognise the format of the input file `rust/cubestore/target/aarch64-unknown-linux-gnu/release/cubestored'
@@ -282,7 +285,7 @@ jobs:
compress: false
fail-fast: false
container:
- image: cubejs/rust-cross:${{ matrix.target }}-15082024
+ image: ${{ matrix.image }}
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
@@ -296,7 +299,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
workspaces: ./rust/cubestore -> target
- prefix-key: v0-rust-cubestore-cross
+ prefix-key: v1-rust-cubestore-cross
key: target-${{ matrix.target }}
- name: Build with Cargo
run: |
diff --git a/.github/workflows/rust-cubestore.yml b/.github/workflows/rust-cubestore.yml
index 4468563362fa5..509e6b92a4ebe 100644
--- a/.github/workflows/rust-cubestore.yml
+++ b/.github/workflows/rust-cubestore.yml
@@ -119,7 +119,7 @@ jobs:
# cubestored.exe: CantPackException: superfluous data between sections
compress: false
# Please use minimal possible version of macOS, because it produces constraint on libstdc++
- - os: macos-13
+ - os: macos-15-intel
target: x86_64-apple-darwin
executable_name: cubestored
# upx has been disabled because it is crashing for macOS Ventura or above! It was disabled on 2024-09-05.
@@ -203,16 +203,19 @@ jobs:
# Please use minimal possible version of ubuntu, because it produces constraint on glibc
- os: ubuntu-22.04
target: x86_64-unknown-linux-gnu
+ image: cubejs/rust-cross:x86_64-unknown-linux-gnu-15082024
executable_name: cubestored
strip: true
compress: false
- os: ubuntu-22.04
target: x86_64-unknown-linux-musl
+ image: cubejs/rust-cross:x86_64-unknown-linux-musl-15082024
executable_name: cubestored
strip: true
# cubestored: CantPackException: bad DT_HASH nbucket=0x344 len=0x1890
compress: false
- - os: ubuntu-22.04
+ - os: ubuntu-24.04-arm
+ image: cubejs/rust-builder:bullseye-llvm-18
target: aarch64-unknown-linux-gnu
executable_name: cubestored
# Unable to recognise the format of the input file `rust/cubestore/target/aarch64-unknown-linux-gnu/release/cubestored'
@@ -221,7 +224,7 @@ jobs:
compress: false
fail-fast: false
container:
- image: cubejs/rust-cross:${{ matrix.target }}-15082024
+ image: ${{ matrix.image }}
steps:
- uses: actions/checkout@v4
- name: Setup Rust toolchain
@@ -235,7 +238,7 @@ jobs:
- uses: Swatinem/rust-cache@v2
with:
workspaces: ./rust/cubestore -> target
- prefix-key: v0-rust-cubestore-cross
+ prefix-key: v1-rust-cubestore-cross
key: target-${{ matrix.target }}
- name: Build with Cargo
run: |
diff --git a/docs/pages/product/data-modeling/reference/dimensions.mdx b/docs/pages/product/data-modeling/reference/dimensions.mdx
index e4d088b76dfe3..7a0852e966e5b 100644
--- a/docs/pages/product/data-modeling/reference/dimensions.mdx
+++ b/docs/pages/product/data-modeling/reference/dimensions.mdx
@@ -330,6 +330,58 @@ cubes:
+### `order`
+
+The `order` parameter specifies the default sort order for a dimension. Valid
+values are `asc` (ascending) and `desc` (descending). This parameter is optional.
+
+When set, the dimension's default sort order is exposed via
+[APIs and integrations][ref-apis]. Consuming applications, such as BI tools
+and custom frontends, can use this metadata to apply consistent default sorting
+when displaying dimension values, ensuring a uniform user experience across
+different tools connected to the semantic layer.
+
+
+
+```javascript
+cube(`orders`, {
+ // ...
+
+ dimensions: {
+ status: {
+ sql: `status`,
+ type: `string`,
+ order: `asc`
+ },
+
+ created_at: {
+ sql: `created_at`,
+ type: `time`,
+ order: `desc`
+ }
+ }
+})
+```
+
+```yaml
+cubes:
+ - name: orders
+ # ...
+
+ dimensions:
+ - name: status
+ sql: status
+ type: string
+ order: asc
+
+ - name: created_at
+ sql: created_at
+ type: time
+ order: desc
+```
+
+
+
### `primary_key`
Specify if a dimension is a primary key for a cube. The default value is
diff --git a/packages/cubejs-api-gateway/openspec.yml b/packages/cubejs-api-gateway/openspec.yml
index 030b1a516dbac..136f15dfb731f 100644
--- a/packages/cubejs-api-gateway/openspec.yml
+++ b/packages/cubejs-api-gateway/openspec.yml
@@ -145,6 +145,13 @@ components:
type: "object"
format:
$ref: "#/components/schemas/V1CubeMetaFormat"
+ order:
+ $ref: "#/components/schemas/V1CubeMetaDimensionOrder"
+ V1CubeMetaDimensionOrder:
+ type: "string"
+ enum:
+ - "asc"
+ - "desc"
V1CubeMetaMeasure:
type: "object"
required:
diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts b/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts
index 24c298f91947a..92d63aab79412 100644
--- a/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts
+++ b/packages/cubejs-schema-compiler/src/compiler/CubeEvaluator.ts
@@ -36,6 +36,7 @@ export type DimensionDefinition = {
fieldType?: string;
multiStage?: boolean;
shiftInterval?: string;
+ order?: 'asc' | 'desc';
};
export type TimeShiftDefinition = {
diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeSymbols.ts b/packages/cubejs-schema-compiler/src/compiler/CubeSymbols.ts
index fc13bad01feda..eb8d2e945d518 100644
--- a/packages/cubejs-schema-compiler/src/compiler/CubeSymbols.ts
+++ b/packages/cubejs-schema-compiler/src/compiler/CubeSymbols.ts
@@ -35,6 +35,7 @@ export type CubeSymbolDefinition = {
granularities?: Record;
timeShift?: TimeshiftDefinition[];
format?: string;
+ order?: 'asc' | 'desc';
};
export type HierarchyDefinition = {
diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.ts b/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.ts
index b1a892c5207d7..18edc54609e37 100644
--- a/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.ts
+++ b/packages/cubejs-schema-compiler/src/compiler/CubeToMetaTransformer.ts
@@ -97,6 +97,7 @@ export type DimensionConfig = {
primaryKey: boolean;
aliasMember?: string;
granularities?: GranularityDefinition[];
+ order?: 'asc' | 'desc';
};
export type SegmentConfig = {
@@ -274,6 +275,7 @@ export class CubeToMetaTransformer implements CompilerInterface {
origin: gDef.origin,
}))
: undefined,
+ order: extendedDimDef.order,
};
}),
segments: Object.entries(extendedCube.segments || {}).map((nameToSegment: [string, any]) => {
diff --git a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts
index e73e791701453..d3a3186422b61 100644
--- a/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts
+++ b/packages/cubejs-schema-compiler/src/compiler/CubeValidator.ts
@@ -278,6 +278,7 @@ const BaseDimensionWithoutSubQuery = {
otherwise: formatSchema
}),
meta: Joi.any(),
+ order: Joi.string().valid('asc', 'desc'),
values: Joi.when('type', {
is: 'switch',
then: Joi.array().items(Joi.string()),
diff --git a/packages/cubejs-schema-compiler/test/unit/__snapshots__/views.test.ts.snap b/packages/cubejs-schema-compiler/test/unit/__snapshots__/views.test.ts.snap
index 78f1e4155503a..381b44f36a20a 100644
--- a/packages/cubejs-schema-compiler/test/unit/__snapshots__/views.test.ts.snap
+++ b/packages/cubejs-schema-compiler/test/unit/__snapshots__/views.test.ts.snap
@@ -15,6 +15,7 @@ Object {
"key": "Meta.key for CubeA.id",
},
"name": "simple_view.id",
+ "order": undefined,
"primaryKey": false,
"public": true,
"shortTitle": "Title for CubeA.id",
@@ -32,6 +33,7 @@ Object {
"key": "Meta.key for CubeB.other_id",
},
"name": "simple_view.other_id",
+ "order": undefined,
"primaryKey": false,
"public": true,
"shortTitle": "Title for CubeB.other_id",
@@ -114,6 +116,7 @@ Object {
"key": "Meta.key for CubeB.other_id",
},
"name": "simple_view.CubeB_other_id",
+ "order": undefined,
"primaryKey": false,
"public": true,
"shortTitle": "Title for CubeB.other_id",
@@ -196,6 +199,7 @@ Object {
"key": "Meta.key for CubeA.id",
},
"name": "simple_view.CubeA_id",
+ "order": undefined,
"primaryKey": false,
"public": true,
"shortTitle": "Title for CubeA.id",
@@ -213,6 +217,7 @@ Object {
"key": "Meta.key for CubeB.id",
},
"name": "simple_view.CubeB_id",
+ "order": undefined,
"primaryKey": false,
"public": true,
"shortTitle": "Title for CubeB.id",
@@ -230,6 +235,7 @@ Object {
"key": "Meta.key for CubeB.other_id",
},
"name": "simple_view.CubeB_other_id",
+ "order": undefined,
"primaryKey": false,
"public": true,
"shortTitle": "Title for CubeB.other_id",
@@ -312,6 +318,7 @@ Object {
"key": "Meta.key for CubeB.other_id",
},
"name": "simple_view.CubeB_other_id",
+ "order": undefined,
"primaryKey": false,
"public": true,
"shortTitle": "Title for CubeB.other_id",
diff --git a/packages/cubejs-schema-compiler/test/unit/cube-validator.test.ts b/packages/cubejs-schema-compiler/test/unit/cube-validator.test.ts
index b80550da958d4..f403444b4c4cc 100644
--- a/packages/cubejs-schema-compiler/test/unit/cube-validator.test.ts
+++ b/packages/cubejs-schema-compiler/test/unit/cube-validator.test.ts
@@ -1675,5 +1675,68 @@ describe('Cube Validation', () => {
const validationResult = cubeValidator.validate(cube, new ConsoleErrorReporter());
expect(validationResult.error).toBeTruthy();
});
+
+ it('dimension with valid order asc - correct', async () => {
+ const cubeValidator = new CubeValidator(new CubeSymbols());
+ const cube = {
+ name: 'name',
+ sql: () => 'SELECT * FROM public.Orders',
+ dimensions: {
+ status: {
+ sql: () => 'status',
+ type: 'string',
+ order: 'asc'
+ },
+ },
+ fileName: 'fileName',
+ };
+
+ const validationResult = cubeValidator.validate(cube, new ConsoleErrorReporter());
+ expect(validationResult.error).toBeFalsy();
+ });
+
+ it('dimension with valid order desc - correct', async () => {
+ const cubeValidator = new CubeValidator(new CubeSymbols());
+ const cube = {
+ name: 'name',
+ sql: () => 'SELECT * FROM public.Orders',
+ dimensions: {
+ createdAt: {
+ sql: () => 'created_at',
+ type: 'time',
+ order: 'desc'
+ },
+ },
+ fileName: 'fileName',
+ };
+
+ const validationResult = cubeValidator.validate(cube, new ConsoleErrorReporter());
+ expect(validationResult.error).toBeFalsy();
+ });
+
+ it('dimension with invalid order value - error', async () => {
+ const cubeValidator = new CubeValidator(new CubeSymbols());
+ const cube = {
+ name: 'name',
+ sql: () => 'SELECT * FROM public.Orders',
+ dimensions: {
+ status: {
+ sql: () => 'status',
+ type: 'string',
+ order: 'invalid' // should only accept 'asc' or 'desc'
+ },
+ },
+ fileName: 'fileName',
+ };
+
+ const validationResult = cubeValidator.validate(cube, {
+ error: (message: any, _e: any) => {
+ console.log(message);
+ expect(message).toContain('order');
+ }
+ } as any);
+
+ expect(validationResult.error).toBeTruthy();
+ });
});
});
diff --git a/rust/cubesql/cubeclient/src/models/mod.rs b/rust/cubesql/cubeclient/src/models/mod.rs
index e900b80e3732e..2846dfb7a95d3 100644
--- a/rust/cubesql/cubeclient/src/models/mod.rs
+++ b/rust/cubesql/cubeclient/src/models/mod.rs
@@ -11,7 +11,9 @@ pub use self::v1_cube_meta_custom_time_format::Type as V1CubeMetaCustomTimeForma
pub mod v1_cube_meta_dimension;
pub use self::v1_cube_meta_dimension::V1CubeMetaDimension;
pub mod v1_cube_meta_dimension_granularity;
+pub mod v1_cube_meta_dimension_order;
pub use self::v1_cube_meta_dimension_granularity::V1CubeMetaDimensionGranularity;
+pub use self::v1_cube_meta_dimension_order::V1CubeMetaDimensionOrder;
pub mod v1_cube_meta_folder;
pub use self::v1_cube_meta_folder::V1CubeMetaFolder;
pub mod v1_cube_meta_format;
diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs
index d5ffda4204fc3..4fde577c8f8c5 100644
--- a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs
+++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension.rs
@@ -32,6 +32,8 @@ pub struct V1CubeMetaDimension {
pub meta: Option,
#[serde(rename = "format", skip_serializing_if = "Option::is_none")]
pub format: Option>,
+ #[serde(rename = "order", skip_serializing_if = "Option::is_none")]
+ pub order: Option,
}
impl V1CubeMetaDimension {
@@ -46,6 +48,7 @@ impl V1CubeMetaDimension {
granularities: None,
meta: None,
format: None,
+ order: None,
}
}
}
diff --git a/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_order.rs b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_order.rs
new file mode 100644
index 0000000000000..5cb5e3cd815ed
--- /dev/null
+++ b/rust/cubesql/cubeclient/src/models/v1_cube_meta_dimension_order.rs
@@ -0,0 +1,26 @@
+/*
+ * Cube.js
+ *
+ * Cube.js Swagger Schema
+ *
+ * The version of the OpenAPI document: 1.0.0
+ *
+ * Generated by: https://openapi-generator.tech
+ */
+
+use serde::{Deserialize, Serialize};
+
+/// Default sort order for a dimension
+#[derive(Clone, Copy, Debug, Eq, PartialEq, Ord, PartialOrd, Hash, Serialize, Deserialize)]
+pub enum V1CubeMetaDimensionOrder {
+ #[serde(rename = "asc")]
+ Asc,
+ #[serde(rename = "desc")]
+ Desc,
+}
+
+impl Default for V1CubeMetaDimensionOrder {
+ fn default() -> V1CubeMetaDimensionOrder {
+ Self::Asc
+ }
+}
diff --git a/rust/cubesql/cubesql/src/transport/mod.rs b/rust/cubesql/cubesql/src/transport/mod.rs
index ceb417aea00a0..8ed401947603e 100644
--- a/rust/cubesql/cubesql/src/transport/mod.rs
+++ b/rust/cubesql/cubesql/src/transport/mod.rs
@@ -21,6 +21,7 @@ pub type CubeMetaCustomTimeFormat = cubeclient::models::V1CubeMetaCustomTimeForm
pub type CubeMetaCustomTimeFormatType = cubeclient::models::V1CubeMetaCustomTimeFormatType;
pub type CubeMetaLinkFormat = cubeclient::models::V1CubeMetaLinkFormat;
pub type CubeMetaLinkFormatType = cubeclient::models::V1CubeMetaLinkFormatType;
+pub type CubeMetaDimensionOrder = cubeclient::models::V1CubeMetaDimensionOrder;
pub type CubeMetaFormat = cubeclient::models::V1CubeMetaFormat;
// Request/Response
diff --git a/rust/cubestore/Cargo.lock b/rust/cubestore/Cargo.lock
index 2bee7bd4b5925..07899c065d873 100644
--- a/rust/cubestore/Cargo.lock
+++ b/rust/cubestore/Cargo.lock
@@ -3305,9 +3305,9 @@ checksum = "28988d872ab76095a6e6ac88d99b54fd267702734fd7ffe610ca27f533ddb95a"
[[package]]
name = "openssl-sys"
-version = "0.9.103"
+version = "0.9.111"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7f9e8deee91df40a943c71b917e5874b951d32a802526c85721ce3b776c929d6"
+checksum = "82cab2d520aa75e3c58898289429321eb788c3106963d0dc886ec7a5f4adc321"
dependencies = [
"cc",
"libc",
diff --git a/rust/cubestore/builder.Dockerfile b/rust/cubestore/builder.Dockerfile
index 91b99d7a55e9a..0c2c10c956885 100644
--- a/rust/cubestore/builder.Dockerfile
+++ b/rust/cubestore/builder.Dockerfile
@@ -1,7 +1,9 @@
-ARG OS_NAME=bookworm-slim
+ARG RUST_TAG=bookworm-slim
+ARG OS_NAME=bookworm
-FROM rust:$OS_NAME
+FROM rust:$RUST_TAG
+ARG OS_NAME=bookworm
ARG LLVM_VERSION=18
RUN rustup update && \
@@ -13,9 +15,8 @@ RUN apt update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y software-properties-common libssl-dev pkg-config wget gnupg git apt-transport-https ca-certificates \
&& wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add - \
# https://github.com/llvm/llvm-project/issues/62475 \
- # add it twice to workaround:
- && add-apt-repository --yes "deb https://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-$LLVM_VERSION main" \
- && add-apt-repository --yes "deb https://apt.llvm.org/bookworm/ llvm-toolchain-bookworm-$LLVM_VERSION main" \
+ && add-apt-repository --yes "deb https://apt.llvm.org/$OS_NAME/ llvm-toolchain-$OS_NAME-$LLVM_VERSION main" \
+ && add-apt-repository --yes "deb https://apt.llvm.org/$OS_NAME/ llvm-toolchain-$OS_NAME-$LLVM_VERSION main" \
&& apt update \
&& apt install -y git llvm-$LLVM_VERSION clang-$LLVM_VERSION libclang-$LLVM_VERSION-dev clang-$LLVM_VERSION lld-$LLVM_VERSION cmake \
&& rm -rf /var/lib/apt/lists/*;
diff --git a/rust/cubestore/docker-bake.hcl b/rust/cubestore/docker-bake.hcl
index 8f390a2b89a4e..87076611bf1fe 100644
--- a/rust/cubestore/docker-bake.hcl
+++ b/rust/cubestore/docker-bake.hcl
@@ -1,10 +1,25 @@
+# EOL LTS 2028-06-30
target "rust-builder-bookworm" {
context = "."
dockerfile = "builder.Dockerfile"
args = {
- OS_NAME = "1-slim-bookworm"
+ RUST_TAG = "1-slim-bookworm"
+ OS_NAME = "bookworm"
LLVM_VERSION = "18"
}
tags = ["cubejs/rust-builder:bookworm-llvm-18"]
platforms = ["linux/amd64", "linux/arm64"]
}
+
+# EOL LTS 2026-08-31
+target "rust-builder-bullseye" {
+ context = "."
+ dockerfile = "builder.Dockerfile"
+ args = {
+ RUST_TAG = "1-slim-bullseye"
+ OS_NAME = "bullseye"
+ LLVM_VERSION = "18"
+ }
+ tags = ["cubejs/rust-builder:bullseye-llvm-18"]
+ platforms = ["linux/amd64", "linux/arm64"]
+}