mirror of
https://github.com/Magnus167/rustframe.git
synced 2025-08-20 11:00:00 +00:00
Compare commits
11 Commits
38246063c5
...
d4e5946b0e
Author | SHA1 | Date | |
---|---|---|---|
![]() |
d4e5946b0e | ||
04fbf5ca50 | |||
![]() |
49c9e7f66d | ||
![]() |
08a4871907 | ||
![]() |
dbb95c9b1a | ||
![]() |
8417b9e5d7 | ||
e2db5eb315 | |||
bdef7f1732 | |||
2b4ef8a371 | |||
![]() |
1213d588ec | ||
![]() |
a76963ec2e |
6
.github/runner/Dockerfile
vendored
6
.github/runner/Dockerfile
vendored
@ -18,13 +18,13 @@ RUN cd /home/docker && mkdir actions-runner && cd actions-runner \
|
|||||||
|
|
||||||
RUN chown -R docker ~docker && /home/docker/actions-runner/bin/installdependencies.sh
|
RUN chown -R docker ~docker && /home/docker/actions-runner/bin/installdependencies.sh
|
||||||
|
|
||||||
COPY start.sh start.sh
|
COPY entrypoint.sh entrypoint.sh
|
||||||
|
|
||||||
# make the script executable
|
# make the script executable
|
||||||
RUN chmod +x start.sh
|
RUN chmod +x entrypoint.sh
|
||||||
|
|
||||||
# since the config and run script for actions are not allowed to be run by root,
|
# since the config and run script for actions are not allowed to be run by root,
|
||||||
# set the user to "docker" so all subsequent commands are run as the docker user
|
# set the user to "docker" so all subsequent commands are run as the docker user
|
||||||
USER docker
|
USER docker
|
||||||
|
|
||||||
ENTRYPOINT ["./start.sh"]
|
ENTRYPOINT ["./entrypoint.sh"]
|
3
.github/runner/docker-compose.yml
vendored
3
.github/runner/docker-compose.yml
vendored
@ -6,7 +6,8 @@ services:
|
|||||||
context: .
|
context: .
|
||||||
args:
|
args:
|
||||||
RUNNER_VERSION: 2.323.0
|
RUNNER_VERSION: 2.323.0
|
||||||
container_name: github-runner
|
# container_name commented to allow for multiple runners
|
||||||
|
# container_name: github-runner
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
volumes:
|
volumes:
|
||||||
|
24
.github/runner/entrypoint.sh
vendored
Normal file
24
.github/runner/entrypoint.sh
vendored
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
REPOSITORY=$REPO
|
||||||
|
ACCESS_TOKEN=$GH_TOKEN
|
||||||
|
LABELS=$RUNNER_LABELS
|
||||||
|
|
||||||
|
# echo "REPO ${REPOSITORY}"
|
||||||
|
# echo "ACCESS_TOKEN ${ACCESS_TOKEN}"
|
||||||
|
|
||||||
|
REG_TOKEN=$(curl -X POST -H "Authorization: token ${ACCESS_TOKEN}" -H "Accept: application/vnd.github+json" https://api.github.com/repos/${REPOSITORY}/actions/runners/registration-token | jq .token --raw-output)
|
||||||
|
|
||||||
|
cd /home/docker/actions-runner
|
||||||
|
|
||||||
|
./config.sh --url https://github.com/${REPOSITORY} --token ${REG_TOKEN} --labels ${LABELS}
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
echo "Removing runner..."
|
||||||
|
./config.sh remove --unattended --token ${REG_TOKEN}
|
||||||
|
}
|
||||||
|
|
||||||
|
trap 'cleanup; exit 130' INT
|
||||||
|
trap 'cleanup; exit 143' TERM
|
||||||
|
|
||||||
|
./run.sh & wait $!
|
24
.github/runner/start.sh
vendored
24
.github/runner/start.sh
vendored
@ -1,24 +1,4 @@
|
|||||||
#!/bin/bash
|
|
||||||
|
|
||||||
REPOSITORY=$REPO
|
|
||||||
ACCESS_TOKEN=$GH_TOKEN
|
|
||||||
LABELS=$RUNNER_LABELS
|
|
||||||
|
|
||||||
# echo "REPO ${REPOSITORY}"
|
docker compose up -d --build
|
||||||
# echo "ACCESS_TOKEN ${ACCESS_TOKEN}"
|
# docker compose up -d --build --scale github-runner=2
|
||||||
|
|
||||||
REG_TOKEN=$(curl -X POST -H "Authorization: token ${ACCESS_TOKEN}" -H "Accept: application/vnd.github+json" https://api.github.com/repos/${REPOSITORY}/actions/runners/registration-token | jq .token --raw-output)
|
|
||||||
|
|
||||||
cd /home/docker/actions-runner
|
|
||||||
|
|
||||||
./config.sh --url https://github.com/${REPOSITORY} --token ${REG_TOKEN} --labels ${LABELS}
|
|
||||||
|
|
||||||
cleanup() {
|
|
||||||
echo "Removing runner..."
|
|
||||||
./config.sh remove --unattended --token ${REG_TOKEN}
|
|
||||||
}
|
|
||||||
|
|
||||||
trap 'cleanup; exit 130' INT
|
|
||||||
trap 'cleanup; exit 143' TERM
|
|
||||||
|
|
||||||
./run.sh & wait $!
|
|
||||||
|
@ -648,8 +648,13 @@ fn collect_monthly(
|
|||||||
let mut year = start_date.year();
|
let mut year = start_date.year();
|
||||||
let mut month = start_date.month();
|
let mut month = start_date.month();
|
||||||
|
|
||||||
let next_month =
|
let next_month = |(yr, mo): (i32, u32)| -> (i32, u32) {
|
||||||
|(yr, mo): (i32, u32)| -> (i32, u32) { if mo == 12 { (yr + 1, 1) } else { (yr, mo + 1) } };
|
if mo == 12 {
|
||||||
|
(yr + 1, 1)
|
||||||
|
} else {
|
||||||
|
(yr, mo + 1)
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
let candidate = if want_first_day {
|
let candidate = if want_first_day {
|
||||||
@ -873,6 +878,25 @@ fn last_day_of_year(year: i32) -> Result<NaiveDate, Box<dyn Error>> {
|
|||||||
|
|
||||||
// --- Generator Helper Functions ---
|
// --- Generator Helper Functions ---
|
||||||
|
|
||||||
|
fn get_first_date_helper(freq: DateFreq) -> fn(i32, u32) -> Result<NaiveDate, Box<dyn Error>> {
|
||||||
|
if matches!(
|
||||||
|
freq,
|
||||||
|
DateFreq::Daily | DateFreq::WeeklyMonday | DateFreq::WeeklyFriday
|
||||||
|
) {
|
||||||
|
panic!("Daily, WeeklyMonday, and WeeklyFriday frequencies are not supported here");
|
||||||
|
}
|
||||||
|
|
||||||
|
match freq {
|
||||||
|
DateFreq::MonthStart => first_day_of_month,
|
||||||
|
DateFreq::MonthEnd => last_day_of_month,
|
||||||
|
DateFreq::QuarterStart => first_day_of_quarter,
|
||||||
|
DateFreq::QuarterEnd => last_day_of_quarter,
|
||||||
|
DateFreq::YearStart => |year, _| first_day_of_year(year),
|
||||||
|
DateFreq::YearEnd => |year, _| last_day_of_year(year),
|
||||||
|
_ => unreachable!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/// Finds the *first* valid date according to the frequency,
|
/// Finds the *first* valid date according to the frequency,
|
||||||
/// starting the search *on or after* the given `start_date`.
|
/// starting the search *on or after* the given `start_date`.
|
||||||
fn find_first_date_on_or_after(
|
fn find_first_date_on_or_after(
|
||||||
@ -883,69 +907,42 @@ fn find_first_date_on_or_after(
|
|||||||
DateFreq::Daily => Ok(start_date), // The first daily date is the start date itself
|
DateFreq::Daily => Ok(start_date), // The first daily date is the start date itself
|
||||||
DateFreq::WeeklyMonday => move_to_day_of_week_on_or_after(start_date, Weekday::Mon),
|
DateFreq::WeeklyMonday => move_to_day_of_week_on_or_after(start_date, Weekday::Mon),
|
||||||
DateFreq::WeeklyFriday => move_to_day_of_week_on_or_after(start_date, Weekday::Fri),
|
DateFreq::WeeklyFriday => move_to_day_of_week_on_or_after(start_date, Weekday::Fri),
|
||||||
DateFreq::MonthStart => {
|
|
||||||
let mut candidate = first_day_of_month(start_date.year(), start_date.month())?;
|
DateFreq::MonthStart | DateFreq::MonthEnd => {
|
||||||
|
// let mut candidate = first_day_of_month(start_date.year(), start_date.month())?;
|
||||||
|
let get_cand_func = get_first_date_helper(freq);
|
||||||
|
let mut candidate = get_cand_func(start_date.year(), start_date.month())?;
|
||||||
if candidate < start_date {
|
if candidate < start_date {
|
||||||
let (next_y, next_m) = if start_date.month() == 12 {
|
let (next_y, next_m) = if start_date.month() == 12 {
|
||||||
(start_date.year().checked_add(1).ok_or("Year overflow")?, 1)
|
(start_date.year().checked_add(1).ok_or("Year overflow")?, 1)
|
||||||
} else {
|
} else {
|
||||||
(start_date.year(), start_date.month() + 1)
|
(start_date.year(), start_date.month() + 1)
|
||||||
};
|
};
|
||||||
candidate = first_day_of_month(next_y, next_m)?;
|
candidate = get_cand_func(next_y, next_m)?;
|
||||||
}
|
}
|
||||||
Ok(candidate)
|
Ok(candidate)
|
||||||
}
|
}
|
||||||
DateFreq::MonthEnd => {
|
DateFreq::QuarterStart | DateFreq::QuarterEnd => {
|
||||||
let mut candidate = last_day_of_month(start_date.year(), start_date.month())?;
|
|
||||||
if candidate < start_date {
|
|
||||||
let (next_y, next_m) = if start_date.month() == 12 {
|
|
||||||
(start_date.year().checked_add(1).ok_or("Year overflow")?, 1)
|
|
||||||
} else {
|
|
||||||
(start_date.year(), start_date.month() + 1)
|
|
||||||
};
|
|
||||||
candidate = last_day_of_month(next_y, next_m)?;
|
|
||||||
}
|
|
||||||
Ok(candidate)
|
|
||||||
}
|
|
||||||
DateFreq::QuarterStart => {
|
|
||||||
let current_q = month_to_quarter(start_date.month());
|
let current_q = month_to_quarter(start_date.month());
|
||||||
let mut candidate = first_day_of_quarter(start_date.year(), current_q)?;
|
let get_cand_func = get_first_date_helper(freq);
|
||||||
|
let mut candidate = get_cand_func(start_date.year(), current_q)?;
|
||||||
if candidate < start_date {
|
if candidate < start_date {
|
||||||
let (next_y, next_q) = if current_q == 4 {
|
let (next_y, next_q) = if current_q == 4 {
|
||||||
(start_date.year().checked_add(1).ok_or("Year overflow")?, 1)
|
(start_date.year().checked_add(1).ok_or("Year overflow")?, 1)
|
||||||
} else {
|
} else {
|
||||||
(start_date.year(), current_q + 1)
|
(start_date.year(), current_q + 1)
|
||||||
};
|
};
|
||||||
candidate = first_day_of_quarter(next_y, next_q)?;
|
candidate = get_cand_func(next_y, next_q)?;
|
||||||
}
|
}
|
||||||
Ok(candidate)
|
Ok(candidate)
|
||||||
}
|
}
|
||||||
DateFreq::QuarterEnd => {
|
|
||||||
let current_q = month_to_quarter(start_date.month());
|
DateFreq::YearStart | DateFreq::YearEnd => {
|
||||||
let mut candidate = last_day_of_quarter(start_date.year(), current_q)?;
|
let get_cand_func = get_first_date_helper(freq);
|
||||||
if candidate < start_date {
|
let mut candidate = get_cand_func(start_date.year(), 0)?;
|
||||||
let (next_y, next_q) = if current_q == 4 {
|
|
||||||
(start_date.year().checked_add(1).ok_or("Year overflow")?, 1)
|
|
||||||
} else {
|
|
||||||
(start_date.year(), current_q + 1)
|
|
||||||
};
|
|
||||||
candidate = last_day_of_quarter(next_y, next_q)?;
|
|
||||||
}
|
|
||||||
Ok(candidate)
|
|
||||||
}
|
|
||||||
DateFreq::YearStart => {
|
|
||||||
let mut candidate = first_day_of_year(start_date.year())?;
|
|
||||||
if candidate < start_date {
|
if candidate < start_date {
|
||||||
candidate =
|
candidate =
|
||||||
first_day_of_year(start_date.year().checked_add(1).ok_or("Year overflow")?)?;
|
get_cand_func(start_date.year().checked_add(1).ok_or("Year overflow")?, 0)?;
|
||||||
}
|
|
||||||
Ok(candidate)
|
|
||||||
}
|
|
||||||
DateFreq::YearEnd => {
|
|
||||||
let mut candidate = last_day_of_year(start_date.year())?;
|
|
||||||
if candidate < start_date {
|
|
||||||
candidate =
|
|
||||||
last_day_of_year(start_date.year().checked_add(1).ok_or("Year overflow")?)?;
|
|
||||||
}
|
}
|
||||||
Ok(candidate)
|
Ok(candidate)
|
||||||
}
|
}
|
||||||
@ -962,7 +959,8 @@ fn find_next_date(current_date: NaiveDate, freq: DateFreq) -> Result<NaiveDate,
|
|||||||
DateFreq::WeeklyMonday | DateFreq::WeeklyFriday => current_date
|
DateFreq::WeeklyMonday | DateFreq::WeeklyFriday => current_date
|
||||||
.checked_add_signed(Duration::days(7))
|
.checked_add_signed(Duration::days(7))
|
||||||
.ok_or_else(|| "Date overflow adding 7 days".into()),
|
.ok_or_else(|| "Date overflow adding 7 days".into()),
|
||||||
DateFreq::MonthStart => {
|
DateFreq::MonthStart | DateFreq::MonthEnd => {
|
||||||
|
let get_cand_func = get_first_date_helper(freq);
|
||||||
let (next_y, next_m) = if current_date.month() == 12 {
|
let (next_y, next_m) = if current_date.month() == 12 {
|
||||||
(
|
(
|
||||||
current_date.year().checked_add(1).ok_or("Year overflow")?,
|
current_date.year().checked_add(1).ok_or("Year overflow")?,
|
||||||
@ -971,21 +969,11 @@ fn find_next_date(current_date: NaiveDate, freq: DateFreq) -> Result<NaiveDate,
|
|||||||
} else {
|
} else {
|
||||||
(current_date.year(), current_date.month() + 1)
|
(current_date.year(), current_date.month() + 1)
|
||||||
};
|
};
|
||||||
first_day_of_month(next_y, next_m)
|
get_cand_func(next_y, next_m)
|
||||||
}
|
}
|
||||||
DateFreq::MonthEnd => {
|
DateFreq::QuarterStart | DateFreq::QuarterEnd => {
|
||||||
let (next_y, next_m) = if current_date.month() == 12 {
|
|
||||||
(
|
|
||||||
current_date.year().checked_add(1).ok_or("Year overflow")?,
|
|
||||||
1,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
(current_date.year(), current_date.month() + 1)
|
|
||||||
};
|
|
||||||
last_day_of_month(next_y, next_m)
|
|
||||||
}
|
|
||||||
DateFreq::QuarterStart => {
|
|
||||||
let current_q = month_to_quarter(current_date.month());
|
let current_q = month_to_quarter(current_date.month());
|
||||||
|
let get_cand_func = get_first_date_helper(freq);
|
||||||
let (next_y, next_q) = if current_q == 4 {
|
let (next_y, next_q) = if current_q == 4 {
|
||||||
(
|
(
|
||||||
current_date.year().checked_add(1).ok_or("Year overflow")?,
|
current_date.year().checked_add(1).ok_or("Year overflow")?,
|
||||||
@ -994,25 +982,14 @@ fn find_next_date(current_date: NaiveDate, freq: DateFreq) -> Result<NaiveDate,
|
|||||||
} else {
|
} else {
|
||||||
(current_date.year(), current_q + 1)
|
(current_date.year(), current_q + 1)
|
||||||
};
|
};
|
||||||
first_day_of_quarter(next_y, next_q)
|
get_cand_func(next_y, next_q)
|
||||||
}
|
}
|
||||||
DateFreq::QuarterEnd => {
|
DateFreq::YearStart | DateFreq::YearEnd => {
|
||||||
let current_q = month_to_quarter(current_date.month());
|
let get_cand_func = get_first_date_helper(freq);
|
||||||
let (next_y, next_q) = if current_q == 4 {
|
get_cand_func(
|
||||||
(
|
current_date.year().checked_add(1).ok_or("Year overflow")?,
|
||||||
current_date.year().checked_add(1).ok_or("Year overflow")?,
|
0,
|
||||||
1,
|
)
|
||||||
)
|
|
||||||
} else {
|
|
||||||
(current_date.year(), current_q + 1)
|
|
||||||
};
|
|
||||||
last_day_of_quarter(next_y, next_q)
|
|
||||||
}
|
|
||||||
DateFreq::YearStart => {
|
|
||||||
first_day_of_year(current_date.year().checked_add(1).ok_or("Year overflow")?)
|
|
||||||
}
|
|
||||||
DateFreq::YearEnd => {
|
|
||||||
last_day_of_year(current_date.year().checked_add(1).ok_or("Year overflow")?)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
6
src/utils/dateutils/mod.rs
Normal file
6
src/utils/dateutils/mod.rs
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
pub mod bdates;
|
||||||
|
pub use bdates::{BDateFreq, BDatesList, BDatesGenerator};
|
||||||
|
|
||||||
|
pub mod dates;
|
||||||
|
pub use dates::{DateFreq, DatesList, DatesGenerator};
|
||||||
|
|
@ -1,6 +1,3 @@
|
|||||||
pub mod bdates;
|
pub mod dateutils;
|
||||||
pub use bdates::{BDateFreq, BDatesList, BDatesGenerator};
|
pub use dateutils::{BDateFreq, BDatesGenerator, BDatesList};
|
||||||
|
pub use dateutils::{DateFreq, DatesGenerator, DatesList};
|
||||||
pub mod dates;
|
|
||||||
pub use dates::{DateFreq, DatesList, DatesGenerator};
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user