Skip to content

Commit 7ddcd2e

Browse files
Merge branch 'master' into env_doc
2 parents d4dd40d + 1b3998e commit 7ddcd2e

File tree

225 files changed

+47945
-11468
lines changed

Some content is hidden

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

225 files changed

+47945
-11468
lines changed

.Rbuildignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
.dir-locals.el
2+
.check.translations.R
23
^\.Rprofile$
34
^data\.table_.*\.tar\.gz$
45
^config\.log$
@@ -16,6 +17,7 @@
1617
^\.devcontainer$
1718
^\.graphics$
1819
^\.github$
20+
^\.vscode$
1921
^\.zed$
2022

2123
^\.gitlab-ci\.yml$
@@ -27,6 +29,7 @@
2729
^src/Makevars$
2830
^CODEOWNERS$
2931
^GOVERNANCE\.md$
32+
^Seal_of_Approval\.md$
3033

3134
^\.RData$
3235
^\.Rhistory$

.ci/.lintr.R

Lines changed: 44 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,20 @@ linters = c(dt_linters, all_linters(
99
packages = "lintr", # TODO(lintr->3.2.0): Remove this.
1010
# eq_assignment_linter(),
1111
brace_linter(allow_single_line = TRUE),
12+
implicit_integer_linter(allow_colon = TRUE),
1213
# TODO(michaelchirico): Activate these incrementally. These are the
1314
# parameterizations that match our style guide.
1415
# implicit_assignment_linter(allow_lazy = TRUE, allow_scoped = TRUE),
15-
# implicit_integer_linter(allow_colon = TRUE),
1616
# system_time_linter = undesirable_function_linter(c(
1717
# system.time = "Only run timings in benchmark.Rraw"
1818
# )),
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+
NULL
25+
)),
1926
# undesirable_function_linter(modify_defaults(
2027
# default_undesirable_functions,
2128
# ifelse = "Use fifelse instead.",
@@ -26,7 +33,8 @@ linters = c(dt_linters, all_linters(
2633
# setwd = NULL
2734
# )),
2835
undesirable_operator_linter(),
29-
# TODO(lintr#2441): Use upstream implementation.
36+
# TODO(lintr#2765): Use upstream implementation.
37+
# assignment_linter(operator = "="),
3038
assignment_linter = NULL,
3139
absolute_path_linter = NULL, # too many false positives
3240
# TODO(lintr#2442): Use this once x[ , j, by] is supported.
@@ -70,43 +78,39 @@ linters = c(dt_linters, all_linters(
7078
))
7179
rm(dt_linters)
7280

73-
# TODO(lintr#2172): Glob with lintr itself.
74-
exclusions = c(local({
75-
exclusion_for_dir <- function(dir, exclusions) {
76-
files = file.path("..", list.files(dir, pattern = "\\.(R|Rmd|Rraw)$", full.names=TRUE))
77-
stats::setNames(rep(list(exclusions), length(files)), files)
78-
}
79-
c(
80-
exclusion_for_dir("tests", list(
81-
quotes_linter = Inf,
82-
# TODO(michaelchirico): Enforce these and re-activate them one-by-one.
83-
implicit_integer_linter = Inf,
84-
infix_spaces_linter = Inf,
85-
undesirable_function_linter = Inf
86-
)),
87-
exclusion_for_dir("vignettes", list(
88-
quotes_linter = Inf,
89-
sample_int_linter = Inf
90-
# strings_as_factors_linter = Inf
91-
# system_time_linter = Inf
92-
)),
93-
exclusion_for_dir("inst/tests", list(
94-
library_call_linter = Inf,
95-
numeric_leading_zero_linter = Inf,
96-
undesirable_operator_linter = Inf, # For ':::', possibly we could be more careful to only exclude ':::'.
97-
# TODO(michaelchirico): Enforce these and re-activate them one-by-one.
98-
comparison_negation_linter = Inf,
99-
condition_call_linter = Inf,
100-
duplicate_argument_linter = Inf,
101-
equals_na_linter = Inf,
102-
missing_argument_linter = Inf,
103-
paste_linter = Inf,
104-
rep_len_linter = Inf,
105-
sample_int_linter = Inf,
106-
seq_linter = Inf,
107-
unnecessary_lambda_linter = Inf
108-
))
81+
exclusions = list(
82+
`../tests` = list(
83+
quotes_linter = Inf,
84+
# TODO(michaelchirico): Enforce these and re-activate them one-by-one.
85+
implicit_integer_linter = Inf,
86+
infix_spaces_linter = Inf,
87+
undesirable_function_linter = Inf
88+
),
89+
`../vignettes*` = list(
90+
# assignment_linter = Inf,
91+
implicit_integer_linter = Inf,
92+
quotes_linter = Inf,
93+
sample_int_linter = Inf
94+
# strings_as_factors_linter = Inf
95+
# system_time_linter = Inf
96+
),
97+
`../inst/tests` = list(
98+
library_call_linter = Inf,
99+
numeric_leading_zero_linter = Inf,
100+
undesirable_operator_linter = Inf, # For ':::', possibly we could be more careful to only exclude ':::'.
101+
# TODO(michaelchirico): Enforce these and re-activate them one-by-one.
102+
comparison_negation_linter = Inf,
103+
condition_call_linter = Inf,
104+
duplicate_argument_linter = Inf,
105+
equals_na_linter = Inf,
106+
missing_argument_linter = Inf,
107+
paste_linter = Inf,
108+
rep_len_linter = Inf,
109+
sample_int_linter = Inf,
110+
seq_linter = Inf,
111+
unnecessary_lambda_linter = Inf
112+
),
113+
`../inst/tests/froll.Rraw` = list(
114+
dt_test_literal_linter = Inf # TODO(michaelchirico): Fix these once #5898, #5692, #5682, #5576, #5575, #5441 are merged.
109115
)
110-
}),
111-
list(`../inst/tests/froll.Rraw` = list(dt_test_literal_linter = Inf)) # TODO(michaelchirico): Fix these once #5898, #5692, #5682, #5576, #5575, #5441 are merged.
112116
)

.ci/README.md

Lines changed: 44 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# data.table continuous integration and deployment
22

3-
On each Pull Request opened in GitHub we run GitHub Actions test jobs to provide prompt feedback about the status of PR. Our main CI pipeline runs on GitLab CI nightly. GitLab repository automatically mirrors our GitHub repository and runs pipeline on `master` branch every night. 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

@@ -12,11 +12,16 @@ Test jobs:
1212
- `test-lin-rel-cran` - `--as-cran` on Linux, strict test for final status of `R CMD check`.
1313
- `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`.
1414
- `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-310-cran` - R 3.1.0 on Linux, stated R dependency version.
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.
1618
- `test-win-rel` - `r-release` on Windows.
1719
- `test-win-dev` - `r-devel` on Windows.
1820
- `test-win-old` - `r-oldrel` on Windows.
19-
- `test-mac-rel` - macOS build not yet available, see [#3326](https://github.com/Rdatatable/data.table/issues/3326) for status
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).
2025

2126
Tests jobs are allowed to fail, summary and logs of test jobs are later published at _CRAN-like checks_ page, see artifacts below.
2227

@@ -44,3 +49,39 @@ Base R implemented helper script, [originally proposed to base R](https://svn.r-
4449
### [`publish.R`](./publish.R)
4550

4651
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).
52+
53+
### [`lint.R`](./lint.R)
54+
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.
59+
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
71+
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.
73+
74+
## Updating CI pipeline
75+
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.
77+
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+
```
86+
87+
Make sure to include a link to the pipeline results in your PR.

0 commit comments

Comments
 (0)