Skip to content

Merge remote-tracking branch 'origin/main' #15

Merge remote-tracking branch 'origin/main'

Merge remote-tracking branch 'origin/main' #15

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
release:
types: [ published ]
env:
NODE_VERSION: '18'
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
jobs:
# Lint and Type Check
lint-and-typecheck:
name: Lint and Type Check
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run ESLint
run: npm run lint
- name: Run TypeScript check
run: npx tsc --noEmit
- name: Check formatting
run: npm run format:check
# Build and Test
build:
name: Build and Test
runs-on: ubuntu-latest
needs: lint-and-typecheck
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build project
run: npm run build
- name: Verify build output
run: |
ls -la lib/
node -e "console.log('Build verification passed')"
- name: Upload build artifacts
uses: actions/upload-artifact@v4
with:
name: build-files
path: lib/
retention-days: 30
# Publish to npm (only on release)
publish:
name: Publish to npm
runs-on: ubuntu-latest
needs: build
if: github.event_name == 'release' && github.event.action == 'published'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
registry-url: 'https://registry.npmjs.org'
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Build project
run: npm run build
- name: Publish to npm
run: npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ env.NPM_TOKEN }}
# Create Release (on push to main with version bump)
create-release:
name: Create Release
runs-on: ubuntu-latest
needs: build
if: github.ref == 'refs/heads/main' && contains(github.event.head_commit.message, 'chore(release)')
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
- name: Install dependencies
run: npm ci
- name: Get version
id: version
run: echo "version=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT
- name: Create Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: v${{ steps.version.outputs.version }}
release_name: Release v${{ steps.version.outputs.version }}
body: |
## What's Changed
This release includes:
- Bug fixes and improvements
- Enhanced features
- Performance optimizations
## Installation
```bash
npm install @donkasun/react-native-outlined-text@${{ steps.version.outputs.version }}
```
## Breaking Changes
None in this release.
## Migration Guide
No migration required for this release.
draft: false
prerelease: false
# Security Audit
security-audit:
name: Security Audit
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Run security audit
run: npm audit --audit-level=moderate
- name: Upload security report
uses: actions/upload-artifact@v4
if: failure()
with:
name: security-report
path: npm-audit.json
retention-days: 30
# Dependency Updates
dependency-updates:
name: Check for Dependency Updates
runs-on: ubuntu-latest
if: github.event_name == 'schedule'
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: ${{ env.NODE_VERSION }}
cache: 'npm'
- name: Install dependencies
run: npm ci
- name: Check for outdated packages
run: npm outdated
- name: Create issue for updates
uses: actions/github-script@v7
with:
script: |
const { data: issues } = await github.rest.issues.listForRepo({
owner: context.repo.owner,
repo: context.repo.repo,
state: 'open',
labels: ['dependencies']
});
const hasDependencyIssue = issues.some(issue =>
issue.title.includes('Dependency Updates')
);
if (!hasDependencyIssue) {
await github.rest.issues.create({
owner: context.repo.owner,
repo: context.repo.repo,
title: 'Dependency Updates Available',
body: 'Some dependencies have updates available. Please review and update as needed.',
labels: ['dependencies', 'maintenance']
});
}