diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 902911a..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,98 +0,0 @@ -version: 2.1 - -executors: - default: - docker: - - image: circleci/node:16 - working_directory: ~/project - -commands: - attach_project: - steps: - - attach_workspace: - at: ~/project - -jobs: - install-dependencies: - executor: default - steps: - - checkout - - attach_project - - restore_cache: - keys: - - dependencies-{{ checksum "package.json" }} - - dependencies- - - restore_cache: - keys: - - dependencies-example-{{ checksum "example/package.json" }} - - dependencies-example- - - run: - name: Install dependencies - command: | - yarn install --cwd example --frozen-lockfile - yarn install --frozen-lockfile - - save_cache: - key: dependencies-{{ checksum "package.json" }} - paths: node_modules - - save_cache: - key: dependencies-example-{{ checksum "example/package.json" }} - paths: example/node_modules - - persist_to_workspace: - root: . - paths: . - - lint: - executor: default - steps: - - attach_project - - run: - name: Lint files - command: | - yarn lint - - typescript: - executor: default - steps: - - attach_project - - run: - name: Typecheck files - command: | - yarn typescript - - unit-tests: - executor: default - steps: - - attach_project - - run: - name: Run unit tests - command: | - yarn test --coverage - - store_artifacts: - path: coverage - destination: coverage - - build-package: - executor: default - steps: - - attach_project - - run: - name: Build package - command: | - yarn prepare - -workflows: - build-and-test: - jobs: - - install-dependencies - - lint: - requires: - - install-dependencies - - typescript: - requires: - - install-dependencies - - unit-tests: - requires: - - install-dependencies - - build-package: - requires: - - install-dependencies diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..fdfe177 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,196 @@ +name: CI + +on: + push: + branches: [main, develop] + pull_request: + branches: [main, develop] + +jobs: + install-dependencies: + runs-on: ubuntu-latest + outputs: + cache-hit: ${{ steps.cache-deps.outputs.cache-hit }} + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'yarn' + + - name: Cache dependencies + id: cache-deps + uses: actions/cache@v3 + with: + path: | + node_modules + example/node_modules + key: ${{ runner.os }}-deps-${{ hashFiles('yarn.lock', 'example/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-deps- + + - name: Install dependencies + if: steps.cache-deps.outputs.cache-hit != 'true' + run: | + yarn install --cwd example --frozen-lockfile + yarn install --frozen-lockfile + + - name: Upload workspace + uses: actions/upload-artifact@v4 + with: + name: workspace + path: | + . + !node_modules/.cache + !example/node_modules/.cache + retention-days: 1 + + lint: + runs-on: ubuntu-latest + needs: install-dependencies + steps: + - name: Download workspace + uses: actions/download-artifact@v4 + with: + name: workspace + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'yarn' + + - name: Restore dependencies cache + uses: actions/cache@v3 + with: + path: | + node_modules + example/node_modules + key: ${{ runner.os }}-deps-${{ hashFiles('yarn.lock', 'example/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-deps- + + - name: Lint files + run: yarn lint + + typescript: + runs-on: ubuntu-latest + needs: install-dependencies + steps: + - name: Download workspace + uses: actions/download-artifact@v4 + with: + name: workspace + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'yarn' + + - name: Restore dependencies cache + uses: actions/cache@v3 + with: + path: | + node_modules + example/node_modules + key: ${{ runner.os }}-deps-${{ hashFiles('yarn.lock', 'example/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-deps- + + - name: Typecheck files + run: yarn typescript + + unit-tests: + runs-on: ubuntu-latest + needs: install-dependencies + steps: + - name: Download workspace + uses: actions/download-artifact@v4 + with: + name: workspace + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'yarn' + + - name: Restore dependencies cache + uses: actions/cache@v3 + with: + path: | + node_modules + example/node_modules + key: ${{ runner.os }}-deps-${{ hashFiles('yarn.lock', 'example/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-deps- + + - name: Run unit tests + run: yarn test --coverage + + - name: Upload coverage artifacts + uses: actions/upload-artifact@v4 + with: + name: coverage + path: coverage/ + retention-days: 30 + + - name: Upload coverage to Codecov + uses: codecov/codecov-action@v3 + with: + directory: ./coverage/ + fail_ci_if_error: false + + build-package: + runs-on: ubuntu-latest + needs: install-dependencies + steps: + - name: Download workspace + uses: actions/download-artifact@v4 + with: + name: workspace + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'yarn' + + - name: Restore dependencies cache + uses: actions/cache@v3 + with: + path: | + node_modules + example/node_modules + key: ${{ runner.os }}-deps-${{ hashFiles('yarn.lock', 'example/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-deps- + + - name: Build package + run: yarn prepare + + - name: Upload build artifacts + uses: actions/upload-artifact@v4 + with: + name: build + path: lib/ + retention-days: 30 + + # Summary job that depends on all other jobs + ci-complete: + runs-on: ubuntu-latest + needs: [lint, typescript, unit-tests, build-package] + if: always() + steps: + - name: Check all jobs status + run: | + if [[ "${{ needs.lint.result }}" == "failure" || "${{ needs.typescript.result }}" == "failure" || "${{ needs.unit-tests.result }}" == "failure" || "${{ needs.build-package.result }}" == "failure" ]]; then + echo "One or more jobs failed" + exit 1 + else + echo "All jobs completed successfully" + fi diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 9d258ca..f130260 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -7,11 +7,11 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Setup Node - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: - node-version: '16.x' + node-version: '22.x' registry-url: 'https://registry.npmjs.org' - name: Install dependencies 🔧 run: yarn install --frozen-lockfile diff --git a/.gitignore b/.gitignore index e932d1c..c609cb1 100644 --- a/.gitignore +++ b/.gitignore @@ -66,4 +66,7 @@ android/keystores/debug.keystore # generated by bob lib/ +# coverage reports +coverage/ + .xcode.env.local diff --git a/example/index.tsx b/example/index.tsx index 45fce45..14cf100 100644 --- a/example/index.tsx +++ b/example/index.tsx @@ -1,4 +1,4 @@ -import {AppRegistry} from 'react-native'; +import { AppRegistry } from 'react-native'; import App from './src/App'; AppRegistry.registerComponent('main', () => App); diff --git a/example/src/App.tsx b/example/src/App.tsx index bbff416..2731a40 100644 --- a/example/src/App.tsx +++ b/example/src/App.tsx @@ -32,7 +32,7 @@ export default function App() { -1, true ); - }, []); + }, [animatedHeight, animatedWidth]); const animatedStyle = useAnimatedStyle(() => ({ width: `${animatedWidth.value}%`, diff --git a/package.json b/package.json index ab06546..df56cd8 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,7 @@ "!**/__mocks__" ], "scripts": { - "test": "jest", + "test": "jest --passWithNoTests", "typescript": "tsc --noEmit", "lint": "eslint \"**/*.{js,ts,tsx}\"", "prepare": "bob build", @@ -101,7 +101,8 @@ }, "eslintIgnore": [ "node_modules/", - "lib/" + "lib/", + "coverage/" ], "prettier": { "quoteProps": "consistent", diff --git a/src/ShadowedView.android.tsx b/src/ShadowedView.android.tsx index 10be7d9..60cfeec 100644 --- a/src/ShadowedView.android.tsx +++ b/src/ShadowedView.android.tsx @@ -1,11 +1,12 @@ import React from 'react'; import { I18nManager, - StyleProp, StyleSheet, + StyleProp, // eslint-disable-line @typescript-eslint/no-unused-vars ViewProps, - ViewStyle, + ViewStyle, // eslint-disable-line @typescript-eslint/no-unused-vars } from 'react-native'; +// eslint-disable-next-line @typescript-eslint/no-unused-vars import { FastShadowView, FastShadowViewProps } from './FastShadowView'; export class ShadowedView extends React.Component { diff --git a/src/utils.ts b/src/utils.ts index a9c0d1d..21a7185 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -1,3 +1,4 @@ +// eslint-disable-next-line @typescript-eslint/no-unused-vars import { ColorValue, Platform, ViewStyle } from 'react-native'; export type ShadowParams = { diff --git a/tsconfig.json b/tsconfig.json index 6d6372a..2553611 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -7,7 +7,6 @@ "allowUnreachableCode": false, "allowUnusedLabels": false, "esModuleInterop": true, - "importsNotUsedAsValues": "error", "forceConsistentCasingInFileNames": true, "jsx": "react", "lib": ["esnext"], @@ -24,5 +23,6 @@ "skipLibCheck": true, "strict": true, "target": "esnext" - } + }, + "exclude": ["example"] }