Skip to content

Commit

Permalink
ci: Force the same version bumps for rs and js packages (#2130)
Browse files Browse the repository at this point in the history
  • Loading branch information
FabianLars authored Dec 5, 2024
1 parent a7e58f5 commit fe610d6
Show file tree
Hide file tree
Showing 4 changed files with 136 additions and 2 deletions.
6 changes: 4 additions & 2 deletions .changes/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,8 @@
},
"dialog-js": {
"path": "./plugins/dialog",
"manager": "javascript"
"manager": "javascript",
"dependencies": ["fs-js"]
},
"geolocation": {
"path": "./plugins/geolocation",
Expand Down Expand Up @@ -211,7 +212,8 @@
},
"http-js": {
"path": "./plugins/http",
"manager": "javascript"
"manager": "javascript",
"dependencies": ["fs-js"]
},
"localhost": {
"path": "./plugins/localhost",
Expand Down
2 changes: 2 additions & 0 deletions .changes/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ As you create PRs and make changes that require a version bump, please add a new

When you select the version bump required, you do _not_ need to consider dependencies. Only note the package with the actual change, and any packages that depend on that package will be bumped automatically in the process.

**Note, that in this repository, even if only the Rust code or only the JavaScript code of a plugin changed, both packages need to be bumped with the same increment!**

Use the following format:

```md
Expand Down
44 changes: 44 additions & 0 deletions .github/workflows/check-change-files.yml
Original file line number Diff line number Diff line change
@@ -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' }}
86 changes: 86 additions & 0 deletions .scripts/ci/check-change-files.js
Original file line number Diff line number Diff line change
@@ -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)
}

0 comments on commit fe610d6

Please sign in to comment.