diff --git a/.github/workflows/release-executables.yml b/.github/workflows/release-executables.yml index 8bd3bd0920..686cdf0d57 100644 --- a/.github/workflows/release-executables.yml +++ b/.github/workflows/release-executables.yml @@ -5,13 +5,13 @@ on: workflow_dispatch: inputs: tag: - description: "Timely version" + description: "Tag name" required: true - # Triggered by release-nightly-dev.yml / release-pr.yml + # Triggered by release-nocodb.yml workflow_call: inputs: tag: - description: "Timely version" + description: "Tag name" required: true type: string secrets: @@ -21,10 +21,15 @@ jobs: build-executables: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + # Get the latest draft release for asset upload url + - uses: cardinalby/git-get-release-action@v1 + id: get_release + env: + GITHUB_TOKEN: ${{ secrets.NC_GITHUB_TOKEN }} with: - token: ${{ secrets.NC_GITHUB_TOKEN }} - repository: 'nocodb/nocodb-timely' + latest: 1 + draft: true + - uses: actions/checkout@v3 - name: Cache node modules id: cache-npm uses: actions/cache@v3 @@ -38,6 +43,7 @@ jobs: ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- ${{ runner.os }}- + - name: Cache pkg modules id: cache-pkg uses: actions/cache@v3 @@ -51,6 +57,8 @@ jobs: ${{ runner.os }}-build-${{ env.cache-name }}- ${{ runner.os }}-build- ${{ runner.os }}- + + # for building images for all platforms these libraries are required in Linux - name: Install QEMU and ldid run: | sudo apt update @@ -62,26 +70,17 @@ jobs: ./make.sh sudo cp ./ldid /usr/local/bin - - name: Update nocodb-timely - env: - TAG: ${{ github.event.inputs.tag || inputs.tag }} - run: | - npm i -E nocodb-daily@$TAG - - git config user.name 'github-actions[bot]' - git config user.email 'github-actions[bot]@users.noreply.github.com' - - git commit package.json -m "Update to $TAG" - git tag $TAG - git push --tags - - - uses: actions/setup-node@v3 with: node-version: 16 - - name : Install dependencies and build executables + - name : Install nocodb, other dependencies and build executables run: | + cd ./scripts/pkg-executable + + # Install nocodb version based on provided tag name + npm i -E nocodb@$TAG + # install npm dependendencies npm i @@ -89,31 +88,66 @@ jobs: rsync -rvzhP ./binaries/binding/ ./node_modules/sqlite3/lib/binding/ # clean up code to optimize size - npx modclean --patterns="default:*" --ignore="nc-lib-gui-daily/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run + npx modclean --patterns="default:*" --ignore="nc-lib-gui/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run # build executables npm run build + ls ./dist + + # Move macOS executables for signing mkdir ./mac-dist mv ./dist/Noco-macos-arm64 ./mac-dist/ mv ./dist/Noco-macos-x64 ./mac-dist/ - - name: Upload executables(except mac executables) to release - uses: svenstaro/upload-release-action@v2 + - name: Upload win-arm64 build to asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.get_release.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/dist/Noco-win-arm64.exe + asset_name: Noco-win-arm64 + asset_content_type: application/octet-stream + + - name: Upload win-x64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - repo_token: ${{ secrets.NC_GITHUB_TOKEN }} - file: dist/** - tag: ${{ github.event.inputs.tag || inputs.tag }} - overwrite: true - file_glob: true - repo_name: nocodb/nocodb-timely + upload_url: ${{ steps.get_release.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/dist/Noco-win-x64.exe + asset_name: Noco-win-x64 + asset_content_type: application/octet-stream + + - name: Upload linux-arm64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.get_release.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/dist/Noco-linux-arm64 + asset_name: Noco-linux-arm64 + asset_content_type: application/octet-stream + + - name: Upload linux-x64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.get_release.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/dist/Noco-linux-x64 + asset_name: Noco-linux-x64 + asset_content_type: application/octet-stream - uses: actions/upload-artifact@master with: name: ${{ github.event.inputs.tag || inputs.tag }} - path: mac-dist + path: scripts/pkg-executable/mac-dist retention-days: 1 - + outputs: + upload_url: ${{ steps.get_release.outputs.upload_url }} sign-mac-executables: runs-on: macos-latest needs: build-executables @@ -122,37 +156,111 @@ jobs: - uses: actions/download-artifact@master with: name: ${{ github.event.inputs.tag || inputs.tag }} - path: mac-dist + path: scripts/pkg-executable/mac-dist - name: Sign macOS executables run: | - /usr/bin/codesign --force -s - ./mac-dist/Noco-macos-arm64 -v - /usr/bin/codesign --force -s - ./mac-dist/Noco-macos-x64 -v + /usr/bin/codesign --force -s - ./scripts/pkg-executable/mac-dist/Noco-macos-arm64 -v + /usr/bin/codesign --force -s - ./scripts/pkg-executable/mac-dist/Noco-macos-x64 -v - uses: actions/upload-artifact@master with: name: ${{ github.event.inputs.tag || inputs.tag }} - path: mac-dist + path: scripts/pkg-executable/mac-dist retention-days: 1 - publish-mac-executables: - needs: sign-mac-executables + publish-mac-executables-and-homebrew: + needs: [sign-mac-executables,build-executables] runs-on: ubuntu-latest steps: - uses: actions/download-artifact@master with: name: ${{ github.event.inputs.tag || inputs.tag }} - path: mac-dist + path: scripts/pkg-executable/mac-dist + + - - name: Upload mac executables to release - uses: svenstaro/upload-release-action@v2 + - uses: actions/checkout@v3 + with: + path: 'homebrew-nocodb' + token: ${{ secrets.NC_GITHUB_TOKEN }} + repository: 'nocodb/homebrew-nocodb' + fetch-depth: 0 + + - name: Compress files and calculate checksum + run: | + cd ./scripts/pkg-executable + cp ./mac-dist/Noco-macos-x64 ./mac-dist/nocodb + tar -czf ./mac-dist/nocodb.tar.gz ./mac-dist/nocodb + rm ./mac-dist/nocodb + echo "::set-output name=CHECKSUM::$(shasum -a 256 ./mac-dist/nocodb.tar.gz | awk '{print $1}')" + id: compress + + + - name: Upload macos-x64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.build-executables.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/mac-dist/Noco-macos-x64 + asset_name: Noco-macos-x64 + asset_content_type: application/octet-stream + + + + - name: Upload macos-arm64 build to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ needs.build-executables.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/mac-dist/Noco-macos-arm64 + asset_name: Noco-macos-arm64 + asset_content_type: application/octet-stream + + + + - name: Upload macos compressed build(for homebrew) to asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: - repo_token: ${{ secrets.NC_GITHUB_TOKEN }} - file: mac-dist/** - tag: ${{ github.event.inputs.tag || inputs.tag }} - overwrite: true - file_glob: true - repo_name: nocodb/nocodb-timely + upload_url: ${{ needs.build-executables.outputs.upload_url }} + asset_path: ./scripts/pkg-executable/mac-dist/nocodb.tar.gz + asset_name: nocodb.tar.gz + asset_content_type: application/octet-stream + + + - name: Generate Homebrew Formula class and push + run: | + FORMULA_CLASS_STR=$(cat << EOF + class Nocodb < Formula + desc "Get Human Readable file size information. - CLI" + homepage "https://github.com/nocodb/nocodb" + url "https://github.com/nocodb/nocodb/releases/download/${{ github.event.inputs.tag || inputs.tag }}/nocodb.tar.gz" + sha256 "${{ steps.compress.outputs.CHECKSUM }}" + license "MIT" + version "${{ github.event.inputs.tag || inputs.tag }}" + + def install + bin.install "nocodb" + end + end + EOF + ) + + cd ./homebrew-nocodb + + printf "$FORMULA_CLASS_STR" > ./Formula/nocodb.rb + + git config user.name 'github-actions[bot]' + git config user.email 'github-actions[bot]@users.noreply.github.com' + + git commit ./Formula/nocodb.rb -m "Automatic publish" + git push + + diff --git a/.github/workflows/release-nightly-dev.yml b/.github/workflows/release-nightly-dev.yml index 76322d0135..79b651cf8d 100644 --- a/.github/workflows/release-nightly-dev.yml +++ b/.github/workflows/release-nightly-dev.yml @@ -51,7 +51,7 @@ jobs: # Build executables and publish to GitHub release-executables: needs: [set-tag, release-npm] - uses: ./.github/workflows/release-executables.yml + uses: ./.github/workflows/release-timely-executables.yml with: tag: ${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.nightly_build_tag }} secrets: diff --git a/.github/workflows/release-nocodb.yml b/.github/workflows/release-nocodb.yml index 0fe5ba1e03..cf09af5b83 100644 --- a/.github/workflows/release-nocodb.yml +++ b/.github/workflows/release-nocodb.yml @@ -44,14 +44,14 @@ jobs: # bump the version from PREV_TAG TARGET_TAG=$(echo ${PREV_TAG} | awk -F. -v OFS=. '{$NF += 1 ; print}') fi - + echo target version: ${TARGET_TAG} echo previous version: ${PREV_TAG} echo "::set-output name=target_tag::${TARGET_TAG}" echo "::set-output name=prev_tag::${PREV_TAG}" - name: Verify run : | - echo ${{ steps.process-input.outputs.target_tag }} + echo ${{ steps.process-input.outputs.target_tag }} # Merge develop to master pr-to-master: @@ -94,6 +94,15 @@ jobs: DOCKERHUB_USERNAME: "${{ secrets.DOCKERHUB_USERNAME }}" DOCKERHUB_TOKEN: "${{ secrets.DOCKERHUB_TOKEN }}" + # Build executables and publish to GitHub + release-executables: + needs: [release-draft-note, process-input] + uses: ./.github/workflows/release-executables.yml + with: + tag: ${{ needs.process-input.outputs.target_tag }} + secrets: + NC_GITHUB_TOKEN: "${{ secrets.NC_GITHUB_TOKEN }}" + # Close all issues with target tags 'Fixed' & 'Resolved' close-fixed-issues: needs: [release-docker, process-input] @@ -101,7 +110,7 @@ jobs: with: issue_label: 'Status: Fixed' version: ${{ needs.process-input.outputs.target_tag }} - + close-resolved-issues: needs: [close-fixed-issues, process-input] uses: ./.github/workflows/release-close-issue.yml diff --git a/.github/workflows/release-pr.yml b/.github/workflows/release-pr.yml index 61a7a352ff..9d19da81a6 100644 --- a/.github/workflows/release-pr.yml +++ b/.github/workflows/release-pr.yml @@ -80,7 +80,7 @@ jobs: # Build executables and publish to GitHub release-executables: needs: [set-tag, release-npm] - uses: ./.github/workflows/release-executables.yml + uses: ./.github/workflows/release-timely-executables.yml with: tag: ${{ needs.set-tag.outputs.current_version }}-${{ needs.set-tag.outputs.target_tag }} secrets: diff --git a/.github/workflows/release-timely-executables.yml b/.github/workflows/release-timely-executables.yml new file mode 100644 index 0000000000..9f8b0c7c1a --- /dev/null +++ b/.github/workflows/release-timely-executables.yml @@ -0,0 +1,158 @@ +name: "Release : Timely Executables" + +on: + # Triggered manually + workflow_dispatch: + inputs: + tag: + description: "Timely version" + required: true + # Triggered by release-nightly-dev.yml / release-pr.yml + workflow_call: + inputs: + tag: + description: "Timely version" + required: true + type: string + secrets: + NC_GITHUB_TOKEN: + required: true +jobs: + build-executables: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + token: ${{ secrets.NC_GITHUB_TOKEN }} + repository: 'nocodb/nocodb-timely' + - name: Cache node modules + id: cache-npm + uses: actions/cache@v3 + env: + cache-name: cache-node-modules + with: + # npm cache files are stored in `~/.npm` on Linux/macOS + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Cache pkg modules + id: cache-pkg + uses: actions/cache@v3 + env: + cache-name: cache-pkg + with: + # pkg cache files are stored in `~/.pkg-cache` + path: ~/.pkg-cache + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + ${{ runner.os }}-build- + ${{ runner.os }}- + - name: Install QEMU and ldid + run: | + sudo apt update + # Install qemu + sudo apt install qemu binfmt-support qemu-user-static + # install ldid + git clone https://github.com/daeken/ldid.git + cd ./ldid + ./make.sh + sudo cp ./ldid /usr/local/bin + + - name: Update nocodb-timely + env: + TAG: ${{ github.event.inputs.tag || inputs.tag }} + run: | + npm i -E nocodb-daily@$TAG + + git config user.name 'github-actions[bot]' + git config user.email 'github-actions[bot]@users.noreply.github.com' + + git commit package.json -m "Update to $TAG" + git tag $TAG + git push --tags + + + - uses: actions/setup-node@v3 + with: + node-version: 16 + + - name : Install dependencies and build executables + run: | + # install npm dependendencies + npm i + + # Copy sqlite binaries + rsync -rvzhP ./binaries/binding/ ./node_modules/sqlite3/lib/binding/ + + # clean up code to optimize size + npx modclean --patterns="default:*" --ignore="nc-lib-gui-daily/**,dayjs/**,express-status-monitor/**,sqlite3/**" --run + + # build executables + npm run build + + mkdir ./mac-dist + mv ./dist/Noco-macos-arm64 ./mac-dist/ + mv ./dist/Noco-macos-x64 ./mac-dist/ + + - name: Upload executables(except mac executables) to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.NC_GITHUB_TOKEN }} + file: dist/** + tag: ${{ github.event.inputs.tag || inputs.tag }} + overwrite: true + file_glob: true + repo_name: nocodb/nocodb-timely + + - uses: actions/upload-artifact@master + with: + name: ${{ github.event.inputs.tag || inputs.tag }} + path: mac-dist + retention-days: 1 + + sign-mac-executables: + runs-on: macos-latest + needs: build-executables + steps: + + - uses: actions/download-artifact@master + with: + name: ${{ github.event.inputs.tag || inputs.tag }} + path: mac-dist + + - name: Sign macOS executables + run: | + /usr/bin/codesign --force -s - ./mac-dist/Noco-macos-arm64 -v + /usr/bin/codesign --force -s - ./mac-dist/Noco-macos-x64 -v + + - uses: actions/upload-artifact@master + with: + name: ${{ github.event.inputs.tag || inputs.tag }} + path: mac-dist + retention-days: 1 + + + publish-mac-executables: + needs: sign-mac-executables + runs-on: ubuntu-latest + steps: + - uses: actions/download-artifact@master + with: + name: ${{ github.event.inputs.tag || inputs.tag }} + path: mac-dist + + - name: Upload mac executables to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.NC_GITHUB_TOKEN }} + file: mac-dist/** + tag: ${{ github.event.inputs.tag || inputs.tag }} + overwrite: true + file_glob: true + repo_name: nocodb/nocodb-timely + + diff --git a/scripts/pkg-executable/binaries/binding/napi-v3-darwin-arm64/node_sqlite3.node b/scripts/pkg-executable/binaries/binding/napi-v3-darwin-arm64/node_sqlite3.node new file mode 100755 index 0000000000..0741ec33a4 Binary files /dev/null and b/scripts/pkg-executable/binaries/binding/napi-v3-darwin-arm64/node_sqlite3.node differ diff --git a/scripts/pkg-executable/binaries/binding/napi-v3-darwin-x64/node_sqlite3.node b/scripts/pkg-executable/binaries/binding/napi-v3-darwin-x64/node_sqlite3.node new file mode 100755 index 0000000000..078ce25dc5 Binary files /dev/null and b/scripts/pkg-executable/binaries/binding/napi-v3-darwin-x64/node_sqlite3.node differ diff --git a/scripts/pkg-executable/binaries/binding/napi-v3-linux-x64/node_sqlite3.node b/scripts/pkg-executable/binaries/binding/napi-v3-linux-x64/node_sqlite3.node new file mode 100755 index 0000000000..100124214a Binary files /dev/null and b/scripts/pkg-executable/binaries/binding/napi-v3-linux-x64/node_sqlite3.node differ diff --git a/scripts/pkg-executable/binaries/binding/napi-v3-win32-ia32/node_sqlite3.node b/scripts/pkg-executable/binaries/binding/napi-v3-win32-ia32/node_sqlite3.node new file mode 100644 index 0000000000..c355fd9d78 Binary files /dev/null and b/scripts/pkg-executable/binaries/binding/napi-v3-win32-ia32/node_sqlite3.node differ diff --git a/scripts/pkg-executable/binaries/binding/napi-v3-win32-x64/node_sqlite3.node b/scripts/pkg-executable/binaries/binding/napi-v3-win32-x64/node_sqlite3.node new file mode 100644 index 0000000000..2a16da4ef8 Binary files /dev/null and b/scripts/pkg-executable/binaries/binding/napi-v3-win32-x64/node_sqlite3.node differ diff --git a/scripts/pkg-executable/index.js b/scripts/pkg-executable/index.js new file mode 100644 index 0000000000..58655a1f6f --- /dev/null +++ b/scripts/pkg-executable/index.js @@ -0,0 +1,12 @@ +process.env.NC_BINARY_BUILD = 'true'; +(async () => { + try { + const app = require('express')(); + const {Noco} = require("nocodb"); + const httpServer = app.listen(process.env.PORT || 8080); + app.use(await Noco.init({}, httpServer, app)); + console.log(`Visit : localhost:${process.env.PORT}/dashboard`) + } catch(e) { + console.log(e) + } +})() diff --git a/scripts/pkg-executable/package.json b/scripts/pkg-executable/package.json new file mode 100644 index 0000000000..fb708c7338 --- /dev/null +++ b/scripts/pkg-executable/package.json @@ -0,0 +1,33 @@ +{ + "name": "Noco", + "version": "1.0.0", + "description": "", + "main": "index.js", + "bin": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node index.js", + "upgrade": "npm uninstall --save nocodb && npm install --save nocodb", + "build": "npx pkg . --out-path dist --compress GZip" + }, + "pkg": { + "assets": [ + "node_modules/**/*" + ], + "targets": [ + "node16-linux-arm64", + "node16-macos-arm64", + "node16-win-arm64", + "node16-linux-x64", + "node16-macos-x64", + "node16-win-x64" + ] + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "express": "^4.17.1", + "nocodb": "0.91.10" + } +}