v0.1.1
Some checks failed
Usage Examples / Basic Usage Example (push) Failing after 3s
Usage Examples / Different Algorithms Example (push) Successful in 11s
Usage Examples / Multiple Files Example (push) Successful in 13s
Usage Examples / Pattern Matching Example (push) Successful in 12s
Usage Examples / Error Handling Example (push) Successful in 10s
文件哈希 GitHub Action
一个轻量级的 GitHub Action,用于计算指定文件或文件组的哈希值。非常适合需要文件完整性验证、变更检测或文件指纹识别的 CI/CD 工作流。
使用方法
基本示例
name: Calculate File Hashes
on: [push]
jobs:
hash:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Calculate hash for source files
uses: actions/files-hash@v0.1
id: hash-step
with:
files: |
src/**/*.js
package.json
algorithm: sha256
- name: Use the hash
run: |
echo "Hash: ${{ steps.hash-step.outputs.hash }}"
echo "Files processed: ${{ steps.hash-step.outputs.file-count }}"
高级示例
多种文件模式
- name: Hash multiple file types
uses: actions/files-hash@v0.1
with:
files: |
src/**/*.js
src/**/*.ts
*.json
!node_modules/**
algorithm: sha512
不同的哈希算法
- name: MD5 hash for quick comparison
uses: actions/files-hash@v0.1
with:
files: dist/*
algorithm: md5
条件处理
- name: Hash only if files exist
uses: actions/files-hash@v0.1
with:
files: |
build/**/*
dist/**/*
algorithm: sha256
continue-on-error: true
输入参数
| 输入参数 | 描述 | 必需 | 默认值 |
|---|---|---|---|
files |
文件路径或 glob 模式(每行一个) | ✅ 是 | - |
algorithm |
哈希算法:md5、sha1、sha256、sha512 |
❌ 否 | sha256 |
文件模式
files 输入支持多种模式:
- 单个文件:
package.json - 多个文件:
files: | file1.txt file2.txt - Glob 模式:
src/**/*.js(src 目录及子目录中的所有 JS 文件) - 通配符:
*.json(当前目录中的所有 JSON 文件) - 目录:
src/(递归处理 src 目录中的所有文件)
输出结果
| 输出 | 描述 | 类型 |
|---|---|---|
hash |
所有处理文件的组合哈希值 | string |
file-count |
成功处理的文件数量 | number |
工作原理
- 文件发现: 解析输入模式并查找匹配的文件
- 验证: 检查文件存在性和可读性
- 哈希计算: 使用指定算法计算各个文件的哈希值
- 组合: 从所有单个文件哈希值创建组合哈希值
- 输出: 设置 GitHub Actions 输出供后续步骤使用
组合哈希值的计算方式:
- 按字母顺序对所有文件路径进行排序(确保一致性)
- 计算每个文件的哈希值
- 从所有单个哈希值的连接创建新的哈希值
这确保了相同的文件集始终产生相同的组合哈希值,无论它们的处理顺序如何。
支持的算法
| 算法 | 输出长度 | 使用场景 |
|---|---|---|
md5 |
32 字符 | 快速比较、传统系统 |
sha1 |
40 字符 | Git 兼容性、通用用途 |
sha256 |
64 字符 | 推荐 - 安全性和性能的良好平衡 |
sha512 |
128 字符 | 最高安全性、加密应用 |
错误处理
该 Action 优雅地处理各种错误场景:
- 文件缺失: 直接抛出错误
- 权限错误: 提供包含文件路径的清晰错误信息
- 无效算法: 列出支持的算法
- 空文件集: 失败并提供描述性消息
性能
- 并发处理: 同时处理多个文件
- 流式处理: 高效处理大文件,无需加载到内存中
- 内存管理: 针对大文件集和大文件进行优化
- 进度日志: 为长时间运行的操作提供清晰的进度指示器
实际项目示例
缓存键生成
- name: Generate cache key
uses: actions/files-hash@v0.1
id: cache-key
with:
files: |
package-lock.json
yarn.lock
pnpm-lock.yaml
algorithm: sha256
- name: Cache dependencies
uses: actions/cache@v3
with:
path: node_modules
key: deps-${{ steps.cache-key.outputs.hash }}
构建产物验证
- name: Build application
run: npm run build
- name: Calculate build hash
uses: actions/files-hash@v0.1
id: build-hash
with:
files: dist/**/*
algorithm: sha256
- name: Upload artifacts with hash
uses: actions/upload-artifact@v3
with:
name: build-${{ steps.build-hash.outputs.hash }}
path: dist/
配置变更检测
- name: Check config changes
uses: actions/files-hash@v0.1
id: config-hash
with:
algorithm: sha1
files: |
.github/workflows/**
config/**
*.config.js
- name: Notify on config changes
if: steps.config-hash.outputs.hash != env.LAST_CONFIG_HASH
run: echo "Configuration files have changed!"
Description
Languages
JavaScript
100%