feat: Update Dockerfile and scripts for improved build process and cron job functionality

This commit is contained in:
imnyang 2025-05-20 06:09:16 +09:00
commit ef65994a82
5 changed files with 115 additions and 58 deletions

24
.gitignore vendored
View file

@ -1 +1,25 @@
.env .env
# General
.DS_Store
.AppleDouble
.LSOverride
Icon[]
# Thumbnails
._*
# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent
# Directories potentially created on remote AFP share
.AppleDB
.AppleDesktop
Network Trash Folder
Temporary Items
.apdisk

View file

@ -1,12 +1,6 @@
FROM oven/bun:alpine FROM oven/bun:alpine as build
LABEL maintainer="@imnya" LABEL maintainer="@imnya"
# Set timezone to Asia/Seoul
RUN apk add --no-cache tzdata \
&& cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime \
&& echo "Asia/Seoul" > /etc/timezone \
&& apk del tzdata
# Set the working directory # Set the working directory
COPY app /code/app COPY app /code/app
COPY .env /code/app/.env COPY .env /code/app/.env
@ -19,11 +13,38 @@ RUN mkdir -p /code/app/temp
# Install dependencies # Install dependencies
RUN bun install RUN bun install
# Build the project
RUN bun build index.ts --compile --minify --outfile ./run
FROM oven/bun:alpine as runner
LABEL maintainer="@imnya"
# Set the working directory
WORKDIR /code
RUN mkdir -p /code/app
# Copy the built files from the build stage
COPY --from=build /code/app/run /code/app/run
COPY --from=build /code/app/template /code/app/template
COPY --from=build /code/app/.env /code/app/.env
COPY --from=build /code/app/cron /code/app/cron
COPY --from=build /code/app/run.sh /code/app/run.sh
RUN mkdir -p /code/app/temp
# Set timezone to Asia/Seoul
RUN apk add --no-cache tzdata \
&& cp /usr/share/zoneinfo/Asia/Seoul /etc/localtime \
&& echo "Asia/Seoul" > /etc/timezone \
&& apk del tzdata
# Cron job # Cron job
RUN apk add --no-cache curl RUN apk add --no-cache curl
RUN curl -Lo /code/app/supercronic https://github.com/aptible/supercronic/releases/latest/download/supercronic-linux-amd64 \ RUN curl -Lo /code/app/supercronic https://github.com/aptible/supercronic/releases/latest/download/supercronic-linux-amd64 \
&& chmod +x /code/app/supercronic && chmod +x /code/app/supercronic
RUN curl -o /code/app/temp/vts.xlsx https://f.imnya.ng/.today.isangjeong/vts.xlsx
COPY cron /code/app/cron COPY cron /code/app/cron
RUN chmod +x /code/app/cron RUN chmod +x /code/app/cron

View file

@ -1,50 +1,55 @@
import { CreateImage } from "./lib/image"; import { CreateImage } from "./lib/image";
import { Login, Upload } from "./lib/instagram"; import { Login, Upload } from "./lib/instagram";
console.time("🎉 | Done") console.time("🎉 | Done");
console.time("🔓 | Instagram login"); async function main() {
console.time("🔓 | Instagram login");
await Login() try {
.then((data) => { const data = await Login();
console.log("✨ | Instagram login successful"); console.log("✨ | Instagram login successful");
console.log(`🤔 | Login as ${data.currentUser.full_name}`); console.log(`🤔 | Login as ${data.currentUser.full_name}`);
}) } catch (error) {
.catch((error) => {
console.error("❌ | Instagram login failed:", error); console.error("❌ | Instagram login failed:", error);
}) } finally {
.finally(() => {
console.timeEnd("🔓 | Instagram login"); console.timeEnd("🔓 | Instagram login");
}); }
let YYMMDD = "";
let YYMMDD = ""; // 실행할 때 --today 옵션을 주면 오늘 날짜로 바뀜
const args = process.argv.slice(2);
// 실행할 때 --today 옵션을 주면 오늘 날짜로 바뀜 if (args.includes("--today")) {
const args = process.argv.slice(2);
if (args.includes("--today")) {
console.log("📅 | --today option detected, using today's date"); console.log("📅 | --today option detected, using today's date");
YYMMDD = new Date().toISOString().slice(0, 10).replace(/-/g, "").toString(); YYMMDD = new Date().toISOString().slice(0, 10).replace(/-/g, "").toString();
console.log("📅 | Using today's date:", YYMMDD); console.log("📅 | Using today's date:", YYMMDD);
} }
// Tomorrow is 1st of the month // Tomorrow is 1st of the month
const tomorrow = new Date(); const tomorrow = new Date();
tomorrow.setDate(tomorrow.getDate() + 1); tomorrow.setDate(tomorrow.getDate() + 1);
YYMMDD = tomorrow.toISOString().slice(0, 10).replace(/-/g, "").toString(); YYMMDD = tomorrow.toISOString().slice(0, 10).replace(/-/g, "").toString();
console.log("📅 | date:", YYMMDD); console.log("📅 | date:", YYMMDD);
console.log(tomorrow.getDate()); console.log(tomorrow.getDate());
if (tomorrow.getDate() === 1) { if (tomorrow.getDate() === 1) {
console.log("📅 | Tomorrow is the 1st of the month, fetching schedule..."); console.log("📅 | Tomorrow is the 1st of the month, fetching schedule...");
console.time("📅 | Create Post Schedule"); console.time("📅 | Create Post Schedule");
await CreateImage.PostSchedule(); await CreateImage.PostSchedule();
console.timeEnd("📅 | Create Post Schedule"); console.timeEnd("📅 | Create Post Schedule");
console.time("📤 | Upload Post Schedule"); console.time("📤 | Upload Post Schedule");
await Upload.Post(`./temp/schedule-${new Date().getFullYear()}-${new Date().getMonth() + 1}.png`, `#인천상정중학교 #상정중학교 #학사일정 \n${new Date().getFullYear()}년도 ${new Date().getMonth() + 1}월 학사 일정`); await Upload.Post(
} `./temp/schedule-${new Date().getFullYear()}-${
try { new Date().getMonth() + 1
}.png`,
`#인천상정중학교 #상정중학교 #학사일정 \n${new Date().getFullYear()}년도 ${
new Date().getMonth() + 1
} `
);
}
try {
console.time("📷 | Create Post Image"); console.time("📷 | Create Post Image");
await CreateImage.PostMeal(YYMMDD); await CreateImage.PostMeal(YYMMDD);
console.timeEnd("📷 | Create Post Image"); console.timeEnd("📷 | Create Post Image");
@ -54,14 +59,20 @@ try {
console.timeEnd("📱 | Create Story Image"); console.timeEnd("📱 | Create Story Image");
console.time("📤 | Upload Post"); console.time("📤 | Upload Post");
await Upload.Post(`./temp/${YYMMDD}.png`, `#인천상정중학교 #상정중학교 #급식 \n${YYMMDD}일자 급식`); await Upload.Post(
`./temp/${YYMMDD}.png`,
`#인천상정중학교 #상정중학교 #급식 \n${YYMMDD}일자 급식`
);
console.timeEnd("📤 | Upload Post"); console.timeEnd("📤 | Upload Post");
console.time("📤 | Upload Story"); console.time("📤 | Upload Story");
await Upload.Story(`./temp/${YYMMDD}-story.png`, YYMMDD); await Upload.Story(`./temp/${YYMMDD}-story.png`, YYMMDD);
console.timeEnd("📤 | Upload Story"); console.timeEnd("📤 | Upload Story");
} catch (error) { } catch (error) {
console.error("❌ | Error during image creation or upload:", error); console.error("❌ | Error during image creation or upload:", error);
} finally { } finally {
console.timeEnd("🎉 | Done"); console.timeEnd("🎉 | Done");
}
} }
main();

View file

@ -1,3 +1,3 @@
cd /code/app cd /code/app
bun ./index.ts ./run

1
cron
View file

@ -1 +1,2 @@
0 22 * * * /code/app/run.sh >> /code/app/temp/run-$(date +%Y%m%d-%H%M%S).log 2>&1 0 22 * * * /code/app/run.sh >> /code/app/temp/run-$(date +%Y%m%d-%H%M%S).log 2>&1
0 23 * * 0 curl -o /code/app/temp/vts.xlsx https://f.imnya.ng/.today.isangjeong/vts.xlsx