name: Jan Default Plugins on: push: branches: - main paths: - "plugins/**" - "!plugins/*/package.json" pull_request: branches: - main paths: - "plugins/**" - ".github/workflows/jan-plugins.yml" - "!plugins/*/package.json" jobs: build: runs-on: macos-latest environment: production outputs: branch_name: ${{ steps.commit_and_tag.outputs.branch_name }} steps: - uses: actions/checkout@v4 with: fetch-depth: "0" token: ${{ secrets.PAT_SERVICE_ACCOUNT }} - name: Install jq uses: dcarbone/install-jq-action@v2.0.1 - name: Get Cer for code signing run: base64 -d <<< "$CODE_SIGN_P12_BASE64" > /tmp/codesign.p12 shell: bash env: CODE_SIGN_P12_BASE64: ${{ secrets.CODE_SIGN_P12_BASE64 }} - uses: apple-actions/import-codesign-certs@v2 continue-on-error: true with: p12-file-base64: ${{ secrets.CODE_SIGN_P12_BASE64 }} p12-password: ${{ secrets.CODE_SIGN_P12_PASSWORD }} - name: Check Path Change run: | git config --global user.email "service@jan.ai" git config --global user.name "Service Account" echo "Changes in these directories trigger the build:" changed_dirs=$(git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.GITHUB_TOKEN }}" diff --name-only HEAD HEAD~1 | grep '^plugins/' | awk -F/ '{print $2}' | uniq) echo $changed_dirs > /tmp/change_dir.txt - name: "Auto Increase package Version" run: | cd plugins for dir in $(cat /tmp/change_dir.txt) do echo "$dir" # Extract current version current_version=$(jq -r '.version' $dir/package.json) # Break the version into its components major_version=$(echo $current_version | cut -d "." -f 1) minor_version=$(echo $current_version | cut -d "." -f 2) patch_version=$(echo $current_version | cut -d "." -f 3) # Increment the patch version by one new_patch_version=$((patch_version+1)) # Construct the new version new_version="$major_version.$minor_version.$new_patch_version" # Replace the old version with the new version in package.json jq --arg version "$new_version" '.version = $version' $dir/package.json > /tmp/package.json && mv /tmp/package.json $dir/package.json # Print the new version echo "Updated $dir package.json version to: $new_version" done # Setup .npmrc file to publish to npm - uses: actions/setup-node@v3 with: node-version: "20.x" registry-url: "https://registry.npmjs.org" - name: Publish npm packages run: | cd plugins for dir in $(cat /tmp/change_dir.txt) do echo $dir cd $dir npm install if [[ $dir == 'data-plugin' ]]; then npm run build:deps fi npm run postinstall && ../../.github/scripts/auto-sign.sh if [[ $GITHUB_EVENT_NAME == 'push' && $GITHUB_EVENT_PULL_REQUEST_HEAD_REPO_FULL_NAME != $GITHUB_REPOSITORY ]]; then npm publish --access public fi cd .. done env: NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} DEVELOPER_ID: ${{ secrets.DEVELOPER_ID }} APP_PATH: "." - name: "Commit new version to main and create tag" id: commit_and_tag if: github.event_name == 'push' && github.event.pull_request.head.repo.full_name != github.repository run: | rm -rf /tmp/plugin-catalog git clone https://${{ secrets.SERVICE_ACCOUNT_USERNAME }}:${{ secrets.PAT_SERVICE_ACCOUNT }}@github.com/janhq/plugin-catalog.git /tmp/plugin-catalog for dir in $(cat /tmp/change_dir.txt) do echo "$dir" version=$(jq -r '.version' plugins/$dir/package.json) git config --global user.email "service@jan.ai" git config --global user.name "Service Account" git add plugins/$dir/package.json git commit -m "${GITHUB_REPOSITORY}: Update tag build $version for $dir" git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.PAT_SERVICE_ACCOUNT }}" push origin HEAD:main git tag -a $dir-$version -m "${GITHUB_REPOSITORY}: Update tag build $version for $dir" git -c http.extraheader="AUTHORIZATION: bearer ${{ secrets.PAT_SERVICE_ACCOUNT }}" push origin $dir-$version plugin_name=$(jq -r '.name | sub("@janhq/"; "")' plugins/$dir/package.json) cp plugins/$dir/package.json /tmp/plugin-catalog/${plugin_name}.json done cd /tmp/plugin-catalog BRANCH_NAME="update-package-$(date +'%Y%m%d%H%M%S')" git checkout -b $BRANCH_NAME git add . git commit -m "Update plugin catalog" git push origin $BRANCH_NAME cd /tmp && rm -rf /tmp/plugin-catalog echo "BRANCH_NAME=$BRANCH_NAME" >> $GITHUB_ENV echo "::set-output name=branch_name::$BRANCH_NAME" pull_request: runs-on: ubuntu-latest environment: production if: github.event_name == 'push' && github.event.pull_request.head.repo.full_name != github.repository needs: build steps: - run: | gh pr create --title "Update plugin catalog" --body "Update plugin catalog" --base main --head ${{ needs.build.outputs.branch_name }} --repo janhq/plugin-catalog --reviewer louis-jan,hiento09 env: GITHUB_TOKEN: ${{ secrets.PAT_SERVICE_ACCOUNT }}