ci: Force the same version bumps for rs and js packages (#2130)
parent
a7e58f5654
commit
fe610d6759
@ -0,0 +1,44 @@
|
|||||||
|
# Copyright 2019-2023 Tauri Programme within The Commons Conservancy
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
# SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
name: check change files
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
paths:
|
||||||
|
- '.changes/*.md'
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
check:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
|
||||||
|
- name: check change files end with .md
|
||||||
|
run: |
|
||||||
|
for file in .changes/*
|
||||||
|
do
|
||||||
|
if [[ ! "$file" =~ \.(md|json)$ ]]; then
|
||||||
|
echo ".changes directory should only contain files that end with .md"
|
||||||
|
echo "found an invalid file in .changes directory:"
|
||||||
|
echo "$file"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
- uses: dorny/paths-filter@v3
|
||||||
|
id: filter
|
||||||
|
with:
|
||||||
|
list-files: shell
|
||||||
|
filters: |
|
||||||
|
changes:
|
||||||
|
- added|modified: '.changes/*.md'
|
||||||
|
|
||||||
|
- name: check
|
||||||
|
run: node ./.scripts/ci/check-change-files.js ${{ steps.filter.outputs.changes_files }}
|
||||||
|
if: ${{ steps.filter.outputs.changes == 'true' }}
|
@ -0,0 +1,86 @@
|
|||||||
|
#!/usr/bin/env node
|
||||||
|
|
||||||
|
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
|
||||||
|
// SPDX-License-Identifier: Apache-2.0
|
||||||
|
// SPDX-License-Identifier: MIT
|
||||||
|
|
||||||
|
import { readFileSync, readdirSync } from 'fs'
|
||||||
|
import { join } from 'path'
|
||||||
|
|
||||||
|
/* const ignorePackages = [
|
||||||
|
'api-example',
|
||||||
|
'api-example-js',
|
||||||
|
'deep-link-example',
|
||||||
|
'deep-link-example-js'
|
||||||
|
] */
|
||||||
|
|
||||||
|
const rsOnly = ['localhost', 'persisted-scope']
|
||||||
|
|
||||||
|
function checkChangeFiles(changeFiles) {
|
||||||
|
let code = 0
|
||||||
|
|
||||||
|
for (const file of changeFiles) {
|
||||||
|
const content = readFileSync(file, 'utf8')
|
||||||
|
const [frontMatter] = /^---[\s\S.]*---\n/i.exec(content)
|
||||||
|
const packages = frontMatter
|
||||||
|
.split('\n')
|
||||||
|
.filter((l) => !(l === '---' || !l))
|
||||||
|
.map((l) => l.replace(/('|")/g, '').split(':'))
|
||||||
|
|
||||||
|
const rsPackages = Object.fromEntries(
|
||||||
|
packages
|
||||||
|
.filter((v) => !v[0].endsWith('-js'))
|
||||||
|
.map((v) => [v[0], v[1].trim()])
|
||||||
|
)
|
||||||
|
const jsPackages = Object.fromEntries(
|
||||||
|
packages
|
||||||
|
.filter((v) => v[0].endsWith('-js'))
|
||||||
|
.map((v) => [v[0].slice(0, -3), v[1].trim()])
|
||||||
|
)
|
||||||
|
|
||||||
|
for (const pkg in rsPackages) {
|
||||||
|
if (rsOnly.includes(pkg)) continue
|
||||||
|
|
||||||
|
if (!jsPackages[pkg]) {
|
||||||
|
console.error(
|
||||||
|
`Missing "${rsPackages[pkg]}" bump for JS package "${pkg}-js" in ${file}.`
|
||||||
|
)
|
||||||
|
code = 1
|
||||||
|
} else if (rsPackages[pkg] != jsPackages[pkg]) {
|
||||||
|
console.error(
|
||||||
|
`"${pkg}" and "${pkg}-js" have different version bumps in ${file}.`
|
||||||
|
)
|
||||||
|
code = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const pkg in jsPackages) {
|
||||||
|
if (!rsPackages[pkg]) {
|
||||||
|
console.error(
|
||||||
|
`Missing "${jsPackages[pkg]}" bump for Rust package "${pkg}" in ${file}.`
|
||||||
|
)
|
||||||
|
code = 1
|
||||||
|
} else if (rsPackages[pkg] != jsPackages[pkg]) {
|
||||||
|
console.error(
|
||||||
|
`"${pkg}" and "${pkg}-js" have different version bumps in ${file}.`
|
||||||
|
)
|
||||||
|
code = 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
process.exit(code)
|
||||||
|
}
|
||||||
|
|
||||||
|
const [_bin, _script, ...files] = process.argv
|
||||||
|
|
||||||
|
if (files.length > 0) {
|
||||||
|
checkChangeFiles(
|
||||||
|
files.filter((f) => f.toLowerCase() !== '.changes/readme.md')
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
const changeFiles = readdirSync('.changes')
|
||||||
|
.filter((f) => f.endsWith('.md') && f.toLowerCase() !== 'readme.md')
|
||||||
|
.map((p) => join('.changes', p))
|
||||||
|
checkChangeFiles(changeFiles)
|
||||||
|
}
|
Loading…
Reference in new issue