first commit
This commit is contained in:
commit
8300f4e85e
|
|
@ -0,0 +1,63 @@
|
||||||
|
###############################################################################
|
||||||
|
# Set default behavior to automatically normalize line endings.
|
||||||
|
###############################################################################
|
||||||
|
* text=auto
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set default behavior for command prompt diff.
|
||||||
|
#
|
||||||
|
# This is need for earlier builds of msysgit that does not have it on by
|
||||||
|
# default for csharp files.
|
||||||
|
# Note: This is only used by command line
|
||||||
|
###############################################################################
|
||||||
|
#*.cs diff=csharp
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# Set the merge driver for project and solution files
|
||||||
|
#
|
||||||
|
# Merging from the command prompt will add diff markers to the files if there
|
||||||
|
# are conflicts (Merging from VS is not affected by the settings below, in VS
|
||||||
|
# the diff markers are never inserted). Diff markers may cause the following
|
||||||
|
# file extensions to fail to load in VS. An alternative would be to treat
|
||||||
|
# these files as binary and thus will always conflict and require user
|
||||||
|
# intervention with every merge. To do so, just uncomment the entries below
|
||||||
|
###############################################################################
|
||||||
|
#*.sln merge=binary
|
||||||
|
#*.csproj merge=binary
|
||||||
|
#*.vbproj merge=binary
|
||||||
|
#*.vcxproj merge=binary
|
||||||
|
#*.vcproj merge=binary
|
||||||
|
#*.dbproj merge=binary
|
||||||
|
#*.fsproj merge=binary
|
||||||
|
#*.lsproj merge=binary
|
||||||
|
#*.wixproj merge=binary
|
||||||
|
#*.modelproj merge=binary
|
||||||
|
#*.sqlproj merge=binary
|
||||||
|
#*.wwaproj merge=binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# behavior for image files
|
||||||
|
#
|
||||||
|
# image files are treated as binary by default.
|
||||||
|
###############################################################################
|
||||||
|
#*.jpg binary
|
||||||
|
#*.png binary
|
||||||
|
#*.gif binary
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
# diff behavior for common document formats
|
||||||
|
#
|
||||||
|
# Convert binary document formats to text before diffing them. This feature
|
||||||
|
# is only available from the command line. Turn it on by uncommenting the
|
||||||
|
# entries below.
|
||||||
|
###############################################################################
|
||||||
|
#*.doc diff=astextplain
|
||||||
|
#*.DOC diff=astextplain
|
||||||
|
#*.docx diff=astextplain
|
||||||
|
#*.DOCX diff=astextplain
|
||||||
|
#*.dot diff=astextplain
|
||||||
|
#*.DOT diff=astextplain
|
||||||
|
#*.pdf diff=astextplain
|
||||||
|
#*.PDF diff=astextplain
|
||||||
|
#*.rtf diff=astextplain
|
||||||
|
#*.RTF diff=astextplain
|
||||||
|
|
@ -0,0 +1,33 @@
|
||||||
|
name: 自动编译
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- "config.js"
|
||||||
|
- "restore.js"
|
||||||
|
- "save.js"
|
||||||
|
- ".gitea/workflows/build.yaml"
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
job1:
|
||||||
|
name: 编译发布
|
||||||
|
runs-on: linux
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: 下载源码
|
||||||
|
uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: 编译
|
||||||
|
run: |
|
||||||
|
npm config set registry https://registry.npmmirror.com
|
||||||
|
npm install
|
||||||
|
npm run build
|
||||||
|
|
||||||
|
- name: 提交更改
|
||||||
|
run: |
|
||||||
|
git config --global user.email "qxa@qwit.top"
|
||||||
|
git config --global user.name "qxa"
|
||||||
|
|
||||||
|
git add .
|
||||||
|
git commit -a -m "自动编译"
|
||||||
|
git push
|
||||||
|
|
@ -0,0 +1,8 @@
|
||||||
|
################################################################################
|
||||||
|
# 此 .gitignore 文件已由 Microsoft(R) Visual Studio 自动创建。
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
/.vs
|
||||||
|
/.vscode
|
||||||
|
/node_modules
|
||||||
|
/package-lock.json
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
name: cahce
|
||||||
|
description: 使用缓存
|
||||||
|
author: qxa
|
||||||
|
|
||||||
|
inputs:
|
||||||
|
key:
|
||||||
|
description: 缓存压缩标识
|
||||||
|
required: true
|
||||||
|
default: ${{ gitea.repository }}
|
||||||
|
mount:
|
||||||
|
description: 挂载缓存目录
|
||||||
|
required: true
|
||||||
|
hash_files:
|
||||||
|
description: 缓存命中文件
|
||||||
|
required: false
|
||||||
|
|
||||||
|
outputs:
|
||||||
|
cache_init:
|
||||||
|
description: 是否缓存命中
|
||||||
|
|
||||||
|
runs:
|
||||||
|
using: node16
|
||||||
|
main: dist/restore/index.js
|
||||||
|
post: dist/save/index.js
|
||||||
|
post-if: "success()"
|
||||||
|
|
@ -0,0 +1,67 @@
|
||||||
|
import { getInput, getMultilineInput, info } from '@actions/core'
|
||||||
|
|
||||||
|
const crypto = require('crypto')
|
||||||
|
const fs = require('fs')
|
||||||
|
|
||||||
|
function getFileHash256(fileName) {
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
const hash = crypto.createHash('sha256')
|
||||||
|
|
||||||
|
var reader = fs.createReadStream(fileName)
|
||||||
|
|
||||||
|
reader.pipe(hash)
|
||||||
|
|
||||||
|
reader.on('end', function () {
|
||||||
|
resolve(hash.digest('hex'))
|
||||||
|
})
|
||||||
|
|
||||||
|
reader.on('error', function (error) {
|
||||||
|
reject(error)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
export function isExactKeyMatch(key, cacheKey) {
|
||||||
|
return !!(
|
||||||
|
cacheKey &&
|
||||||
|
cacheKey.localeCompare(key, undefined, {
|
||||||
|
sensitivity: "accent"
|
||||||
|
}) === 0
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
|
export const mounts = getMultilineInput('mount', { require: true, trimWhitespace: true })
|
||||||
|
|
||||||
|
export const { primaryKey, restoreKeys } = await async function () {
|
||||||
|
|
||||||
|
const key = getInput('key', { required: true, trimWhitespace: true }).replace('/', '-')
|
||||||
|
|
||||||
|
const os = process.env.RUNNER_OS
|
||||||
|
|
||||||
|
let primaryKey, restoreKeys = []
|
||||||
|
|
||||||
|
const hashFiles = getMultilineInput('hash_files', { trimWhitespace: true })
|
||||||
|
|
||||||
|
info('hashFiles=' + hashFiles.join(','))
|
||||||
|
|
||||||
|
const tasks = hashFiles.filter(s => fs.existsSync(s))
|
||||||
|
.map(item => getFileHash256(item))
|
||||||
|
|
||||||
|
const hash256 = await Promise.all(tasks).then(res => {
|
||||||
|
return crypto.createHash('sha256')
|
||||||
|
.update(res.join(' ') + '|cache')
|
||||||
|
.digest('hex')
|
||||||
|
})
|
||||||
|
|
||||||
|
primaryKey = `${os}-${key}-${hash256}`
|
||||||
|
restoreKeys = [
|
||||||
|
`${os}-${key}-`,
|
||||||
|
]
|
||||||
|
|
||||||
|
return {
|
||||||
|
primaryKey,
|
||||||
|
restoreKeys,
|
||||||
|
}
|
||||||
|
}()
|
||||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
|
@ -0,0 +1,14 @@
|
||||||
|
{
|
||||||
|
"scripts": {
|
||||||
|
"build": "ncc build restore.js -o dist/restore & ncc build save.js -o dist/save"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"@actions/cache": "^3.2.3",
|
||||||
|
"@actions/core": "^1.10.0",
|
||||||
|
"crypto": "^1.0.1",
|
||||||
|
"fs": "0.0.1-security"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@vercel/ncc": "^0.34.0"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
import { mounts, primaryKey, restoreKeys, isExactKeyMatch } from './config'
|
||||||
|
import { setOutput, info, error, saveState } from '@actions/core'
|
||||||
|
import * as cache from '@actions/cache'
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
if (!cache.isFeatureAvailable()) {
|
||||||
|
error('缓存未启用')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const cacheKey = await cache.restoreCache(
|
||||||
|
mounts,
|
||||||
|
primaryKey,
|
||||||
|
restoreKeys,
|
||||||
|
{ lookupOnly: false },
|
||||||
|
false
|
||||||
|
)
|
||||||
|
if (!cacheKey) {
|
||||||
|
info(
|
||||||
|
`Cache not found for input keys: ${[
|
||||||
|
primaryKey,
|
||||||
|
...restoreKeys,
|
||||||
|
].join(", ")}`
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
saveState('cacheKey', cacheKey)
|
||||||
|
|
||||||
|
setOutput('cache_init', isExactKeyMatch(primaryKey, cacheKey).toString())
|
||||||
|
}
|
||||||
|
|
||||||
|
await run()
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
import { mounts, primaryKey, isExactKeyMatch } from './config'
|
||||||
|
import { info, error, getState } from '@actions/core'
|
||||||
|
import * as cache from "@actions/cache"
|
||||||
|
|
||||||
|
async function run() {
|
||||||
|
if (!cache.isFeatureAvailable()) {
|
||||||
|
error('缓存未启用')
|
||||||
|
return
|
||||||
|
}
|
||||||
|
const restoredKey = getState('cacheKey')
|
||||||
|
if (isExactKeyMatch(primaryKey, restoredKey)) {
|
||||||
|
info(
|
||||||
|
`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`
|
||||||
|
)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
const cacheId = await cache.saveCache(
|
||||||
|
mounts,
|
||||||
|
primaryKey,
|
||||||
|
{ uploadChunkSize: 1024 * 1024 * 10 },
|
||||||
|
false
|
||||||
|
)
|
||||||
|
if (cacheId != -1) {
|
||||||
|
info(`Cache saved with key: ${primaryKey}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
await run()
|
||||||
Loading…
Reference in New Issue