From 75663379bf3cbf794af2fcf3823045f07851754c Mon Sep 17 00:00:00 2001 From: Shiyan Xu <2701446+xushiyan@users.noreply.github.com> Date: Mon, 29 Jul 2024 23:55:56 -0500 Subject: [PATCH 1/5] build: use exact versions for arrow and datafusion (#105) --- Cargo.toml | 34 +++++++++++++++++----------------- 1 file changed, 17 insertions(+), 17 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 75f5dadf..33857c0b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -35,25 +35,25 @@ repository = "https://github.com/apache/hudi-rs" [workspace.dependencies] # arrow -arrow = { version = "52.0.0", features = ["pyarrow"] } -arrow-arith = { version = "52.0.0" } -arrow-array = { version = "52.0.0" } -arrow-buffer = { version = "52.0.0" } -arrow-cast = { version = "52.0.0" } -arrow-ipc = { version = "52.0.0" } -arrow-json = { version = "52.0.0" } -arrow-ord = { version = "52.0.0" } -arrow-row = { version = "52.0.0" } -arrow-schema = { version = "52.0.0", features = ["serde"] } -arrow-select = { version = "52.0.0" } -object_store = { version = "0.10.1", features = ["aws", "azure", "gcp"] } -parquet = { version = "52.0.0", features = ["async", "object_store"] } +arrow = { version = "= 52.0.0", features = ["pyarrow"] } +arrow-arith = { version = "= 52.0.0" } +arrow-array = { version = "= 52.0.0" } +arrow-buffer = { version = "= 52.0.0" } +arrow-cast = { version = "= 52.0.0" } +arrow-ipc = { version = "= 52.0.0" } +arrow-json = { version = "= 52.0.0" } +arrow-ord = { version = "= 52.0.0" } +arrow-row = { version = "= 52.0.0" } +arrow-schema = { version = "= 52.0.0", features = ["serde"] } +arrow-select = { version = "= 52.0.0" } +object_store = { version = "= 0.10.1", features = ["aws", "azure", "gcp"] } +parquet = { version = "= 52.0.0", features = ["async", "object_store"] } # datafusion -datafusion = { version = "39.0.0" } -datafusion-expr = { version = "39.0.0" } -datafusion-common = { version = "39.0.0" } -datafusion-physical-expr = { version = "39.0.0" } +datafusion = { version = "= 39.0.0" } +datafusion-expr = { version = "= 39.0.0" } +datafusion-common = { version = "= 39.0.0" } +datafusion-physical-expr = { version = "= 39.0.0" } # serde serde = { version = "1.0.203", features = ["derive"] } From f75f12d8c436ef64daca1b23147007f578de1bb2 Mon Sep 17 00:00:00 2001 From: muyihao <37872457+muyihao@users.noreply.github.com> Date: Wed, 7 Aug 2024 09:50:31 +0800 Subject: [PATCH 2/5] style: enforce Python code style (#101) - Add ruff and mypy configurations to pyproject.toml - Integrate Python code check in GitHub Actions - Format code with Ruff and Ruff Format --------- Co-authored-by: yanghao14 Co-authored-by: Shiyan Xu <2701446+xushiyan@users.noreply.github.com> --- .github/workflows/compliance.yml | 19 ++++- python/Makefile | 9 +++ python/hudi/__init__.py | 2 +- python/hudi/_internal.pyi | 21 ++--- python/pyproject.toml | 18 +++++ python/tests/test_table_read.py | 130 +++++++++++++++++++++++-------- 6 files changed, 149 insertions(+), 50 deletions(-) diff --git a/.github/workflows/compliance.yml b/.github/workflows/compliance.yml index 6f0e4dbe..dcc49737 100644 --- a/.github/workflows/compliance.yml +++ b/.github/workflows/compliance.yml @@ -47,5 +47,22 @@ jobs: - uses: actions/checkout@v4 - name: Check license header uses: apache/skywalking-eyes/header@v0.6.0 - - name: Check code style + - name: Check rust code style run: cd python && make check-rust + - name: Set up Python ${{ matrix.python-version }} + uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python-version }} + cache: pip + cache-dependency-path: pyproject.toml + - name: Install python linter dependencies + working-directory: ./python + run: | + make setup-env + source venv/bin/activate + pip install ruff mypy + - name: Run python linter + working-directory: ./python + run: | + source venv/bin/activate + make check-python diff --git a/python/Makefile b/python/Makefile index 4badaca8..a60205dd 100644 --- a/python/Makefile +++ b/python/Makefile @@ -48,6 +48,15 @@ check-rust: ## Run check on Rust $(info --- Check Rust format ---) cargo fmt --all -- --check +.PHONY: check-python +check-python: ## Run check on Python + $(info --- Check Python format ---) + ruff format --check --diff . + $(info --- Check Python linting ---) + ruff check . + $(info --- Check Python typing ---) + mypy . + .PHONY: test-rust test-rust: ## Run tests on Rust $(info --- Run Rust tests ---) diff --git a/python/hudi/__init__.py b/python/hudi/__init__.py index 09a93399..b0a792e5 100644 --- a/python/hudi/__init__.py +++ b/python/hudi/__init__.py @@ -15,6 +15,6 @@ # specific language governing permissions and limitations # under the License. -from ._internal import __version__ as __version__ from ._internal import HudiFileSlice as HudiFileSlice from ._internal import HudiTable as HudiTable +from ._internal import __version__ as __version__ diff --git a/python/hudi/_internal.pyi b/python/hudi/_internal.pyi index fd97cc31..0f83aeec 100644 --- a/python/hudi/_internal.pyi +++ b/python/hudi/_internal.pyi @@ -15,13 +15,12 @@ # specific language governing permissions and limitations # under the License. from dataclasses import dataclass -from typing import Optional, Dict, List +from typing import Dict, List, Optional -import pyarrow +import pyarrow # type: ignore __version__: str - @dataclass(init=False) class HudiFileSlice: file_group_id: str @@ -33,24 +32,16 @@ class HudiFileSlice: def base_file_relative_path(self) -> str: ... - @dataclass(init=False) class HudiTable: - def __init__( - self, - table_uri: str, - options: Optional[Dict[str, str]] = None, + self, + table_uri: str, + options: Optional[Dict[str, str]] = None, ): ... - def get_schema(self) -> "pyarrow.Schema": ... - def split_file_slices(self, n: int) -> List[List[HudiFileSlice]]: ... - def get_file_slices(self) -> List[HudiFileSlice]: ... - - def read_file_slice(self, base_file_relative_path) -> pyarrow.RecordBatch: ... - + def read_file_slice(self, base_file_relative_path: str) -> pyarrow.RecordBatch: ... def read_snapshot(self) -> List["pyarrow.RecordBatch"]: ... - def read_snapshot_as_of(self, timestamp: str) -> List["pyarrow.RecordBatch"]: ... diff --git a/python/pyproject.toml b/python/pyproject.toml index 36f350eb..367cf465 100644 --- a/python/pyproject.toml +++ b/python/pyproject.toml @@ -42,6 +42,8 @@ dependencies = [ optional-dependencies = { devel = [ "pytest", "coverage", + "ruff==0.5.2", + "mypy==1.10.1", ] } dynamic = ["version"] @@ -49,9 +51,25 @@ dynamic = ["version"] [tool.maturin] module-name = "hudi._internal" +[tool.ruff] +target-version = 'py38' +# Enable Pyflakes (`F`) and a subset of the pycodestyle (`E`) codes by default. +lint.select = [ + "E4", + "E7", + "E9", + "F", + # isort + "I", +] +# don't ignore any rule unless it becomes imperative +lint.ignore = [] +lint.isort.known-first-party = ["hudi"] + [tool.mypy] files = "hudi/*.py" exclude = "^tests" +strict = true [tool.pytest.ini_options] testpaths = [ diff --git a/python/tests/test_table_read.py b/python/tests/test_table_read.py index e56463c5..c3c84c9e 100644 --- a/python/tests/test_table_read.py +++ b/python/tests/test_table_read.py @@ -20,28 +20,49 @@ from hudi import HudiTable -PYARROW_LE_8_0_0 = tuple(int(s) for s in pa.__version__.split(".") if s.isnumeric()) < (8, 0, 0) -pytestmark = pytest.mark.skipif(PYARROW_LE_8_0_0, reason="hudi only supported if pyarrow >= 8.0.0") +PYARROW_LE_8_0_0 = tuple(int(s) for s in pa.__version__.split(".") if s.isnumeric()) < ( + 8, + 0, + 0, +) +pytestmark = pytest.mark.skipif( + PYARROW_LE_8_0_0, reason="hudi only supported if pyarrow >= 8.0.0" +) def test_sample_table(get_sample_table): table_path = get_sample_table table = HudiTable(table_path) - assert table.get_schema().names == ['_hoodie_commit_time', '_hoodie_commit_seqno', '_hoodie_record_key', - '_hoodie_partition_path', '_hoodie_file_name', 'ts', 'uuid', 'rider', 'driver', - 'fare', 'city'] + assert table.get_schema().names == [ + "_hoodie_commit_time", + "_hoodie_commit_seqno", + "_hoodie_record_key", + "_hoodie_partition_path", + "_hoodie_file_name", + "ts", + "uuid", + "rider", + "driver", + "fare", + "city", + ] file_slices = table.get_file_slices() assert len(file_slices) == 5 - assert set(f.commit_time for f in file_slices) == {'20240402123035233', '20240402144910683'} + assert set(f.commit_time for f in file_slices) == { + "20240402123035233", + "20240402144910683", + } assert all(f.num_records == 1 for f in file_slices) file_slice_paths = [f.base_file_relative_path() for f in file_slices] - assert set(file_slice_paths) == {'chennai/68d3c349-f621-4cd8-9e8b-c6dd8eb20d08-0_4-12-0_20240402123035233.parquet', - 'san_francisco/d9082ffd-2eb1-4394-aefc-deb4a61ecc57-0_1-9-0_20240402123035233.parquet', - 'san_francisco/780b8586-3ad0-48ef-a6a1-d2217845ce4a-0_0-8-0_20240402123035233.parquet', - 'san_francisco/5a226868-2934-4f84-a16f-55124630c68d-0_0-7-24_20240402144910683.parquet', - 'sao_paulo/ee915c68-d7f8-44f6-9759-e691add290d8-0_3-11-0_20240402123035233.parquet'} + assert set(file_slice_paths) == { + "chennai/68d3c349-f621-4cd8-9e8b-c6dd8eb20d08-0_4-12-0_20240402123035233.parquet", + "san_francisco/d9082ffd-2eb1-4394-aefc-deb4a61ecc57-0_1-9-0_20240402123035233.parquet", + "san_francisco/780b8586-3ad0-48ef-a6a1-d2217845ce4a-0_0-8-0_20240402123035233.parquet", + "san_francisco/5a226868-2934-4f84-a16f-55124630c68d-0_0-7-24_20240402144910683.parquet", + "sao_paulo/ee915c68-d7f8-44f6-9759-e691add290d8-0_3-11-0_20240402123035233.parquet", + } batch = table.read_file_slice(file_slice_paths[0]) t = pa.Table.from_batches([batch]) @@ -54,28 +75,71 @@ def test_sample_table(get_sample_table): batches = table.read_snapshot() t = pa.Table.from_batches(batches).select([0, 5, 6, 9]).sort_by("ts") - assert t.to_pylist() == [{'_hoodie_commit_time': '20240402144910683', 'ts': 1695046462179, - 'uuid': '9909a8b1-2d15-4d3d-8ec9-efc48c536a00', 'fare': 339.0}, - {'_hoodie_commit_time': '20240402123035233', 'ts': 1695091554788, - 'uuid': 'e96c4396-3fad-413a-a942-4cb36106d721', 'fare': 27.7}, - {'_hoodie_commit_time': '20240402123035233', 'ts': 1695115999911, - 'uuid': 'c8abbe79-8d89-47ea-b4ce-4d224bae5bfa', 'fare': 17.85}, - {'_hoodie_commit_time': '20240402123035233', 'ts': 1695159649087, - 'uuid': '334e26e9-8355-45cc-97c6-c31daf0df330', 'fare': 19.1}, - {'_hoodie_commit_time': '20240402123035233', 'ts': 1695516137016, - 'uuid': 'e3cf430c-889d-4015-bc98-59bdce1e530c', 'fare': 34.15}] + assert t.to_pylist() == [ + { + "_hoodie_commit_time": "20240402144910683", + "ts": 1695046462179, + "uuid": "9909a8b1-2d15-4d3d-8ec9-efc48c536a00", + "fare": 339.0, + }, + { + "_hoodie_commit_time": "20240402123035233", + "ts": 1695091554788, + "uuid": "e96c4396-3fad-413a-a942-4cb36106d721", + "fare": 27.7, + }, + { + "_hoodie_commit_time": "20240402123035233", + "ts": 1695115999911, + "uuid": "c8abbe79-8d89-47ea-b4ce-4d224bae5bfa", + "fare": 17.85, + }, + { + "_hoodie_commit_time": "20240402123035233", + "ts": 1695159649087, + "uuid": "334e26e9-8355-45cc-97c6-c31daf0df330", + "fare": 19.1, + }, + { + "_hoodie_commit_time": "20240402123035233", + "ts": 1695516137016, + "uuid": "e3cf430c-889d-4015-bc98-59bdce1e530c", + "fare": 34.15, + }, + ] - table = HudiTable(table_path, { - "hoodie.read.as.of.timestamp": "20240402123035233"}) + table = HudiTable(table_path, {"hoodie.read.as.of.timestamp": "20240402123035233"}) batches = table.read_snapshot() t = pa.Table.from_batches(batches).select([0, 5, 6, 9]).sort_by("ts") - assert t.to_pylist() == [{'_hoodie_commit_time': '20240402123035233', 'ts': 1695046462179, - 'uuid': '9909a8b1-2d15-4d3d-8ec9-efc48c536a00', 'fare': 33.9}, - {'_hoodie_commit_time': '20240402123035233', 'ts': 1695091554788, - 'uuid': 'e96c4396-3fad-413a-a942-4cb36106d721', 'fare': 27.7}, - {'_hoodie_commit_time': '20240402123035233', 'ts': 1695115999911, - 'uuid': 'c8abbe79-8d89-47ea-b4ce-4d224bae5bfa', 'fare': 17.85}, - {'_hoodie_commit_time': '20240402123035233', 'ts': 1695159649087, - 'uuid': '334e26e9-8355-45cc-97c6-c31daf0df330', 'fare': 19.1}, - {'_hoodie_commit_time': '20240402123035233', 'ts': 1695516137016, - 'uuid': 'e3cf430c-889d-4015-bc98-59bdce1e530c', 'fare': 34.15}] + assert t.to_pylist() == [ + { + "_hoodie_commit_time": "20240402123035233", + "ts": 1695046462179, + "uuid": "9909a8b1-2d15-4d3d-8ec9-efc48c536a00", + "fare": 33.9, + }, + { + "_hoodie_commit_time": "20240402123035233", + "ts": 1695091554788, + "uuid": "e96c4396-3fad-413a-a942-4cb36106d721", + "fare": 27.7, + }, + { + "_hoodie_commit_time": "20240402123035233", + "ts": 1695115999911, + "uuid": "c8abbe79-8d89-47ea-b4ce-4d224bae5bfa", + "fare": 17.85, + }, + { + "_hoodie_commit_time": "20240402123035233", + "ts": 1695159649087, + "uuid": "334e26e9-8355-45cc-97c6-c31daf0df330", + "fare": 19.1, + }, + { + "_hoodie_commit_time": "20240402123035233", + "ts": 1695516137016, + "uuid": "e3cf430c-889d-4015-bc98-59bdce1e530c", + "fare": 34.15, + }, + ] From b3ffa32fb662b38366ca2fa2b219dbddce31eb42 Mon Sep 17 00:00:00 2001 From: Shiyan Xu <2701446+xushiyan@users.noreply.github.com> Date: Sat, 10 Aug 2024 20:00:28 -0500 Subject: [PATCH 3/5] chore: improve workflows for code checking and PR (#110) --- .../workflows/{compliance.yml => code.yml} | 43 +++++++---------- .github/workflows/pr.yml | 48 +++++++++++++++++++ 2 files changed, 65 insertions(+), 26 deletions(-) rename .github/workflows/{compliance.yml => code.yml} (65%) create mode 100644 .github/workflows/pr.yml diff --git a/.github/workflows/compliance.yml b/.github/workflows/code.yml similarity index 65% rename from .github/workflows/compliance.yml rename to .github/workflows/code.yml index dcc49737..d0eabffc 100644 --- a/.github/workflows/compliance.yml +++ b/.github/workflows/code.yml @@ -15,53 +15,44 @@ # specific language governing permissions and limitations # under the License. -name: Compliance +name: Code on: - pull_request_target: - types: [ opened, edited, reopened, synchronize ] + push: + branches: + - main + - release/** + pull_request: branches: - main - -permissions: - contents: read - pull-requests: write jobs: - check-pr: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - with: - node-version: '20.x' - - name: Linting - run: | - npm i -g conventional-changelog-conventionalcommits - npm i -g commitlint@latest - echo ${{ github.event.pull_request.title }} | npx commitlint - - name: Labeling - uses: actions/labeler@v5 - check-changes: + check-code: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 + - name: Check license header uses: apache/skywalking-eyes/header@v0.6.0 + - name: Check rust code style run: cd python && make check-rust - - name: Set up Python ${{ matrix.python-version }} + + - name: Setup Python uses: actions/setup-python@v5 with: - python-version: ${{ matrix.python-version }} + python-version: '3.8' cache: pip cache-dependency-path: pyproject.toml + - name: Install python linter dependencies working-directory: ./python run: | - make setup-env + make setup-venv source venv/bin/activate - pip install ruff mypy - - name: Run python linter + pip install ruff==0.5.2 mypy==1.10.1 + + - name: Check python code style working-directory: ./python run: | source venv/bin/activate diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 00000000..431b201b --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,48 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: PR + +on: + pull_request: + types: [ opened, edited, reopened, synchronize ] + branches: + - main + +permissions: + contents: read + pull-requests: write + +jobs: + check-pr: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Setup Node + uses: actions/setup-node@v4 + with: + node-version: 20 + + - name: Linting commit + run: | + npm i -g conventional-changelog-conventionalcommits + npm i -g commitlint@latest + echo ${{ github.event.pull_request.title }} | npx commitlint + + - name: Labeling + uses: actions/labeler@v5 From 3359e108b8806c50c008072ef6afbcca86b2e4da Mon Sep 17 00:00:00 2001 From: Shaurya <55182375+abyssnlp@users.noreply.github.com> Date: Mon, 12 Aug 2024 18:26:03 +0200 Subject: [PATCH 4/5] fix: register object store with datafusion (#107) --------- Co-authored-by: Shiyan Xu <2701446+xushiyan@users.noreply.github.com> --- crates/core/Cargo.toml | 14 ++++++++++++++ crates/core/src/storage/mod.rs | 8 ++++++++ crates/core/src/table/fs_view.rs | 2 +- crates/core/src/table/mod.rs | 13 +++++++++++++ crates/core/src/table/timeline.rs | 2 +- crates/datafusion/Cargo.toml | 2 +- crates/datafusion/src/lib.rs | 2 ++ 7 files changed, 40 insertions(+), 3 deletions(-) diff --git a/crates/core/Cargo.toml b/crates/core/Cargo.toml index ac000ac7..dcaf5471 100644 --- a/crates/core/Cargo.toml +++ b/crates/core/Cargo.toml @@ -60,5 +60,19 @@ dashmap = { workspace = true } futures = { workspace = true } tokio = { workspace = true } +# datafusion +datafusion = { workspace = true, optional = true } +datafusion-expr = { workspace = true, optional = true } +datafusion-common = { workspace = true, optional = true } +datafusion-physical-expr = { workspace = true, optional = true } + [dev-dependencies] hudi-tests = { path = "../tests" } + +[features] +datafusion = [ + "dep:datafusion", + "datafusion-expr", + "datafusion-common", + "datafusion-physical-expr", +] diff --git a/crates/core/src/storage/mod.rs b/crates/core/src/storage/mod.rs index 374f334a..c7eb1ec5 100644 --- a/crates/core/src/storage/mod.rs +++ b/crates/core/src/storage/mod.rs @@ -58,6 +58,14 @@ impl Storage { } } + #[cfg(feature = "datafusion")] + pub fn register_object_store( + &self, + runtime_env: Arc, + ) { + runtime_env.register_object_store(self.base_url.as_ref(), self.object_store.clone()); + } + #[cfg(test)] async fn get_file_info(&self, relative_path: &str) -> Result { let obj_url = join_url_segments(&self.base_url, &[relative_path])?; diff --git a/crates/core/src/table/fs_view.rs b/crates/core/src/table/fs_view.rs index 974bbbcc..65cc2a98 100644 --- a/crates/core/src/table/fs_view.rs +++ b/crates/core/src/table/fs_view.rs @@ -34,7 +34,7 @@ use crate::storage::{get_leaf_dirs, Storage}; #[allow(dead_code)] pub struct FileSystemView { configs: Arc, - storage: Arc, + pub(crate) storage: Arc, partition_to_file_groups: Arc>>, } diff --git a/crates/core/src/table/mod.rs b/crates/core/src/table/mod.rs index c08105d7..1fe2cb73 100644 --- a/crates/core/src/table/mod.rs +++ b/crates/core/src/table/mod.rs @@ -93,6 +93,19 @@ impl Table { }) } + #[cfg(feature = "datafusion")] + pub fn register_storage( + &self, + runtime_env: Arc, + ) { + self.timeline + .storage + .register_object_store(runtime_env.clone()); + self.file_system_view + .storage + .register_object_store(runtime_env.clone()); + } + async fn load_configs( base_url: Arc, all_options: I, diff --git a/crates/core/src/table/timeline.rs b/crates/core/src/table/timeline.rs index ae92bacc..e502cd60 100644 --- a/crates/core/src/table/timeline.rs +++ b/crates/core/src/table/timeline.rs @@ -92,7 +92,7 @@ impl Instant { #[allow(dead_code)] pub struct Timeline { configs: Arc, - storage: Arc, + pub(crate) storage: Arc, pub instants: Vec, } diff --git a/crates/datafusion/Cargo.toml b/crates/datafusion/Cargo.toml index da0882b2..91ce78e9 100644 --- a/crates/datafusion/Cargo.toml +++ b/crates/datafusion/Cargo.toml @@ -28,7 +28,7 @@ homepage.workspace = true repository.workspace = true [dependencies] -hudi-core = { version = "0.2.0", path = "../core" } +hudi-core = { version = "0.2.0", path = "../core", features = ["datafusion"] } # arrow arrow-schema = { workspace = true } diff --git a/crates/datafusion/src/lib.rs b/crates/datafusion/src/lib.rs index 766d3d0a..0e40a817 100644 --- a/crates/datafusion/src/lib.rs +++ b/crates/datafusion/src/lib.rs @@ -97,6 +97,8 @@ impl TableProvider for HudiDataSource { filters: &[Expr], limit: Option, ) -> Result> { + self.table.register_storage(state.runtime_env().clone()); + let file_slices = self .table .split_file_slices(self.get_input_partitions()) From 5bf117a85c50bd848d51ee81d4dc20202ceae8bd Mon Sep 17 00:00:00 2001 From: Shiyan Xu <2701446+xushiyan@users.noreply.github.com> Date: Mon, 19 Aug 2024 01:53:22 -0500 Subject: [PATCH 5/5] chore: disable labeler due to permission and policy (#115) --- .github/workflows/pr.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index 431b201b..5bab6b33 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -46,3 +46,5 @@ jobs: - name: Labeling uses: actions/labeler@v5 + # disable until figuring out a way to do this without pull_request_target + if: false