This is an automated email from the ASF dual-hosted git repository.
assignuser pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-swift.git
The following commit(s) were added to refs/heads/main by this push:
new e7e2ded chore: Add Release Audit Tool check to linter (#35)
e7e2ded is described below
commit e7e2dedf4aa5e5a656f51346fb0de5f6386a6252
Author: Sutou Kouhei <[email protected]>
AuthorDate: Tue Jun 17 07:25:47 2025 +0900
chore: Add Release Audit Tool check to linter (#35)
## What's Changed
Apache Rat https://creadur.apache.org/rat/ can detect license issues.
Closes #34.
---
.gitignore | 16 ++++++-
.pre-commit-config.yaml | 14 ++++++
Arrow/.gitignore | 8 ----
ArrowFlight/.gitignore | 8 ----
CDataWGo/.gitignore | 8 ----
dev/release/check_rat_report.py | 59 +++++++++++++++++++++++++
.gitignore => dev/release/rat_exclude_files.txt | 7 ++-
dev/release/run_rat.sh | 54 ++++++++++++++++++++++
8 files changed, 147 insertions(+), 27 deletions(-)
diff --git a/.gitignore b/.gitignore
index b2a9b80..6c315b8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -15,5 +15,19 @@
# specific language governing permissions and limitations
# under the License.
-/.build/
+*.xcodeproj
+.DS_Store
+.build/
+.netrc
+.swiftpm/
+DerivedData/
+Packages/
+xcuserdata/
+
+# Docker
/.docker/
+
+# Release Audit Tool
+/dev/release/apache-rat-*.jar
+/dev/release/filtered_rat.txt
+/dev/release/rat.xml
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 2468305..d1afa58 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -16,6 +16,20 @@
# under the License.
repos:
+ - repo: local
+ hooks:
+ - id: rat
+ name: Release Audit Tool
+ language: system
+ entry: |
+ bash -c " \
+ git archive HEAD \
+ --prefix=apache-arrow-swift/ \
+ --output=apache-arrow-swift.tar.gz && \
+ dev/release/run_rat.sh apache-arrow-swift.tar.gz && \
+ rm -f apache-arrow-swift.tar.gz"
+ always_run: true
+ pass_filenames: false
- repo: https://github.com/realm/SwiftLint
rev: 0.59.1
hooks:
diff --git a/Arrow/.gitignore b/Arrow/.gitignore
deleted file mode 100644
index b63bf7f..0000000
--- a/Arrow/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.DS_Store
-/.build
-/Packages
-/*.xcodeproj
-xcuserdata/
-DerivedData/
-.swiftpm/
-.netrc
diff --git a/ArrowFlight/.gitignore b/ArrowFlight/.gitignore
deleted file mode 100644
index b63bf7f..0000000
--- a/ArrowFlight/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.DS_Store
-/.build
-/Packages
-/*.xcodeproj
-xcuserdata/
-DerivedData/
-.swiftpm/
-.netrc
diff --git a/CDataWGo/.gitignore b/CDataWGo/.gitignore
deleted file mode 100644
index 0023a53..0000000
--- a/CDataWGo/.gitignore
+++ /dev/null
@@ -1,8 +0,0 @@
-.DS_Store
-/.build
-/Packages
-xcuserdata/
-DerivedData/
-.swiftpm/configuration/registries.json
-.swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata
-.netrc
diff --git a/dev/release/check_rat_report.py b/dev/release/check_rat_report.py
new file mode 100755
index 0000000..c45baa0
--- /dev/null
+++ b/dev/release/check_rat_report.py
@@ -0,0 +1,59 @@
+#!/usr/bin/env python3
+#
+# 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.
+
+import fnmatch
+import re
+import sys
+import xml.etree.ElementTree as ET
+
+if len(sys.argv) != 3:
+ sys.stderr.write("Usage: %s exclude_globs.lst rat_report.xml\n" %
+ sys.argv[0])
+ sys.exit(1)
+
+exclude_globs_filename = sys.argv[1]
+xml_filename = sys.argv[2]
+
+globs = [line.strip() for line in open(exclude_globs_filename, "r")]
+
+tree = ET.parse(xml_filename)
+root = tree.getroot()
+resources = root.findall('resource')
+
+all_ok = True
+for r in resources:
+ approvals = r.findall('license-approval')
+ if not approvals or approvals[0].attrib['name'] == 'true':
+ continue
+ clean_name = re.sub('^[^/]+/', '', r.attrib['name'])
+ excluded = False
+ for g in globs:
+ if fnmatch.fnmatch(clean_name, g):
+ excluded = True
+ break
+ if not excluded:
+ sys.stdout.write("NOT APPROVED: %s (%s): %s\n" % (
+ clean_name, r.attrib['name'], approvals[0].attrib['name']))
+ all_ok = False
+
+if not all_ok:
+ sys.exit(1)
+
+print('OK')
+sys.exit(0)
diff --git a/.gitignore b/dev/release/rat_exclude_files.txt
similarity index 89%
copy from .gitignore
copy to dev/release/rat_exclude_files.txt
index b2a9b80..f438f1e 100644
--- a/.gitignore
+++ b/dev/release/rat_exclude_files.txt
@@ -15,5 +15,8 @@
# specific language governing permissions and limitations
# under the License.
-/.build/
-/.docker/
+*/*/go.sum
+*/Package.resolved
+*/go.sum
+.github/pull_request_template.md
+Package.resolved
diff --git a/dev/release/run_rat.sh b/dev/release/run_rat.sh
new file mode 100755
index 0000000..2104369
--- /dev/null
+++ b/dev/release/run_rat.sh
@@ -0,0 +1,54 @@
+#!/usr/bin/env bash
+#
+# 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.
+
+set -eu
+
+RELEASE_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+
+RAT_VERSION=0.16.1
+
+RAT_JAR="${RELEASE_DIR}/apache-rat-${RAT_VERSION}.jar"
+if [ ! -f "${RAT_JAR}" ]; then
+ curl \
+ --fail \
+ --output "${RAT_JAR}" \
+ --show-error \
+ --silent \
+
https://repo1.maven.org/maven2/org/apache/rat/apache-rat/${RAT_VERSION}/apache-rat-${RAT_VERSION}.jar
+fi
+
+RAT_XML="${RELEASE_DIR}/rat.xml"
+java \
+ -jar "${RAT_JAR}" \
+ --out "${RAT_XML}" \
+ --xml \
+ "$1"
+FILTERED_RAT_TXT="${RELEASE_DIR}/filtered_rat.txt"
+if ${PYTHON:-python3} \
+ "${RELEASE_DIR}/check_rat_report.py" \
+ "${RELEASE_DIR}/rat_exclude_files.txt" \
+ "${RAT_XML}" > \
+ "${FILTERED_RAT_TXT}"; then
+ echo "No unapproved licenses"
+else
+ cat "${FILTERED_RAT_TXT}"
+ N_UNAPPROVED=$(grep -c "NOT APPROVED" "${FILTERED_RAT_TXT}")
+ echo "${N_UNAPPROVED} unapproved licenses. Check Rat report: ${RAT_XML}"
+ exit 1
+fi