fork: drop upstream's CI workflows
Gitea runs .github/workflows alongside .gitea/workflows, so pushing this fork started firing BloopAI's pipelines on our runner. Three of them trigger on push -- test.yml, remote-deploy-dev.yml and relay-deploy-dev.yml -- and the deploy pair aims at BloopAI's own infrastructure. They fail on missing secrets rather than doing anything, but a fork should not be attempting to deploy to the infrastructure of the project it forked from, and the noise buries our own build. The prod deploy and release workflows are workflow_dispatch or repository_dispatch only, so they were not firing, but they are equally meaningless here and go with the rest. .gitea/workflows/container.yml is now the only CI in this repo. Anything worth salvaging -- test.yml especially, once it is pointed at our own runner -- is recoverable from history.
This commit is contained in:
1166
.github/workflows/pre-release.yml
vendored
1166
.github/workflows/pre-release.yml
vendored
File diff suppressed because it is too large
Load Diff
172
.github/workflows/publish.yml
vendored
172
.github/workflows/publish.yml
vendored
@@ -1,172 +0,0 @@
|
|||||||
name: Publish to npm
|
|
||||||
|
|
||||||
on:
|
|
||||||
release:
|
|
||||||
types: [released]
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
tag_name:
|
|
||||||
description: "Release tag (e.g., v1.2.3)"
|
|
||||||
required: true
|
|
||||||
release_id:
|
|
||||||
description: "GitHub release ID"
|
|
||||||
required: true
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: publish
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
packages: write
|
|
||||||
id-token: write # Required for OIDC trusted publishing
|
|
||||||
|
|
||||||
env:
|
|
||||||
# Node 22.22.2 regresses `npm install -g npm@...` with
|
|
||||||
# `Cannot find module 'promise-retry'`. Pin a known-good patch until the
|
|
||||||
# upstream Node/npm regression is resolved.
|
|
||||||
NODE_VERSION: 22.22.1
|
|
||||||
PNPM_VERSION: 10.13.1
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
publish:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
# Only run for main app releases (not remote-v* tags) that were converted from pre-release
|
|
||||||
if: github.event.release.prerelease == false && !startsWith(github.event.release.tag_name, 'remote-')
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
ref: ${{ github.event.release.tag_name || inputs.tag_name }}
|
|
||||||
|
|
||||||
- name: Setup Node
|
|
||||||
uses: ./.github/actions/setup-node
|
|
||||||
|
|
||||||
- name: Upgrade npm for OIDC support
|
|
||||||
run: npm install -g npm@11.12.0
|
|
||||||
|
|
||||||
- name: Download release assets
|
|
||||||
uses: actions/github-script@v8
|
|
||||||
env:
|
|
||||||
RELEASE_ID: ${{ inputs.release_id }}
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const fs = require('fs');
|
|
||||||
const path = require('path');
|
|
||||||
|
|
||||||
const releaseId = context.payload.release?.id || process.env.RELEASE_ID;
|
|
||||||
console.log("releaseId:", releaseId);
|
|
||||||
|
|
||||||
if (!releaseId) {
|
|
||||||
core.setFailed('No release ID found.');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const release = await github.rest.repos.getRelease({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
release_id: releaseId
|
|
||||||
});
|
|
||||||
|
|
||||||
// Find the .tgz file
|
|
||||||
const tgzAsset = release.data.assets.find(asset => asset.name.endsWith('.tgz'));
|
|
||||||
|
|
||||||
if (!tgzAsset) {
|
|
||||||
core.setFailed('No .tgz file found in release assets');
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Download the asset
|
|
||||||
const response = await github.rest.repos.getReleaseAsset({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
asset_id: tgzAsset.id,
|
|
||||||
headers: {
|
|
||||||
Accept: 'application/octet-stream'
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
// Save to npx-cli directory
|
|
||||||
const filePath = path.join('npx-cli', tgzAsset.name);
|
|
||||||
fs.writeFileSync(filePath, Buffer.from(response.data));
|
|
||||||
|
|
||||||
console.log(`Downloaded ${tgzAsset.name} to ${filePath}`);
|
|
||||||
|
|
||||||
// Set output for next step
|
|
||||||
core.setOutput('package-file', filePath);
|
|
||||||
core.setOutput('package-name', tgzAsset.name);
|
|
||||||
|
|
||||||
- name: Verify package integrity
|
|
||||||
id: verify
|
|
||||||
run: |
|
|
||||||
cd npx-cli
|
|
||||||
|
|
||||||
# List files to confirm download
|
|
||||||
ls -la *.tgz
|
|
||||||
|
|
||||||
# Verify the package can be read
|
|
||||||
npm pack --dry-run || echo "Note: This is expected to show differences since we're using the pre-built package"
|
|
||||||
|
|
||||||
# Extract package name from the downloaded file
|
|
||||||
PACKAGE_FILE=$(ls *.tgz | head -n1)
|
|
||||||
echo "package-file=$PACKAGE_FILE" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Publish to npm
|
|
||||||
run: |
|
|
||||||
cd npx-cli
|
|
||||||
|
|
||||||
# Publish the exact same package that was tested
|
|
||||||
PACKAGE_FILE="${{ steps.verify.outputs.package-file }}"
|
|
||||||
|
|
||||||
echo "Publishing $PACKAGE_FILE to npm..."
|
|
||||||
npm publish "$PACKAGE_FILE" --provenance --access public
|
|
||||||
|
|
||||||
echo "✅ Successfully published to npm!"
|
|
||||||
|
|
||||||
- name: Update release description
|
|
||||||
uses: actions/github-script@v8
|
|
||||||
env:
|
|
||||||
RELEASE_ID: ${{ inputs.release_id }}
|
|
||||||
with:
|
|
||||||
script: |
|
|
||||||
const releaseId = context.payload.release?.id || process.env.RELEASE_ID;;
|
|
||||||
|
|
||||||
// Fetch the release to get the current body
|
|
||||||
const release = await github.rest.repos.getRelease({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
release_id: releaseId
|
|
||||||
});
|
|
||||||
|
|
||||||
const currentBody = release.data.body || '';
|
|
||||||
await github.rest.repos.updateRelease({
|
|
||||||
owner: context.repo.owner,
|
|
||||||
repo: context.repo.repo,
|
|
||||||
release_id: releaseId,
|
|
||||||
body: currentBody + '\n\n✅ **Published to npm registry**'
|
|
||||||
});
|
|
||||||
|
|
||||||
# Promote the tag-specific Tauri update manifest to the fixed endpoint
|
|
||||||
# so existing desktop app users receive the update notification.
|
|
||||||
promote-tauri-update:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
if: github.event.release.prerelease == false && !startsWith(github.event.release.tag_name, 'remote-')
|
|
||||||
steps:
|
|
||||||
- name: Configure AWS CLI for R2
|
|
||||||
run: |
|
|
||||||
aws configure set aws_access_key_id ${{ secrets.R2_BINARIES_ACCESS_KEY_ID }}
|
|
||||||
aws configure set aws_secret_access_key ${{ secrets.R2_BINARIES_SECRET_ACCESS_KEY }}
|
|
||||||
aws configure set default.region auto
|
|
||||||
|
|
||||||
- name: Copy update manifest to live endpoint
|
|
||||||
run: |
|
|
||||||
TAG="${{ github.event.release.tag_name || inputs.tag_name }}"
|
|
||||||
ENDPOINT="${{ secrets.R2_BINARIES_ENDPOINT }}"
|
|
||||||
BUCKET="${{ secrets.R2_BINARIES_BUCKET }}"
|
|
||||||
|
|
||||||
echo "Promoting update manifest for $TAG to live endpoint..."
|
|
||||||
aws s3 cp \
|
|
||||||
"s3://$BUCKET/binaries/$TAG/tauri/latest.json" \
|
|
||||||
"s3://$BUCKET/binaries/tauri-update/latest.json" \
|
|
||||||
--endpoint-url "$ENDPOINT" --content-type "application/json"
|
|
||||||
|
|
||||||
echo "Update manifest promoted: binaries/tauri-update/latest.json"
|
|
||||||
28
.github/workflows/relay-deploy-dev.yml
vendored
28
.github/workflows/relay-deploy-dev.yml
vendored
@@ -1,28 +0,0 @@
|
|||||||
name: Relay Deploy Dev
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- crates/relay-tunnel/**
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run-relay-deploy:
|
|
||||||
name: Deploy Relay Dev
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- name: Dispatch dev relay deployment workflow
|
|
||||||
uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.REMOTE_DEPLOYMENT_TOKEN }}
|
|
||||||
repository: BloopAI/vibe-kanban-remote-deployment
|
|
||||||
event-type: vibe-kanban-relay-deploy-dev
|
|
||||||
client-payload: |
|
|
||||||
{
|
|
||||||
"ref": "${{ github.ref_name }}",
|
|
||||||
"sha": "${{ github.sha }}"
|
|
||||||
}
|
|
||||||
104
.github/workflows/relay-deploy-prod.yml
vendored
104
.github/workflows/relay-deploy-prod.yml
vendored
@@ -1,104 +0,0 @@
|
|||||||
name: Deploy Relay Prod
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
version_type:
|
|
||||||
description: "Version bump type"
|
|
||||||
required: true
|
|
||||||
default: "patch"
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- patch
|
|
||||||
- minor
|
|
||||||
- major
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: relay-deploy-${{ github.ref_name }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
env:
|
|
||||||
RUST_TOOLCHAIN: nightly-2025-12-04
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release-and-deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Install cargo-edit
|
|
||||||
uses: taiki-e/cache-cargo-install-action@34ce5120836e5f9f1508d8713d7fdea0e8facd6f # v3.0.1
|
|
||||||
with:
|
|
||||||
tool: cargo-edit
|
|
||||||
git: https://github.com/killercup/cargo-edit
|
|
||||||
rev: 96a3879fe3bafda6d0f943b642997fbf03e235cd # v0.13.9
|
|
||||||
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ssh-key: ${{ secrets.DEPLOY_KEY }}
|
|
||||||
|
|
||||||
- name: Determine and update version
|
|
||||||
id: version
|
|
||||||
run: |
|
|
||||||
# Get current version from crates/relay-tunnel/Cargo.toml
|
|
||||||
current_version=$(grep '^version = ' crates/relay-tunnel/Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
|
|
||||||
echo "Current relay-tunnel version: $current_version"
|
|
||||||
|
|
||||||
# Parse version components
|
|
||||||
IFS='.' read -r major minor patch <<< "$current_version"
|
|
||||||
|
|
||||||
# Bump based on type
|
|
||||||
case "${{ github.event.inputs.version_type }}" in
|
|
||||||
major)
|
|
||||||
major=$((major + 1))
|
|
||||||
minor=0
|
|
||||||
patch=0
|
|
||||||
;;
|
|
||||||
minor)
|
|
||||||
minor=$((minor + 1))
|
|
||||||
patch=0
|
|
||||||
;;
|
|
||||||
patch)
|
|
||||||
patch=$((patch + 1))
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
new_version="${major}.${minor}.${patch}"
|
|
||||||
new_tag="relay-v${new_version}"
|
|
||||||
|
|
||||||
# Update version in crates/relay-tunnel/Cargo.toml
|
|
||||||
cd crates/relay-tunnel
|
|
||||||
cargo set-version "$new_version"
|
|
||||||
cargo update relay-tunnel
|
|
||||||
cd ../..
|
|
||||||
|
|
||||||
echo "New version: $new_version"
|
|
||||||
echo "New tag: $new_tag"
|
|
||||||
echo "new_version=$new_version" >> $GITHUB_OUTPUT
|
|
||||||
echo "new_tag=$new_tag" >> $GITHUB_OUTPUT
|
|
||||||
echo "new_ref=$new_tag" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Commit changes and create tag
|
|
||||||
run: |
|
|
||||||
git config --local user.email "action@github.com"
|
|
||||||
git config --local user.name "GitHub Action"
|
|
||||||
git add crates/relay-tunnel/Cargo.toml crates/relay-tunnel/Cargo.lock
|
|
||||||
git commit -m "chore: bump relay-tunnel version to ${{ steps.version.outputs.new_version }}"
|
|
||||||
git tag -a ${{ steps.version.outputs.new_tag }} -m "Relay release ${{ steps.version.outputs.new_tag }}"
|
|
||||||
git push
|
|
||||||
git push --tags
|
|
||||||
|
|
||||||
- name: Dispatch relay deployment workflow
|
|
||||||
uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.REMOTE_DEPLOYMENT_TOKEN }}
|
|
||||||
repository: BloopAI/vibe-kanban-remote-deployment
|
|
||||||
event-type: vibe-kanban-relay-deploy-prod
|
|
||||||
client-payload: |
|
|
||||||
{
|
|
||||||
"ref": "${{ steps.version.outputs.new_ref }}",
|
|
||||||
"sha": "${{ github.sha }}",
|
|
||||||
"version": "${{ steps.version.outputs.new_version }}"
|
|
||||||
}
|
|
||||||
22
.github/workflows/relay-release.yml
vendored
22
.github/workflows/relay-release.yml
vendored
@@ -1,22 +0,0 @@
|
|||||||
name: Create Relay Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
repository_dispatch:
|
|
||||||
types: [relay-deploy-success]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
create-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
steps:
|
|
||||||
- name: Create GitHub Release
|
|
||||||
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2
|
|
||||||
with:
|
|
||||||
tag_name: ${{ github.event.client_payload.tag }}
|
|
||||||
name: ${{ github.event.client_payload.tag }}
|
|
||||||
generate_release_notes: true
|
|
||||||
body: |
|
|
||||||
## Relay Tunnel Service Release
|
|
||||||
|
|
||||||
Deployed to ${{ github.event.client_payload.environment }}
|
|
||||||
29
.github/workflows/remote-deploy-dev.yml
vendored
29
.github/workflows/remote-deploy-dev.yml
vendored
@@ -1,29 +0,0 @@
|
|||||||
name: Remote Deploy Dev
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths:
|
|
||||||
- crates/remote/**
|
|
||||||
- packages/remote-web/**
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
run-remote-deploy:
|
|
||||||
name: Deploy Remote Dev
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
steps:
|
|
||||||
- name: Dispatch dev remote deployment workflow
|
|
||||||
uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.REMOTE_DEPLOYMENT_TOKEN }}
|
|
||||||
repository: BloopAI/vibe-kanban-remote-deployment
|
|
||||||
event-type: vibe-kanban-remote-deploy-dev
|
|
||||||
client-payload: |
|
|
||||||
{
|
|
||||||
"ref": "${{ github.ref_name }}",
|
|
||||||
"sha": "${{ github.sha }}"
|
|
||||||
}
|
|
||||||
112
.github/workflows/remote-deploy-prod.yml
vendored
112
.github/workflows/remote-deploy-prod.yml
vendored
@@ -1,112 +0,0 @@
|
|||||||
name: Deploy Remote Prod
|
|
||||||
|
|
||||||
on:
|
|
||||||
workflow_dispatch:
|
|
||||||
inputs:
|
|
||||||
version_type:
|
|
||||||
description: "Version bump type"
|
|
||||||
required: true
|
|
||||||
default: "patch"
|
|
||||||
type: choice
|
|
||||||
options:
|
|
||||||
- patch
|
|
||||||
- minor
|
|
||||||
- major
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: remote-deploy-${{ github.ref_name }}
|
|
||||||
cancel-in-progress: true
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
|
|
||||||
env:
|
|
||||||
RUST_TOOLCHAIN: nightly-2025-12-04
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
release-and-deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Install cargo-edit
|
|
||||||
uses: taiki-e/cache-cargo-install-action@34ce5120836e5f9f1508d8713d7fdea0e8facd6f # v3.0.1
|
|
||||||
with:
|
|
||||||
tool: cargo-edit
|
|
||||||
git: https://github.com/killercup/cargo-edit
|
|
||||||
rev: 96a3879fe3bafda6d0f943b642997fbf03e235cd # v0.13.9
|
|
||||||
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
ssh-key: ${{ secrets.DEPLOY_KEY }}
|
|
||||||
|
|
||||||
- name: Setup SSH Agent for private dependencies
|
|
||||||
uses: webfactory/ssh-agent@dc588b651fe13675774614f8e6a936a468676387 # v0.9.0
|
|
||||||
with:
|
|
||||||
ssh-private-key: ${{ secrets.VK_PRIVATE_DEPLOY_KEY }}
|
|
||||||
|
|
||||||
- name: Determine and update version
|
|
||||||
id: version
|
|
||||||
run: |
|
|
||||||
# Get current version from crates/remote/Cargo.toml
|
|
||||||
current_version=$(grep '^version = ' crates/remote/Cargo.toml | head -1 | sed 's/version = "\(.*\)"/\1/')
|
|
||||||
echo "Current remote version: $current_version"
|
|
||||||
|
|
||||||
# Parse version components
|
|
||||||
IFS='.' read -r major minor patch <<< "$current_version"
|
|
||||||
|
|
||||||
# Bump based on type
|
|
||||||
case "${{ github.event.inputs.version_type }}" in
|
|
||||||
major)
|
|
||||||
major=$((major + 1))
|
|
||||||
minor=0
|
|
||||||
patch=0
|
|
||||||
;;
|
|
||||||
minor)
|
|
||||||
minor=$((minor + 1))
|
|
||||||
patch=0
|
|
||||||
;;
|
|
||||||
patch)
|
|
||||||
patch=$((patch + 1))
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
new_version="${major}.${minor}.${patch}"
|
|
||||||
new_tag="remote-v${new_version}"
|
|
||||||
|
|
||||||
# Update version in crates/remote/Cargo.toml
|
|
||||||
cd crates/remote
|
|
||||||
cargo set-version "$new_version"
|
|
||||||
cargo update remote
|
|
||||||
cd ../..
|
|
||||||
|
|
||||||
echo "New version: $new_version"
|
|
||||||
echo "New tag: $new_tag"
|
|
||||||
echo "new_version=$new_version" >> $GITHUB_OUTPUT
|
|
||||||
echo "new_tag=$new_tag" >> $GITHUB_OUTPUT
|
|
||||||
echo "new_ref=$new_tag" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Stop SSH agent
|
|
||||||
run: ssh-agent -k
|
|
||||||
|
|
||||||
- name: Commit changes and create tag
|
|
||||||
run: |
|
|
||||||
git config --local user.email "action@github.com"
|
|
||||||
git config --local user.name "GitHub Action"
|
|
||||||
git add crates/remote/Cargo.toml crates/remote/Cargo.lock
|
|
||||||
git commit -m "chore: bump remote version to ${{ steps.version.outputs.new_version }}"
|
|
||||||
git tag -a ${{ steps.version.outputs.new_tag }} -m "Remote release ${{ steps.version.outputs.new_tag }}"
|
|
||||||
git push
|
|
||||||
git push --tags
|
|
||||||
|
|
||||||
- name: Dispatch remote deployment workflow
|
|
||||||
uses: peter-evans/repository-dispatch@28959ce8df70de7be546dd1250a005dd32156697 # v4.0.1
|
|
||||||
with:
|
|
||||||
token: ${{ secrets.REMOTE_DEPLOYMENT_TOKEN }}
|
|
||||||
repository: BloopAI/vibe-kanban-remote-deployment
|
|
||||||
event-type: vibe-kanban-remote-deploy-prod
|
|
||||||
client-payload: |
|
|
||||||
{
|
|
||||||
"ref": "${{ steps.version.outputs.new_ref }}",
|
|
||||||
"sha": "${{ github.sha }}",
|
|
||||||
"version": "${{ steps.version.outputs.new_version }}"
|
|
||||||
}
|
|
||||||
22
.github/workflows/remote-release.yml
vendored
22
.github/workflows/remote-release.yml
vendored
@@ -1,22 +0,0 @@
|
|||||||
name: Create Remote Release
|
|
||||||
|
|
||||||
on:
|
|
||||||
repository_dispatch:
|
|
||||||
types: [remote-deploy-success]
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
create-release:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
permissions:
|
|
||||||
contents: write
|
|
||||||
steps:
|
|
||||||
- name: Create GitHub Release
|
|
||||||
uses: softprops/action-gh-release@153bb8e04406b158c6c84fc1615b65b24149a1fe # v2
|
|
||||||
with:
|
|
||||||
tag_name: ${{ github.event.client_payload.tag }}
|
|
||||||
name: ${{ github.event.client_payload.tag }}
|
|
||||||
generate_release_notes: true
|
|
||||||
body: |
|
|
||||||
## Remote Service Release
|
|
||||||
|
|
||||||
✅ Deployed to ${{ github.event.client_payload.environment }}
|
|
||||||
347
.github/workflows/test.yml
vendored
347
.github/workflows/test.yml
vendored
@@ -1,347 +0,0 @@
|
|||||||
name: Test
|
|
||||||
|
|
||||||
on:
|
|
||||||
pull_request:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
paths-ignore:
|
|
||||||
- .github/workflows/**
|
|
||||||
- '!.github/workflows/test.yml'
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- main
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: ${{ github.workflow }}-${{ github.ref }}
|
|
||||||
cancel-in-progress: ${{ github.ref != 'refs/heads/main' }}
|
|
||||||
|
|
||||||
env:
|
|
||||||
CARGO_TERM_COLOR: always
|
|
||||||
NODE_VERSION: 22
|
|
||||||
PNPM_VERSION: 10.13.1
|
|
||||||
RUST_TOOLCHAIN: nightly-2025-12-04
|
|
||||||
RUNNER_LABEL: &runner_label ubuntu-24.04
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
changes:
|
|
||||||
runs-on: *runner_label
|
|
||||||
if: github.event_name == 'pull_request'
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
pull-requests: read
|
|
||||||
outputs:
|
|
||||||
frontend: ${{ steps.filter.outputs.frontend }}
|
|
||||||
backend: ${{ steps.filter.outputs.backend }}
|
|
||||||
backend-remote: ${{ steps.filter.outputs['backend-remote'] }}
|
|
||||||
tauri: ${{ steps.filter.outputs.tauri }}
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
- uses: dorny/paths-filter@0bc4621a3135347011ad047f9ecf449bf72ce2bd # v3.0.0
|
|
||||||
id: filter
|
|
||||||
with:
|
|
||||||
filters: |
|
|
||||||
frontend:
|
|
||||||
- 'packages/local-web/**'
|
|
||||||
- 'packages/web-core/**'
|
|
||||||
- 'packages/remote-web/**'
|
|
||||||
- 'packages/ui/**'
|
|
||||||
- 'shared/**'
|
|
||||||
- 'scripts/check-i18n.sh'
|
|
||||||
- 'scripts/check-unused-i18n-keys.mjs'
|
|
||||||
- 'scripts/check-legacy-frontend-paths.sh'
|
|
||||||
- 'scripts/legacy-frontend-paths-allowlist.txt'
|
|
||||||
- 'pnpm-lock.yaml'
|
|
||||||
- 'pnpm-workspace.yaml'
|
|
||||||
- 'package.json'
|
|
||||||
- '.npmrc'
|
|
||||||
- '.github/workflows/test.yml'
|
|
||||||
- '.github/actions/**'
|
|
||||||
backend:
|
|
||||||
- 'crates/api-types/**'
|
|
||||||
- 'crates/client-info/**'
|
|
||||||
- 'crates/db/**'
|
|
||||||
- 'crates/deployment/**'
|
|
||||||
- 'crates/desktop-bridge/**'
|
|
||||||
- 'crates/embedded-ssh/**'
|
|
||||||
- 'crates/executors/**'
|
|
||||||
- 'crates/git/**'
|
|
||||||
- 'crates/git-host/**'
|
|
||||||
- 'crates/local-deployment/**'
|
|
||||||
- 'crates/mcp/**'
|
|
||||||
- 'crates/preview-proxy/**'
|
|
||||||
- 'crates/relay-client/**'
|
|
||||||
- 'crates/relay-control/**'
|
|
||||||
- 'crates/relay-hosts/**'
|
|
||||||
- 'crates/relay-protocol/**'
|
|
||||||
- 'crates/relay-tunnel-core/**'
|
|
||||||
- 'crates/relay-types/**'
|
|
||||||
- 'crates/relay-webrtc/**'
|
|
||||||
- 'crates/relay-ws/**'
|
|
||||||
- 'crates/remote-info/**'
|
|
||||||
- 'crates/review/**'
|
|
||||||
- 'crates/server/**'
|
|
||||||
- 'crates/services/**'
|
|
||||||
- 'crates/trusted-key-auth/**'
|
|
||||||
- 'crates/utils/**'
|
|
||||||
- 'crates/workspace-manager/**'
|
|
||||||
- 'crates/worktree-manager/**'
|
|
||||||
- 'crates/ws-bridge/**'
|
|
||||||
- 'Cargo.toml'
|
|
||||||
- 'Cargo.lock'
|
|
||||||
- 'shared/**'
|
|
||||||
- 'scripts/prepare-db.js'
|
|
||||||
- 'pnpm-lock.yaml'
|
|
||||||
- 'package.json'
|
|
||||||
- 'rustfmt.toml'
|
|
||||||
- 'rust-toolchain.toml'
|
|
||||||
- '.cargo/**'
|
|
||||||
- '.github/workflows/test.yml'
|
|
||||||
- '.github/actions/**'
|
|
||||||
backend-remote:
|
|
||||||
- 'crates/remote/**'
|
|
||||||
- 'crates/relay-tunnel/**'
|
|
||||||
- 'crates/relay-tunnel-core/**'
|
|
||||||
- 'crates/ws-bridge/**'
|
|
||||||
- 'crates/api-types/**'
|
|
||||||
- 'crates/relay-types/**'
|
|
||||||
- 'crates/utils/**'
|
|
||||||
- 'Cargo.toml'
|
|
||||||
- 'Cargo.lock'
|
|
||||||
- 'shared/**'
|
|
||||||
- 'rustfmt.toml'
|
|
||||||
- 'rust-toolchain.toml'
|
|
||||||
- '.cargo/**'
|
|
||||||
- 'pnpm-lock.yaml'
|
|
||||||
- 'package.json'
|
|
||||||
- '.github/workflows/test.yml'
|
|
||||||
- '.github/actions/**'
|
|
||||||
tauri:
|
|
||||||
- 'crates/tauri-app/**'
|
|
||||||
- 'crates/api-types/**'
|
|
||||||
- 'crates/client-info/**'
|
|
||||||
- 'crates/db/**'
|
|
||||||
- 'crates/deployment/**'
|
|
||||||
- 'crates/desktop-bridge/**'
|
|
||||||
- 'crates/embedded-ssh/**'
|
|
||||||
- 'crates/executors/**'
|
|
||||||
- 'crates/git/**'
|
|
||||||
- 'crates/git-host/**'
|
|
||||||
- 'crates/local-deployment/**'
|
|
||||||
- 'crates/mcp/**'
|
|
||||||
- 'crates/preview-proxy/**'
|
|
||||||
- 'crates/relay-client/**'
|
|
||||||
- 'crates/relay-control/**'
|
|
||||||
- 'crates/relay-hosts/**'
|
|
||||||
- 'crates/relay-protocol/**'
|
|
||||||
- 'crates/relay-tunnel-core/**'
|
|
||||||
- 'crates/relay-types/**'
|
|
||||||
- 'crates/relay-webrtc/**'
|
|
||||||
- 'crates/relay-ws/**'
|
|
||||||
- 'crates/remote-info/**'
|
|
||||||
- 'crates/review/**'
|
|
||||||
- 'crates/server/**'
|
|
||||||
- 'crates/services/**'
|
|
||||||
- 'crates/trusted-key-auth/**'
|
|
||||||
- 'crates/utils/**'
|
|
||||||
- 'crates/workspace-manager/**'
|
|
||||||
- 'crates/worktree-manager/**'
|
|
||||||
- 'crates/ws-bridge/**'
|
|
||||||
- 'Cargo.toml'
|
|
||||||
- 'Cargo.lock'
|
|
||||||
- 'rustfmt.toml'
|
|
||||||
- 'rust-toolchain.toml'
|
|
||||||
- '.cargo/**'
|
|
||||||
- 'package.json'
|
|
||||||
- 'pnpm-lock.yaml'
|
|
||||||
- 'pnpm-workspace.yaml'
|
|
||||||
- '.npmrc'
|
|
||||||
- '.github/workflows/test.yml'
|
|
||||||
- '.github/actions/**'
|
|
||||||
|
|
||||||
frontend-checks:
|
|
||||||
needs: changes
|
|
||||||
if: always() && (needs.changes.outputs.frontend == 'true' || needs.changes.result == 'skipped')
|
|
||||||
runs-on: *runner_label
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Setup Node
|
|
||||||
uses: ./.github/actions/setup-node
|
|
||||||
|
|
||||||
- name: Install dependencies
|
|
||||||
run: pnpm install
|
|
||||||
|
|
||||||
- name: Run frontend checks
|
|
||||||
env:
|
|
||||||
NODE_OPTIONS: --max-old-space-size=8192
|
|
||||||
run: |
|
|
||||||
npx concurrently \
|
|
||||||
--kill-others-on-fail \
|
|
||||||
--names "local:lint,local:fmt,local:build,remote:fmt,remote:build,ui:check,ui:lint,ui:fmt,core:check,core:fmt,i18n,i18n:unused,legacy" \
|
|
||||||
--timings \
|
|
||||||
"cd packages/local-web && npm run lint" \
|
|
||||||
"cd packages/local-web && npm run format:check" \
|
|
||||||
"cd packages/local-web && npm run build" \
|
|
||||||
"cd packages/remote-web && npm run format:check" \
|
|
||||||
"cd packages/remote-web && npm run build" \
|
|
||||||
"cd packages/ui && npm run check" \
|
|
||||||
"cd packages/ui && npm run lint" \
|
|
||||||
"cd packages/ui && npm run format:check" \
|
|
||||||
"cd packages/web-core && npm run check" \
|
|
||||||
"cd packages/web-core && npm run format:check" \
|
|
||||||
"GITHUB_BASE_REF=${{ github.base_ref || 'main' }} ./scripts/check-i18n.sh" \
|
|
||||||
"node scripts/check-unused-i18n-keys.mjs" \
|
|
||||||
"./scripts/check-legacy-frontend-paths.sh"
|
|
||||||
|
|
||||||
backend-schema-checks:
|
|
||||||
needs: changes
|
|
||||||
if: always() && (needs.changes.outputs.backend == 'true' || needs.changes.result == 'skipped')
|
|
||||||
runs-on: *runner_label
|
|
||||||
env:
|
|
||||||
SCCACHE_GHA_ENABLED: "true"
|
|
||||||
RUSTC_WRAPPER: "sccache"
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Setup Rust
|
|
||||||
uses: ./.github/actions/cargo-checks-common-setup
|
|
||||||
with:
|
|
||||||
toolchain: ${{ env.RUST_TOOLCHAIN }}
|
|
||||||
cache-key: backend-schema-checks-${{ runner.os }}-${{ runner.arch }}-${{ env.RUNNER_LABEL }}
|
|
||||||
setup-node: 'true'
|
|
||||||
setup-sqlx-cli: 'true'
|
|
||||||
|
|
||||||
- name: Check generated types
|
|
||||||
run: npm run generate-types:check
|
|
||||||
|
|
||||||
- name: Sqlx checks
|
|
||||||
run: npm run prepare-db:check
|
|
||||||
|
|
||||||
backend-remote-checks:
|
|
||||||
needs: changes
|
|
||||||
if: >-
|
|
||||||
always()
|
|
||||||
&& (needs.changes.outputs['backend-remote'] == 'true' || needs.changes.result == 'skipped')
|
|
||||||
&& (github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository)
|
|
||||||
runs-on: *runner_label
|
|
||||||
env:
|
|
||||||
SCCACHE_GHA_ENABLED: "true"
|
|
||||||
RUSTC_WRAPPER: "sccache"
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Setup Rust
|
|
||||||
uses: ./.github/actions/cargo-checks-common-setup
|
|
||||||
with:
|
|
||||||
toolchain: ${{ env.RUST_TOOLCHAIN }}
|
|
||||||
components: rustfmt, clippy
|
|
||||||
cache-key: backend-remote-checks-${{ runner.os }}-${{ runner.arch }}-${{ env.RUNNER_LABEL }}
|
|
||||||
setup-node: 'true'
|
|
||||||
setup-sqlx-cli: 'true'
|
|
||||||
|
|
||||||
- name: Setup SSH Agent for private dependencies
|
|
||||||
uses: webfactory/ssh-agent@dc588b651fe13675774614f8e6a936a468676387 # v0.9.0
|
|
||||||
with:
|
|
||||||
ssh-private-key: ${{ secrets.VK_PRIVATE_DEPLOY_KEY }}
|
|
||||||
|
|
||||||
- name: Check remote Cargo.lock is consistent
|
|
||||||
run: |
|
|
||||||
cargo metadata --locked --format-version 1 --manifest-path crates/remote/Cargo.toml > /dev/null
|
|
||||||
cargo metadata --locked --format-version 1 --manifest-path crates/relay-tunnel/Cargo.toml > /dev/null
|
|
||||||
|
|
||||||
- name: Check formatting
|
|
||||||
run: |
|
|
||||||
cargo fmt --all --manifest-path crates/remote/Cargo.toml -- --check
|
|
||||||
cargo fmt --all --manifest-path crates/relay-tunnel/Cargo.toml -- --check
|
|
||||||
|
|
||||||
- name: Run Clippy
|
|
||||||
run: |
|
|
||||||
cargo clippy --all-targets --manifest-path crates/remote/Cargo.toml -- -D warnings
|
|
||||||
cargo clippy --all-targets --manifest-path crates/relay-tunnel/Cargo.toml -- -D warnings
|
|
||||||
|
|
||||||
- name: Check generated types
|
|
||||||
run: npm run remote:generate-types:check
|
|
||||||
|
|
||||||
- name: Sqlx checks
|
|
||||||
run: npm run remote:prepare-db:check
|
|
||||||
|
|
||||||
backend-clippy:
|
|
||||||
needs: changes
|
|
||||||
if: always() && (needs.changes.outputs.backend == 'true' || needs.changes.result == 'skipped')
|
|
||||||
runs-on: *runner_label
|
|
||||||
env:
|
|
||||||
SCCACHE_GHA_ENABLED: "true"
|
|
||||||
RUSTC_WRAPPER: "sccache"
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Setup Rust
|
|
||||||
uses: ./.github/actions/cargo-checks-common-setup
|
|
||||||
with:
|
|
||||||
toolchain: ${{ env.RUST_TOOLCHAIN }}
|
|
||||||
components: rustfmt, clippy
|
|
||||||
cache-key: backend-clippy-${{ runner.os }}-${{ runner.arch }}-${{ env.RUNNER_LABEL }}
|
|
||||||
|
|
||||||
- name: Run Clippy and fmt checks
|
|
||||||
run: |
|
|
||||||
set -x
|
|
||||||
cargo fmt --all -- --check & pid_fmt=$!
|
|
||||||
cargo clippy --workspace --all-targets --exclude vibe-kanban-tauri -- -D warnings
|
|
||||||
wait $pid_fmt
|
|
||||||
|
|
||||||
backend-test:
|
|
||||||
needs: changes
|
|
||||||
if: always() && (needs.changes.outputs.backend == 'true' || needs.changes.result == 'skipped')
|
|
||||||
runs-on: *runner_label
|
|
||||||
env:
|
|
||||||
SCCACHE_GHA_ENABLED: "true"
|
|
||||||
RUSTC_WRAPPER: "sccache"
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Setup Rust
|
|
||||||
uses: ./.github/actions/cargo-checks-common-setup
|
|
||||||
with:
|
|
||||||
toolchain: ${{ env.RUST_TOOLCHAIN }}
|
|
||||||
cache-key: backend-test-${{ runner.os }}-${{ runner.arch }}-${{ env.RUNNER_LABEL }}
|
|
||||||
|
|
||||||
- name: Install cargo-nextest
|
|
||||||
uses: taiki-e/cache-cargo-install-action@34ce5120836e5f9f1508d8713d7fdea0e8facd6f # v3.0.1
|
|
||||||
with:
|
|
||||||
tool: cargo-nextest
|
|
||||||
git: https://github.com/nextest-rs/nextest
|
|
||||||
rev: 6e4a9d6f2c4964f30ff54a8cd5466f8869267daa # cargo-nextest-0.9.132
|
|
||||||
|
|
||||||
- name: Run Cargo tests
|
|
||||||
run: cargo nextest run --workspace --exclude vibe-kanban-tauri
|
|
||||||
|
|
||||||
tauri-checks:
|
|
||||||
needs: changes
|
|
||||||
if: always() && (needs.changes.outputs.tauri == 'true' || needs.changes.result == 'skipped')
|
|
||||||
runs-on: *runner_label
|
|
||||||
env:
|
|
||||||
SCCACHE_GHA_ENABLED: "true"
|
|
||||||
RUSTC_WRAPPER: "sccache"
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v6
|
|
||||||
|
|
||||||
- name: Setup Rust
|
|
||||||
uses: ./.github/actions/cargo-checks-common-setup
|
|
||||||
with:
|
|
||||||
toolchain: ${{ env.RUST_TOOLCHAIN }}
|
|
||||||
components: rustfmt, clippy
|
|
||||||
cache-key: tauri-checks-${{ runner.os }}-${{ runner.arch }}-${{ env.RUNNER_LABEL }}
|
|
||||||
|
|
||||||
- name: Install Linux dependencies
|
|
||||||
run: |
|
|
||||||
sudo apt-get update
|
|
||||||
sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential \
|
|
||||||
libssl-dev libayatana-appindicator3-dev librsvg2-dev \
|
|
||||||
libxdo-dev file pkg-config xdg-utils
|
|
||||||
|
|
||||||
- name: Run Tauri fmt, clippy, and compile checks
|
|
||||||
run: |
|
|
||||||
cargo fmt --all --manifest-path crates/tauri-app/Cargo.toml -- --check
|
|
||||||
cargo clippy --all-targets --manifest-path crates/tauri-app/Cargo.toml -- -D warnings
|
|
||||||
cargo check -p vibe-kanban-tauri
|
|
||||||
Reference in New Issue
Block a user