Skip to content

Commit c329547

Browse files
Update pull-flusight-baselines.R
1 parent 33037ae commit c329547

File tree

1 file changed

+88
-36
lines changed

1 file changed

+88
-36
lines changed
Lines changed: 88 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,44 +1,96 @@
11

22
# Script that runs with the Pull baselines action to download and save the weekly baselines from the FluSight-baseline repository.
33
# Retrieves specifically FluSight-baseline, FluSight-base_seasonal, and FluSight-equal_cat.
4+
# Runs Hub Validations on the files.
45

5-
# load package
6+
# Load required libraries
67
library(lubridate)
8+
library(hubValidations)
9+
library(fs)
710

8-
# Get last Saturday
9-
current_ref_date <- ceiling_date(Sys.Date(), "week") - days(1)
10-
date_str <- format(current_ref_date, "%Y-%m-%d")
11-
12-
# Types and their source folders
13-
baseline_types <- c("FluSight-baseline", "FluSight-base_seasonal", "FluSight-equal_cat")
14-
baseline_folders <- c("Flusight-baseline", "Flusight-seasonal-baseline", "Flusight-equal_cat")
15-
16-
# Loop and download each one
17-
for (i in seq_along(baseline_types)) {
18-
type <- baseline_types[i]
19-
folder <- baseline_folders[i]
20-
filename <- paste0(date_str, "-", type, ".csv")
21-
22-
# Corrected file URL
23-
file_url <- paste0(
24-
"https://raw.githubusercontent.com/cdcepi/Flusight-baseline/main/weekly-submission/forecasts/",
25-
folder, "/", filename
26-
)
27-
28-
# Save to model-output/<type>/<filename>
29-
target_dir <- file.path("model-output", type)
30-
dir.create(target_dir, recursive = TRUE, showWarnings = FALSE)
31-
destfile <- file.path(target_dir, filename)
32-
33-
# Attempt download
34-
download_success <- tryCatch({
35-
download.file(url = file_url, destfile = destfile, method = "libcurl")
36-
cat("✅ Downloaded and saved:", destfile, "\n")
37-
TRUE
38-
}, error = function(e) {
39-
cat("❌ Failed to download", filename, "\nReason:", e$message, "\n")
40-
FALSE
41-
})
42-
}
11+
# Prepare output file for PR body
12+
result_file <- "validation_result.md"
13+
14+
# Wrap the entire script in a top-level tryCatch
15+
tryCatch({
16+
17+
# Set up reference date and file names
18+
current_ref_date <- ceiling_date(Sys.Date(), "week") - days(1)
19+
date_str <- format(current_ref_date, "%Y-%m-%d")
20+
21+
baseline_types <- c("FluSight-baseline", "FluSight-base_seasonal", "FluSight-equal_cat")
22+
baseline_folders <- c("Flusight-baseline", "Flusight-seasonal-baseline", "Flusight-equal_cat")
23+
24+
downloaded_files <- c()
25+
validation_results <- list()
26+
27+
for (i in seq_along(baseline_types)) {
28+
type <- baseline_types[i]
29+
folder <- baseline_folders[i]
30+
filename <- paste0(date_str, "-", type, ".csv")
31+
32+
file_url <- paste0(
33+
"https://raw.githubusercontent.com/cdcepi/Flusight-baseline/main/weekly-submission/forecasts/",
34+
folder, "/", filename
35+
)
36+
37+
target_dir <- file.path("model-output", type)
38+
dir_create(target_dir, recurse = TRUE)
39+
destfile <- file.path(target_dir, filename)
40+
41+
# Attempt to download
42+
download_success <- tryCatch({
43+
download.file(url = file_url, destfile = destfile, method = "libcurl")
44+
cat("✅ Downloaded and saved:", destfile, "\n")
45+
downloaded_files <- c(downloaded_files, file.path(type, filename))
46+
TRUE
47+
}, error = function(e) {
48+
msg <- paste("❌ Failed to download", filename, "Reason:", e$message)
49+
cat(msg, "\n")
50+
validation_results[[file.path(type, filename)]] <- list(status = "error", message = msg)
51+
FALSE
52+
})
53+
54+
# Only attempt validation if download succeeded
55+
if (download_success) {
56+
file_path <- file.path(type, filename)
57+
result <- tryCatch({
58+
v <- hubValidations::validate_submission(hub_path = ".", file_path = file_path)
59+
60+
# Try to check for validation errors
61+
err_msg <- tryCatch({
62+
hubValidations::check_for_errors(v, verbose = TRUE)
63+
NULL # Passed
64+
}, error = function(e) {
65+
e$message # Return error message
66+
})
67+
68+
list(status = if (is.null(err_msg)) "pass" else "fail", message = err_msg)
69+
70+
}, error = function(e) {
71+
list(status = "error", message = e$message)
72+
})
73+
74+
validation_results[[file_path]] <- result
75+
}
76+
}
77+
78+
# Compose validation_result.md content
79+
messages <- c("### 🧪 Validation Results")
80+
81+
for (file in names(validation_results)) {
82+
res <- validation_results[[file]]
83+
if (res$status == "pass") {
84+
messages <- c(messages, paste0("✅ **", file, "** passed validation."))
85+
} else {
86+
messages <- c(messages, paste0("❌ **", file, "**: ", res$message))
87+
}
88+
}
89+
90+
writeLines(messages, result_file)
91+
92+
}, error = function(e) {
93+
writeLines(c("### 🧪 Validation Results", "❌ Script failed unexpectedly:", e$message), result_file)
94+
})
4395

4496

0 commit comments

Comments
 (0)