ci: 手动构建最新 main 并发布 GHCR 镜像 (#164) fix: align Bun lockfile with Next.js version feat: package Next.js standalone server for Docker ci: publish latest main to GHCR on manual dispatch
ci: 手动构建最新 main 并发布 GHCR 镜像 (#164)
fix: align Bun lockfile with Next.js version
feat: package Next.js standalone server for Docker
ci: publish latest main to GHCR on manual dispatch
一个追踪开源会议、竞赛及活动截止日期的网站,帮助开发者们及时了解最新的开源活动动态,不再错过为社区贡献、学习和交流的机会。
我们非常欢迎社区贡献!如果您发现有未收录的开源会议、竞赛及活动,或者信息有误,请通过提交 Pull Request 的方式来帮助我们更新。
所有活动数据都存储在 /data 目录下的 YAML 文件中。
/data
data/conferences.yml
data/competitions.yml
data/activities.yml
请在对应的 YAML 文件中,仿照以下格式添加新条目:
- title: 活动名称 (例如:开源之夏) description: 对活动的一句话描述(不超过 100 字) category: competition # 会议请使用 "conference",活动请使用 "activity" tags: - 标签1 - 标签2 events: - year: 2025 # 年份 id: ospp2024 # 全局唯一的ID link: https://summer-ospp.ac.cn # 链接 timeline: - deadline: '2024-06-04T18:00:00' # 关键日期 (ISO 8601 格式) comment: '项目申请书提交' # 日期说明 - deadline: '2024-09-30T24:00:00' comment: '结项提交' timezone: Asia/Shanghai # 所在时区 date: 2025 年 4 月 30 日 - 9 月 30 日 # 人类可读的日期范围 place: 线上 # 地点
注意事项:
category
conference
competition
activity
timeline.deadline
YYYY-MM-DDTHH:mm:ss
timezone
Asia/Shanghai
date
2025 年 4 月 30 日
2025 年 4 月 30 日 - 9 月 30 日
place
中国,上海
国家,城市
线上
Bun: 本项目使用 Bun 作为包管理器和运行时。
克隆项目
git clone https://github.com/hust-open-atom-club/open-source-deadlines.git cd open-source-deadlines
安装依赖
bun install
激活 Git Hook(此步骤会在安装依赖后自动执行)
bun run prepare
启动开发服务器
bun run dev
(可选)剪枝
bun run knip
现在,在浏览器中打开 http://localhost:3000 即可看到项目页面。
镜像使用 Next.js standalone 输出,以非 root 用户运行 Node.js 22,默认监听 0.0.0.0:3000,支持服务端 API、日历订阅和远程活动数据更新。
0.0.0.0:3000
本地构建和运行:
docker build -t open-source-deadlines . docker run --rm -p 3000:3000 open-source-deadlines
打开 http://localhost:3000。构建使用 packageManager 指定的 Bun 1.2.21 和 bun.lock,需要联网下载依赖和 Google Fonts。运行时可以设置以下环境变量:
packageManager
bun.lock
PORT
3000
HOSTNAME
0.0.0.0
DATA_REPO_BASE_URL
conferences.yml
competitions.yml
activities.yml
main/data
data/
例如,使用自己的公开活动数据源:
docker run --rm -p 3000:3000 \ -e DATA_REPO_BASE_URL=https://raw.githubusercontent.com/OWNER/REPO/main/data \ open-source-deadlines
.env* 文件不会进入构建上下文;请通过 docker run --env-file 或 -e 提供运行时 配置,不要把凭据写入镜像。修改远程数据无需重建镜像;本地回退数据随镜像版本固定。
.env*
docker run --env-file
-e
.github/workflows/publish-ghcr.yml
main
workflow_dispatch
ghcr.io/hust-open-atom-club/open-source-deadlines:latest
ghcr.io/hust-open-atom-club/open-source-deadlines:sha-<main 的完整 commit SHA>
镜像平台为 linux/amd64。工作流使用内置 GITHUB_TOKEN 和最小的 contents: read、packages: write 权限,无需添加 secret。发布任务串行执行, 源代码 commit 和镜像 digest 会写入运行摘要。
linux/amd64
GITHUB_TOKEN
contents: read
packages: write
首次发布受组织的 GitHub Packages 策略限制。新包默认可能是私有的;如果需要匿名 拉取,请在包设置中确认可见性。若同名包已经存在,请确认当前仓库具有该包的 Actions 写入权限。成功发布后运行:
docker run --rm -p 3000:3000 \ ghcr.io/hust-open-atom-club/open-source-deadlines:latest
需要固定部署版本时,请使用 sha-<完整 commit SHA> 标签,或运行摘要中的 digest。
sha-<完整 commit SHA>
一个开源活动、会议和竞赛的展示网站 | Deadlines of open source events, conferences, and competitions.
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
Open Source Deadlines | 开源活动倒计时
一个追踪开源会议、竞赛及活动截止日期的网站,帮助开发者们及时了解最新的开源活动动态,不再错过为社区贡献、学习和交流的机会。
如何添加活动
我们非常欢迎社区贡献!如果您发现有未收录的开源会议、竞赛及活动,或者信息有误,请通过提交 Pull Request 的方式来帮助我们更新。
所有活动数据都存储在
/data目录下的 YAML 文件中。data/conferences.ymldata/competitions.ymldata/activities.yml数据结构
请在对应的 YAML 文件中,仿照以下格式添加新条目:
注意事项:
category: 必须是conference、competition或activitytimeline.deadline: 请使用 ISO 8601 标准格式 -YYYY-MM-DDTHH:mm:sstimezone: 请使用标准的 IANA 时区名称(例如Asia/Shanghai),否则会影响时区转换date: 请使用人类可读的单个日期或日期范围,如2025 年 4 月 30 日或2025 年 4 月 30 日 - 9 月 30 日place: 活动地址,如中国,上海(国家,城市);如果是线上活动,直接写线上开发指南
环境准备
Bun: 本项目使用 Bun 作为包管理器和运行时。
本地启动
克隆项目
安装依赖
激活 Git Hook(此步骤会在安装依赖后自动执行)
启动开发服务器
(可选)剪枝
现在,在浏览器中打开 http://localhost:3000 即可看到项目页面。
Docker 部署
镜像使用 Next.js standalone 输出,以非 root 用户运行 Node.js 22,默认监听
0.0.0.0:3000,支持服务端 API、日历订阅和远程活动数据更新。本地构建和运行:
打开 http://localhost:3000。构建使用
packageManager指定的 Bun 1.2.21 和bun.lock,需要联网下载依赖和 Google Fonts。运行时可以设置以下环境变量:PORT:容器内监听端口,默认3000;修改时请同步调整端口映射。HOSTNAME:监听地址,默认0.0.0.0。DATA_REPO_BASE_URL:包含conferences.yml、competitions.yml和activities.yml的远程目录 URL。默认读取本仓库main/data,每 60 秒重新验证 缓存;请求失败时回退到镜像内随源码一起打包的data/文件。例如,使用自己的公开活动数据源:
.env*文件不会进入构建上下文;请通过docker run --env-file或-e提供运行时 配置,不要把凭据写入镜像。修改远程数据无需重建镜像;本地回退数据随镜像版本固定。手动发布 GHCR 镜像
.github/workflows/publish-ghcr.yml合并到默认分支main。 GitHub Actions 的手动运行入口需要工作流已存在于默认分支;构建也要求 Docker 文件已经合并到main。workflow_dispatch触发器,不会因推送、PR 或定时任务而自动发布。main,并发布:ghcr.io/hust-open-atom-club/open-source-deadlines:latestghcr.io/hust-open-atom-club/open-source-deadlines:sha-<main 的完整 commit SHA>镜像平台为
linux/amd64。工作流使用内置GITHUB_TOKEN和最小的contents: read、packages: write权限,无需添加 secret。发布任务串行执行, 源代码 commit 和镜像 digest 会写入运行摘要。首次发布受组织的 GitHub Packages 策略限制。新包默认可能是私有的;如果需要匿名 拉取,请在包设置中确认可见性。若同名包已经存在,请确认当前仓库具有该包的 Actions 写入权限。成功发布后运行:
需要固定部署版本时,请使用
sha-<完整 commit SHA>标签,或运行摘要中的 digest。技术栈