This is an automated email from the ASF dual-hosted git repository.
kou pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow.git
The following commit(s) were added to refs/heads/master by this push:
new 3c0a7a6353 ARROW-17353: [Release][R] Validate binaries version (#14396)
3c0a7a6353 is described below
commit 3c0a7a63533ced67762c1c04ee81e5516325453a
Author: Sutou Kouhei <[email protected]>
AuthorDate: Wed Oct 19 13:36:24 2022 +0900
ARROW-17353: [Release][R] Validate binaries version (#14396)
We generate version in Crossbow not CI job.
We can use file name validation feature by using version generated by
Crossbow.
We use "X.Y.Z" version for RC version such as "10.0.0" for "10.0.0-rc1".
Authored-by: Sutou Kouhei <[email protected]>
Signed-off-by: Sutou Kouhei <[email protected]>
---
dev/archery/archery/crossbow/core.py | 43 ++++++++++++++++++++--
.../tests/fixtures/crossbow-job-no-failure.yaml | 4 +-
.../crossbow/tests/fixtures/crossbow-job.yaml | 4 +-
dev/tasks/macros.jinja | 12 ++++--
dev/tasks/r/github.packages.yml | 8 +---
dev/tasks/tasks.yml | 22 +++++------
r/tools/nixlibs.R | 2 +-
r/tools/winlibs.R | 5 ++-
8 files changed, 72 insertions(+), 28 deletions(-)
diff --git a/dev/archery/archery/crossbow/core.py
b/dev/archery/archery/crossbow/core.py
index c8ea8a13a4..a83c190d12 100644
--- a/dev/archery/archery/crossbow/core.py
+++ b/dev/archery/archery/crossbow/core.py
@@ -738,14 +738,16 @@ class Target(Serializable):
(currently only an email address where the notification should be sent).
"""
- def __init__(self, head, branch, remote, version, email=None):
+ def __init__(self, head, branch, remote, version, r_version, email=None):
self.head = head
self.email = email
self.branch = branch
self.remote = remote
self.github_repo = "/".join(_parse_github_user_repo(remote))
self.version = version
+ self.r_version = r_version
self.no_rc_version = re.sub(r'-rc\d+\Z', '', version)
+ self.no_rc_r_version = re.sub(r'-rc\d+\Z', '', r_version)
# TODO(ARROW-17552): Remove "master" from default_branch after
# migration to "main".
self.default_branch = ['main', 'master']
@@ -791,8 +793,39 @@ class Target(Serializable):
if email is None:
email = repo.user_email
+ version_dev_match = re.match(r".*\.dev(\d+)$", version)
+ if version_dev_match:
+ with open(f"{repo.path}/r/DESCRIPTION") as description_file:
+ description = description_file.read()
+ r_version_pattern = re.compile(r"^Version:\s*(.*)$",
+ re.MULTILINE)
+ r_version = re.findall(r_version_pattern, description)[0]
+ if r_version:
+ version_dev = int(version_dev_match[1])
+ # "1_0000_00_00 +" is for generating a greater version
+ # than YYYYMMDD. For example, 1_0000_00_01
+ # (version_dev == 1 case) is greater than 2022_10_16.
+ #
+ # Why do we need a greater version than YYYYMMDD? It's
+ # for keeping backward compatibility. We used
+ # MAJOR.MINOR.PATCH.YYYYMMDD as our nightly package
+ # version. (See also ARROW-16403). If we use "9000 +
+ # version_dev" here, a developer that used
+ # 9.0.0.20221016 can't upgrade to the later nightly
+ # package unless we release 10.0.0. Because 9.0.0.9234
+ # or something is less than 9.0.0.20221016.
+ r_version_dev = 1_0000_00_00 + version_dev
+ # version: 10.0.0.dev234
+ # r_version: 9.0.0.9000
+ # -> 9.0.0.100000234
+ r_version = re.sub(r"\.9000\Z", f".{r_version_dev}", r_version)
+ else:
+ r_version = version
+ else:
+ r_version = version
+
return cls(head=head, email=email, branch=branch, remote=remote,
- version=version)
+ version=version, r_version=r_version)
def is_default_branch(self):
# TODO(ARROW-17552): Switch the condition to "is" instead of "in"
@@ -1105,7 +1138,10 @@ class Job(Serializable):
'version': target.version,
'no_rc_version': target.no_rc_version,
'no_rc_semver_version': target.no_rc_semver_version,
- 'no_rc_snapshot_version': target.no_rc_snapshot_version}
+ 'no_rc_snapshot_version': target.no_rc_snapshot_version,
+ 'r_version': target.r_version,
+ 'no_rc_r_version': target.no_rc_r_version,
+ }
for task_name, task in task_definitions.items():
task = task.copy()
artifacts = task.pop('artifacts', None) or [] # because of yaml
@@ -1260,6 +1296,7 @@ class Config(dict):
branch='master',
remote='https://github.com/apache/arrow',
version='1.0.0dev123',
+ r_version='0.13.0.100000123',
email='[email protected]'
)
job = Job.from_config(config=self,
diff --git
a/dev/archery/archery/crossbow/tests/fixtures/crossbow-job-no-failure.yaml
b/dev/archery/archery/crossbow/tests/fixtures/crossbow-job-no-failure.yaml
index 15e8ca3ff5..eb03bbee0b 100644
--- a/dev/archery/archery/crossbow/tests/fixtures/crossbow-job-no-failure.yaml
+++ b/dev/archery/archery/crossbow/tests/fixtures/crossbow-job-no-failure.yaml
@@ -5,7 +5,9 @@ target: !Target
branch: refs/pull/4435/merge
remote: https://github.com/apache/arrow
version: 0.13.0.dev306
+ r_version: 0.12.0.100000306
no_rc_version: 0.13.0.dev306
+ no_rc_r_version: 0.12.0.100000306
tasks:
docker-cpp-cmake32: !Task
ci: circle
@@ -64,4 +66,4 @@ branch: ursabot-1
_queue: !Queue
path: the_path
github_token: xxxxxxxxx
- _remote_url: https://github.com/apache/crossbow
\ No newline at end of file
+ _remote_url: https://github.com/apache/crossbow
diff --git a/dev/archery/archery/crossbow/tests/fixtures/crossbow-job.yaml
b/dev/archery/archery/crossbow/tests/fixtures/crossbow-job.yaml
index 90eab70498..f6de07dd45 100644
--- a/dev/archery/archery/crossbow/tests/fixtures/crossbow-job.yaml
+++ b/dev/archery/archery/crossbow/tests/fixtures/crossbow-job.yaml
@@ -5,7 +5,9 @@ target: !Target
branch: refs/pull/4435/merge
remote: https://github.com/apache/arrow
version: 0.13.0.dev306
+ r_version: 0.12.0.100000306
no_rc_version: 0.13.0.dev306
+ no_rc_r_version: 0.12.0.100000306
tasks:
docker-cpp-cmake32: !Task
ci: circle
@@ -64,4 +66,4 @@ branch: ursabot-1
_queue: !Queue
path: the_path
github_token: xxxxxxxxx
- _remote_url: https://github.com/apache/crossbow
\ No newline at end of file
+ _remote_url: https://github.com/apache/crossbow
diff --git a/dev/tasks/macros.jinja b/dev/tasks/macros.jinja
index 3bec472bcf..bd3358e073 100644
--- a/dev/tasks/macros.jinja
+++ b/dev/tasks/macros.jinja
@@ -269,7 +269,7 @@ on:
rm -f apache-arrow*.rb.bak
{% endmacro %}
-{%- macro github_change_r_pkg_version(is_fork, version = '\\2.\'\"$(date
+%Y%m%d)\"\'' ) -%}
+{%- macro github_change_r_pkg_version(is_fork, version) -%}
- name: Modify version
shell: bash
run: |
@@ -339,12 +339,16 @@ on:
# tree not available in git-bash on windows
run: |
ls -R repo
- - name: Add dev repo to .Rprofile
+ - name: Add repos to .Rprofile
shell: Rscript {0}
run: |
- str <- paste0("options(arrow.dev_repo ='file://", getwd(), "/repo' )")
- print(str)
profile_path <- file.path(getwd(), ".Rprofile")
+ repo <- paste0("file://", getwd(), "/repo")
+ str <- paste0("options(arrow.repo = '", repo, "' )")
+ print(str)
+ write(str, file = profile_path, append = TRUE)
+ str <- paste0("options(arrow.dev_repo = '", repo, "' )")
+ print(str)
write(str, file = profile_path, append = TRUE)
# Set envvar for later steps by appending to $GITHUB_ENV
write(paste0("R_PROFILE_USER=", profile_path), file =
Sys.getenv("GITHUB_ENV"), append = TRUE)
diff --git a/dev/tasks/r/github.packages.yml b/dev/tasks/r/github.packages.yml
index efe071a766..e53579f741 100644
--- a/dev/tasks/r/github.packages.yml
+++ b/dev/tasks/r/github.packages.yml
@@ -17,10 +17,6 @@
{% import 'macros.jinja' as macros with context %}
-# This allows us to set a custom version via param:
-# crossbow submit --param custom_version=8.5.3 r-binary-packages
-# if the param is unset defaults to the usual Ymd naming scheme
-{% set package_version = custom_version|replace("Unset", "\\2.\'\"$(date
+%Y%m%d)\"\'") %}
{% set is_fork = macros.is_fork %}
{{ macros.github_header() }}
@@ -35,7 +31,7 @@ jobs:
pkg_version: {{ '${{ steps.save-version.outputs.pkg_version }}' }}
steps:
{{ macros.github_checkout_arrow()|indent }}
- {{ macros.github_change_r_pkg_version(is_fork, package_version)|indent }}
+ {{ macros.github_change_r_pkg_version(is_fork,
arrow.no_rc_r_version)|indent }}
- name: Save Version
id: save-version
shell: bash
@@ -281,7 +277,7 @@ jobs:
{{ macros.github_test_r_src_pkg()|indent(8) }}
'
- name: Upload binary artifact
- if: matrix.config.devtoolset
+ if: matrix.config.devtoolset
uses: actions/upload-artifact@v3
with:
name: r-pkg_centos7
diff --git a/dev/tasks/tasks.yml b/dev/tasks/tasks.yml
index 81a2c24bba..bdf53ff1da 100644
--- a/dev/tasks/tasks.yml
+++ b/dev/tasks/tasks.yml
@@ -957,17 +957,17 @@ tasks:
params:
custom_version: Unset
artifacts:
- - r-lib__libarrow__bin__windows__arrow-[0-9\.]+\.zip
- - r-lib__libarrow__bin__centos-7__arrow-[0-9\.]+\.zip
- - r-lib__libarrow__bin__ubuntu-18.04__arrow-[0-9\.]+\.zip
- - r-lib__libarrow__bin__ubuntu-22.04__arrow-[0-9\.]+\.zip
- - r-pkg__bin__windows__contrib__4.1__arrow_[0-9\.]+\.zip
- - r-pkg__bin__windows__contrib__4.2__arrow_[0-9\.]+\.zip
- - r-pkg__bin__macosx__contrib__4.1__arrow_[0-9\.]+\.tgz
- - r-pkg__bin__macosx__contrib__4.2__arrow_[0-9\.]+\.tgz
- - r-pkg__bin__macosx__big-sur-arm64__contrib__4.1__arrow_[0-9\.]+\.tgz
- - r-pkg__bin__macosx__big-sur-arm64__contrib__4.2__arrow_[0-9\.]+\.tgz
- - r-pkg__src__contrib__arrow_[0-9\.]+\.tar\.gz
+ - r-lib__libarrow__bin__windows__arrow-{no_rc_r_version}\.zip
+ - r-lib__libarrow__bin__centos-7__arrow-{no_rc_r_version}\.zip
+ - r-lib__libarrow__bin__ubuntu-18.04__arrow-{no_rc_r_version}\.zip
+ - r-lib__libarrow__bin__ubuntu-22.04__arrow-{no_rc_r_version}\.zip
+ - r-pkg__bin__windows__contrib__4.1__arrow_{no_rc_r_version}\.zip
+ - r-pkg__bin__windows__contrib__4.2__arrow_{no_rc_r_version}\.zip
+ - r-pkg__bin__macosx__contrib__4.1__arrow_{no_rc_r_version}\.tgz
+ - r-pkg__bin__macosx__contrib__4.2__arrow_{no_rc_r_version}\.tgz
+ -
r-pkg__bin__macosx__big-sur-arm64__contrib__4.1__arrow_{no_rc_r_version}\.tgz
+ -
r-pkg__bin__macosx__big-sur-arm64__contrib__4.2__arrow_{no_rc_r_version}\.tgz
+ - r-pkg__src__contrib__arrow_{no_rc_r_version}\.tar\.gz
########################### Release verification ############################
diff --git a/r/tools/nixlibs.R b/r/tools/nixlibs.R
index f066e4494d..817563b85c 100644
--- a/r/tools/nixlibs.R
+++ b/r/tools/nixlibs.R
@@ -32,7 +32,7 @@ dev_version <- package_version(VERSION)[1, 4]
# Small dev versions are added for R-only changes during CRAN submission.
if (is.na(dev_version) || dev_version < 100) {
VERSION <- package_version(VERSION)[1, 1:3]
- arrow_repo <-
sprintf("https://apache.jfrog.io/artifactory/arrow/r/%s/libarrow/", VERSION)
+ arrow_repo <- paste0(getOption("arrow.repo",
sprintf("https://apache.jfrog.io/artifactory/arrow/r/%s", VERSION)),
"/libarrow/")
} else {
arrow_repo <- paste0(getOption("arrow.dev_repo",
"https://nightlies.apache.org/arrow/r"), "/libarrow/")
}
diff --git a/r/tools/winlibs.R b/r/tools/winlibs.R
index 165c98da5e..d941da4baa 100644
--- a/r/tools/winlibs.R
+++ b/r/tools/winlibs.R
@@ -44,7 +44,10 @@ if
(!file.exists(sprintf("windows/arrow-%s/include/arrow/api.h", VERSION))) {
"/libarrow/bin/windows/arrow-%s.zip"
)
# %1$s uses the first variable for both substitutions
- artifactory <-
"https://apache.jfrog.io/artifactory/arrow/r/%1$s/libarrow/bin/windows/arrow-%1$s.zip"
+ artifactory <- paste0(
+ getOption("arrow.repo",
"https://apache.jfrog.io/artifactory/arrow/r/%1$s"),
+ "/libarrow/bin/windows/arrow-%1$s.zip"
+ )
rwinlib <- "https://github.com/rwinlib/arrow/archive/v%s.zip"
dev_version <- package_version(VERSION)[1, 4]