Skip to content

Commit 8ff16c9

Browse files
Merge branch 'master' into benchmark
2 parents 39843be + 8f5ffa8 commit 8ff16c9

File tree

351 files changed

+80700
-18818
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

351 files changed

+80700
-18818
lines changed

.Rbuildignore

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
1+
.dir-locals.el
2+
.check.translations.R
13
^\.Rprofile$
24
^data\.table_.*\.tar\.gz$
5+
^config\.log$
36
^vignettes/plots/figures$
47
^\.Renviron$
58
^[^/]+\.R$
@@ -11,18 +14,22 @@
1114

1215
^\.ci$
1316
^\.dev$
17+
^\.devcontainer$
1418
^\.graphics$
1519
^\.github$
20+
^\.vscode$
21+
^\.zed$
1622

17-
^\.travis\.yml$
18-
^\.appveyor\.yml$
1923
^\.gitlab-ci\.yml$
2024

2125
^Makefile$
2226
^NEWS\.0\.md$
23-
^README\.md$
27+
^NEWS\.1\.md$
2428
^_pkgdown\.yml$
2529
^src/Makevars$
30+
^CODEOWNERS$
31+
^GOVERNANCE\.md$
32+
^Seal_of_Approval\.md$
2633

2734
^\.RData$
2835
^\.Rhistory$
@@ -32,10 +39,16 @@
3239
^.*\.Rproj$
3340
^\.Rproj\.user$
3441
^\.idea$
42+
^\.libs$
3543

3644
^.*\.dll$
3745

3846
^bus$
3947
^pkgdown$
48+
^docs$
4049
^lib$
4150
^library$
51+
^devwd$
52+
53+
# only the inst/po compressed files are needed, not raw .pot/.po
54+
^po$

.Rprofile

Lines changed: 0 additions & 2 deletions
This file was deleted.

.appveyor.yml

Lines changed: 0 additions & 74 deletions
This file was deleted.

.ci/.lintr.R

Lines changed: 117 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
dt_linters = new.env()
2+
for (f in list.files('.ci/linters/r', full.names=TRUE)) sys.source(f, dt_linters)
3+
rm(f)
4+
5+
# NB: Could do this inside the linter definition, this separation makes those files more standardized
6+
dt_linters <- eapply(dt_linters, function(linter_factory) linter_factory())
7+
8+
linters = c(dt_linters, all_linters(
9+
packages = "lintr", # TODO(lintr->3.2.0): Remove this.
10+
# eq_assignment_linter(),
11+
brace_linter(allow_single_line = TRUE),
12+
implicit_integer_linter(allow_colon = TRUE),
13+
# TODO(michaelchirico): Activate these incrementally. These are the
14+
# parameterizations that match our style guide.
15+
# implicit_assignment_linter(allow_lazy = TRUE, allow_scoped = TRUE),
16+
# system_time_linter = undesirable_function_linter(c(
17+
# system.time = "Only run timings in benchmark.Rraw"
18+
# )),
19+
undesirable_function_linter(c(
20+
cat = "Use catf to enable translations",
21+
message = "Use messagef to avoid fragmented translations.",
22+
warning = "Use warningf to avoid fragmented translations.",
23+
stop = "Use stopf to avoid fragmented translations.",
24+
rev = "Use frev internally, or setfrev if by-reference is safe.",
25+
NULL
26+
)),
27+
# undesirable_function_linter(modify_defaults(
28+
# default_undesirable_functions,
29+
# ifelse = "Use fifelse instead.",
30+
# Sys.setenv = NULL,
31+
# library = NULL,
32+
# options = NULL,
33+
# par = NULL,
34+
# setwd = NULL
35+
# )),
36+
undesirable_operator_linter(),
37+
# TODO(lintr#2765): Use upstream implementation.
38+
# assignment_linter(operator = "="),
39+
assignment_linter = NULL,
40+
absolute_path_linter = NULL, # too many false positives
41+
# TODO(lintr#2442): Use this once x[ , j, by] is supported.
42+
commas_linter = NULL,
43+
commented_code_linter = NULL,
44+
# TODO(linter->3.2.0): Activate this.
45+
consecutive_assertion_linter = NULL,
46+
cyclocomp_linter = NULL,
47+
function_argument_linter = NULL,
48+
indentation_linter = NULL,
49+
infix_spaces_linter = NULL,
50+
line_length_linter = NULL,
51+
missing_package_linter = NULL,
52+
namespace_linter = NULL,
53+
nonportable_path_linter = NULL,
54+
object_name_linter = NULL,
55+
object_usage_linter = NULL,
56+
quotes_linter = NULL,
57+
semicolon_linter = NULL,
58+
spaces_inside_linter = NULL,
59+
spaces_left_parentheses_linter = NULL,
60+
# TODO(michaelchirico): Only exclude from vignettes, not sure what's wrong.
61+
strings_as_factors_linter = NULL,
62+
# TODO(lintr->3.2.0): Fix on a valid TODO style, enforce it, and re-activate.
63+
todo_comment_linter = NULL,
64+
# TODO(michaelchirico): Enforce these and re-activate them one-by-one.
65+
brace_linter = NULL,
66+
fixed_regex_linter = NULL,
67+
if_not_else_linter = NULL,
68+
implicit_assignment_linter = NULL,
69+
implicit_integer_linter = NULL,
70+
keyword_quote_linter = NULL,
71+
object_overwrite_linter = NULL,
72+
paren_body_linter = NULL,
73+
redundant_equals_linter = NULL,
74+
undesirable_function_linter = NULL,
75+
unnecessary_concatenation_linter = NULL,
76+
unnecessary_nesting_linter = NULL,
77+
unreachable_code_linter = NULL,
78+
unused_import_linter = NULL
79+
))
80+
rm(dt_linters)
81+
82+
exclusions = list(
83+
`../tests` = list(
84+
quotes_linter = Inf,
85+
# TODO(michaelchirico): Enforce these and re-activate them one-by-one.
86+
implicit_integer_linter = Inf,
87+
infix_spaces_linter = Inf,
88+
undesirable_function_linter = Inf
89+
),
90+
`../vignettes*` = list(
91+
# assignment_linter = Inf,
92+
implicit_integer_linter = Inf,
93+
quotes_linter = Inf,
94+
sample_int_linter = Inf
95+
# strings_as_factors_linter = Inf
96+
# system_time_linter = Inf
97+
),
98+
`../inst/tests` = list(
99+
library_call_linter = Inf,
100+
numeric_leading_zero_linter = Inf,
101+
undesirable_operator_linter = Inf, # For ':::', possibly we could be more careful to only exclude ':::'.
102+
# TODO(michaelchirico): Enforce these and re-activate them one-by-one.
103+
comparison_negation_linter = Inf,
104+
condition_call_linter = Inf,
105+
duplicate_argument_linter = Inf,
106+
equals_na_linter = Inf,
107+
missing_argument_linter = Inf,
108+
paste_linter = Inf,
109+
rep_len_linter = Inf,
110+
sample_int_linter = Inf,
111+
seq_linter = Inf,
112+
unnecessary_lambda_linter = Inf
113+
),
114+
`../inst/tests/froll.Rraw` = list(
115+
dt_test_literal_linter = Inf # TODO(michaelchirico): Fix these once #5898, #5692, #5682, #5576, #5575, #5441 are merged.
116+
)
117+
)

.ci/Dockerfile.in

Lines changed: 0 additions & 9 deletions
This file was deleted.

.ci/README.md

Lines changed: 56 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,71 +1,87 @@
11
# data.table continuous integration and deployment
22

3-
On each Pull Request opened in GitHub we run Travis CI and Appveyor to provide prompt feedback about the status of PR. Our main CI pipeline runs on GitLab CI. GitLab repository automatically mirrors our GitHub repository and runs pipeline on `master` branch. It tests more environments and different configurations. It publish variety of artifacts.
3+
On each Pull Request opened in GitHub we run GitHub Actions test jobs to provide prompt feedback about the status of PR. Our more thorough main CI pipeline runs nightly on GitLab CI. In addition to branches pushed directly, the GitLab repository automatically mirrors our GitHub repository and runs pipeline on the `master` branch every night. It tests more environments and different configurations. It publishes a variety of artifacts such as our [homepage](https://rdatatable.gitlab.io/data.table/) and [CRAN-like website for dev version](https://rdatatable.gitlab.io/data.table/web/packages/data.table/index.html), including windows binaries for the dev version.
44

55
## Environments
66

77
### [GitLab CI](./../.gitlab-ci.yml)
88

99
Test jobs:
10-
- `test-rel-lin` - `r-release` on Linux, most comprehensive test environment, `-O3 -flto -fno-common -Wunused-result`, extra check for no compilation warnings, includes testing [_with other packages_](./../inst/tests/other.Rraw) ([extended suggests](./../inst/tests/tests-DESCRIPTION))
11-
- `test-rel-cran-lin` - `--as-cran` on Linux, `-g0`, extra check for final status of `R CMD check` where we allow one NOTE (_size of tarball_).
12-
- `test-dev-cran-lin` - `r-devel` and `--as-cran` on Linux, `--with-recommended-packages --enable-strict-barrier --disable-long-double`, tests for compilation warnings in pkg install and new NOTEs/Warnings in pkg check, and because it is R-devel it is marked as allow_failure
13-
- `test-rel-vanilla-lin` - `r-release` on Linux, no suggested deps, no OpenMP, `-O0`, tracks memory usage during tests
14-
- `test-310-cran-lin` - R 3.1.0 on Linux
15-
- `test-344-cran-lin` - R 3.4.4 on Linux
16-
- `test-350-cran-lin` - R 3.5.0 on Linux, no `r-recommended`
17-
- `test-rel-win` - `r-release` on Windows
18-
- `test-dev-win` - `r-devel` on Windows
19-
- `test-rel-osx` - MacOSX build not yet deployed, see [#3326](https://github.com/Rdatatable/data.table/issues/3326) for status
10+
- `test-lin-rel` - `r-release` on Linux, most comprehensive test environment, force all suggests, `-O3 -flto=auto -fno-common -Wunused-result`, test for no compilation warnings.
11+
- `test-lin-rel-vanilla` - `r-release` on Linux, no suggested deps, no zlib, no OpenMP, flags `-g -O0 -fno-openmp`, skip manual and vignettes.
12+
- `test-lin-rel-cran` - `--as-cran` on Linux, strict test for final status of `R CMD check`.
13+
- `test-lin-dev-gcc-strict-cran` - `--as-cran` on Linux, `r-devel` built with `-enable-strict-barrier --disable-long-double`, test for compilation warnings, test for new NOTEs/WARNINGs from `R CMD check`.
14+
- `test-lin-dev-clang-cran` - same as `gcc-strict` job but R built with `clang` and no `--enable-strict-barrier --disable-long-double` flags.
15+
- `test-lin-ancient-cran` - Stated R dependency version (currently 3.4.0) on Linux.
16+
- `test-lin-dev-clang-san` - `r-devel` on Linux built with `clang -fsanitize=address,undefined` (including LeakSanitizer), test for sanitizer output in tests and examples.
17+
- `test-lin-dev-gcc-san` - `r-devel` on Linux built with `gcc -fsanitize=address,undefined` (including LeakSanitizer), test for sanitizer output in tests and examples.
18+
- `test-win-rel` - `r-release` on Windows.
19+
- `test-win-dev` - `r-devel` on Windows.
20+
- `test-win-old` - `r-oldrel` on Windows.
21+
- `test-mac-rel` - `r-release` on macOS.
22+
- `test-mac-old` - `r-oldrel` on macOS.
23+
24+
The CI steps for the tests are [required](https://github.com/Rdatatable/data.table/blob/55eb0f160b169398d51f138131c14a66c86e5dc9/.ci/publish.R#L162-L168) to be named according to the pattern `test-(lin|win|mac)-<R version>[-<suffix>]*`, where `<R version>` is `rel`, `dev`, `old`, `ancient`, or three digits comprising an R version (e.g. `362` corresponding to R-3.6.2).
25+
26+
Tests jobs are allowed to fail, summary and logs of test jobs are later published at _CRAN-like checks_ page, see artifacts below.
2027

2128
Artifacts:
2229
- [homepage](https://rdatatable.gitlab.io/data.table) - made with [pkgdown](https://github.com/r-lib/pkgdown)
2330
- [html manual](https://rdatatable.gitlab.io/data.table/library/data.table/html/00Index.html)
2431
- [pdf manual](https://rdatatable.gitlab.io/data.table/web/packages/data.table/data.table.pdf)
2532
- [html vignettes](https://rdatatable.gitlab.io/data.table/library/data.table/doc/index.html)
26-
- R packages repository for `data.table` and all _Suggests_ dependencies, url: `https://Rdatatable.gitlab.io/data.table`
33+
- R packages repository for `data.table` and all _Suggests_ dependencies, url: `https://rdatatable.gitlab.io/data.table`
2734
- sources
28-
- Windows binaries for `r-release` and `r-devel`
35+
- Windows binaries for `r-release`, `r-devel` and `r-oldrel`
2936
- [CRAN-like homepage](https://rdatatable.gitlab.io/data.table/web/packages/data.table/index.html)
30-
- [CRAN-like checks results](https://rdatatable.gitlab.io/data.table/web/checks/check_results_data.table.html) - note that all artifacts, including check results page, are being published only when all test jobs successfully pass, thus one will not see an _ERROR_ status there (unless error happened on a job marked as `allow_failure`).
31-
- [docker images](https://gitlab.com/Rdatatable/data.table/container_registry) - copy/paste-able `docker pull` commands can be found at the bottom of our [CRAN-like homepage](https://rdatatable.gitlab.io/data.table/web/packages/data.table/index.html)
37+
- [CRAN-like checks results](https://rdatatable.gitlab.io/data.table/web/checks/check_results_data.table.html)
3238

33-
### [Travis CI](./../.travis.yml)
39+
### [GitHub Actions](./../.github/workflows)
3440

35-
Test jobs:
36-
- `r-release` on Linux, includes code coverage check
37-
- _(might be disabled)_ `r-release` on OSX
41+
TODO document
3842

39-
Artifacts:
40-
- R packages repository having `data.table` sources only, url: `https://Rdatatable.github.io/data.table`
41-
- code coverage stats pushed to [codecov.io/gh/Rdatatable/data.table](https://codecov.io/gh/Rdatatable/data.table)
43+
## CI tools
4244

43-
### [Appveyor](./../.appveyor.yml)
45+
### [`ci.R`](./ci.R)
4446

45-
Test jobs:
46-
- Windows `r-release`
47-
- _(might be disabled)_ Windows `r-devel`
47+
Base R implemented helper script, [originally proposed to base R](https://svn.r-project.org/R/branches/tools4pkgs/src/library/tools/R/packages.R), that ease the process of extracting dependency information from description files, and to mirror packages and their recursive dependencies from CRAN to local CRAN-like directory. It is used in [GitLab CI pipeline](./../.gitlab-ci.yml).
4848

49-
Artifacts:
50-
- Windows `r-release` binaries accessed only via web UI
49+
### [`publish.R`](./publish.R)
5150

52-
## Tools
51+
Base R implemented helper script to orchestrate generation of most artifacts and to arrange them nicely. It is being used only in [_integration_ stage in GitLab CI pipeline](./../.gitlab-ci.yml).
5352

54-
### [`ci.R`](./ci.R)
53+
### [`lint.R`](./lint.R)
5554

56-
Base R implemented helper script, [originally proposed to R](https://svn.r-project.org/R/branches/tools4pkgs/src/library/tools/R/packages.R), that ease the process of extracting dependency information from description files, also to mirror packages and their recursive dependencies from CRAN to local CRAN-like directory. It is widely used in our [GitLab CI pipeline](./../.gitlab-ci.yml).
55+
Base R runner for the manual (non-`lintr`) lint checks to be run from GitHub Actions during the code quality check. The command line arguments are as follows:
56+
1. Path to the directory containing files defining the linters. A linter is a function that accepts one argument (typically the path to the file) and signals an error if it fails the lint check.
57+
2. Path to the directory containing files to check.
58+
3. A regular expression matching the files to check.
5759

58-
### [`publish.R`](./publish.R)
60+
One of the files in the linter directory may define the `.preprocess` function, which must accept one file path and return a value that other linter functions will understand. The function may also return `NULL` to indicate that the file must be skipped.
61+
62+
Example command lines:
63+
64+
```sh
65+
Rscript .ci/lint.R .ci/linters/c src '[.][ch]$'
66+
Rscript .ci/lint.R .ci/linters/po po '[.]po$'
67+
Rscript .ci/lint.R .ci/linters/md . '[.]R?md$'
68+
```
69+
70+
## GitLab Open Source Program
5971

60-
Base R implemented helper script to orchestrate generation of most artifacts. It is being used only in [_integration_ stage in GitLab CI pipeline](./../.gitlab-ci.yml).
72+
We are currently part of the [GitLab for Open Source Program](https://about.gitlab.com/solutions/open-source/). This gives us 50,000 compute minutes per month for our GitLab CI. Our license needs to be renewed yearly (around July) and is currently managed by @ben-schwen.
6173

62-
### [`Dockerfile.in`](./Dockerfile.in)
74+
## Updating CI pipeline
6375

64-
Template file to produce `Dockerfile` for, as of now, three docker images. Docker images are being built and published in [_deploy_ stage in GitLab CI pipeline](./../.gitlab-ci.yml).
65-
- `r-base-dev` using `r-release`: publish docker image of `data.table` on R-release
66-
- `r-builder` using `r-release`: publish on R-release and OS dependencies for building Rmarkdown vignettes
67-
- `r-devel`: publish docker image of `data.table` on R-devel built with `--with-recommended-packages --enable-strict-barrier --disable-long-double`
76+
Basic CI checks are also run on every push to the GitLab repository. This can **and should** be used for PRs changing the CI pipeline before merging them to master.
6877

69-
### [`deploy.sh`](./deploy.sh)
78+
```shell
79+
# fetch changes from remote (GitHub) and push them to GitLab
80+
git fetch [email protected]:Rdatatable/data.table.git new_branch:new_branch
81+
git push
82+
# after updating on GitHub, pull changes from remote and push to GitLab
83+
git pull [email protected]:Rdatatable/data.table.git new_branch
84+
git push
85+
```
7086

71-
Script used on Travis CI to publish CRAN-like repository of `data.table` sources. It publishes to `gh-pages` branch in GitHub repository. It depends on a token, which is provided based on `secure` environment variable in [.travis.yml](./../.travis.yml). It has been generated by @jangorecki.
87+
Make sure to include a link to the pipeline results in your PR.

0 commit comments

Comments
 (0)