mirror of
https://github.com/tiennm99/ccs.git
synced 2026-07-16 04:18:05 +00:00
51 lines
2.3 KiB
TypeScript
51 lines
2.3 KiB
TypeScript
import { describe, expect, test } from 'bun:test';
|
|
import * as fs from 'node:fs';
|
|
import * as path from 'node:path';
|
|
|
|
function resolvePath(relativePath: string) {
|
|
return path.resolve(import.meta.dir, relativePath);
|
|
}
|
|
|
|
describe('dev release workflow', () => {
|
|
test('uses PAT_TOKEN for protected dev branch release pushes', () => {
|
|
const workflowPath = resolvePath('../../../../.github/workflows/dev-release.yml');
|
|
|
|
expect(fs.existsSync(workflowPath)).toBe(true);
|
|
|
|
const workflow = fs.readFileSync(workflowPath, 'utf8');
|
|
const checkoutSection = workflow.slice(
|
|
workflow.indexOf('- name: Checkout'),
|
|
workflow.indexOf('- name: Setup Bun')
|
|
);
|
|
const releaseSection = workflow.slice(
|
|
workflow.indexOf('- name: Release'),
|
|
workflow.indexOf('- name: Notify Discord')
|
|
);
|
|
|
|
expect(workflow).toContain('name: Dev Release');
|
|
expect(workflow).toContain('branches: [dev]');
|
|
expect(checkoutSection).toContain("token: ${{ secrets.PAT_TOKEN }}");
|
|
expect(checkoutSection).not.toContain('token: ${{ github.token }}');
|
|
expect(releaseSection).toContain('GITHUB_TOKEN: ${{ secrets.PAT_TOKEN }}');
|
|
expect(releaseSection).toContain('GH_TOKEN: ${{ secrets.PAT_TOKEN }}');
|
|
expect(releaseSection).not.toContain('GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}');
|
|
expect(releaseSection).not.toContain('GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}');
|
|
});
|
|
|
|
test('keeps release commits visible to promotion PR CI', () => {
|
|
const workflowPath = resolvePath('../../../../.github/workflows/dev-release.yml');
|
|
const scriptPath = resolvePath('../../../../scripts/dev-release.sh');
|
|
|
|
const workflow = fs.readFileSync(workflowPath, 'utf8');
|
|
const script = fs.readFileSync(scriptPath, 'utf8');
|
|
|
|
expect(workflow).toContain("!startsWith(github.event.head_commit.message, 'chore(release): ')");
|
|
expect(workflow).not.toContain("contains(github.event.head_commit.message, '[skip ci]')");
|
|
expect(script).toContain('LEGACY_CURRENT_RELEASE_SUBJECT="${CURRENT_RELEASE_SUBJECT} [skip ci]"');
|
|
expect(script).toContain('[[ "$HEAD_SUBJECT" == "$CURRENT_RELEASE_SUBJECT" ]]');
|
|
expect(script).toContain('[[ "$HEAD_SUBJECT" == "$LEGACY_CURRENT_RELEASE_SUBJECT" ]]');
|
|
expect(script).toContain('git commit -m "chore(release): ${VERSION}"');
|
|
expect(script).not.toContain('git commit -m "chore(release): ${VERSION} [skip ci]"');
|
|
});
|
|
});
|