From fd59e6e65f462ca5c011521254959cf484218833 Mon Sep 17 00:00:00 2001 From: Jared Casey Date: Fri, 19 Jul 2024 15:50:09 -0500 Subject: [PATCH] prebuild workflow updates --- .github/workflows/prebuilds.yml | 248 +++++++++++++++++++++++++++- .gitignore | 1 + lib/certificates.ts | 2 +- lib/nonProdCertificates/nonprod.pem | 19 +++ package.json | 8 +- scripts/copyCertificates.js | 16 ++ 6 files changed, 289 insertions(+), 5 deletions(-) create mode 100644 lib/nonProdCertificates/nonprod.pem create mode 100644 scripts/copyCertificates.js diff --git a/.github/workflows/prebuilds.yml b/.github/workflows/prebuilds.yml index 93ddd69..a3f8c8f 100644 --- a/.github/workflows/prebuilds.yml +++ b/.github/workflows/prebuilds.yml @@ -40,6 +40,7 @@ jobs: - name: Checkout uses: actions/checkout@v4 with: + ref: 'ci_updates' submodules: recursive fetch-depth: 0 fetch-tags: true @@ -77,6 +78,9 @@ jobs: - name: Create sdist id: build_sdist run: | + pwd + ls -alh + ls -alh ./lib rm -rf ./build node -e "var x = JSON.parse(fs.readFileSync('package.json')); x.version = '${{ inputs.version }}'; fs.writeFileSync('package.json', JSON.stringify(x));" node -e "var x = JSON.parse(fs.readFileSync('package-lock.json')); x.version = '${{ inputs.version }}'; fs.writeFileSync('package-lock.json', JSON.stringify(x));" @@ -87,4 +91,246 @@ jobs: retention-days: 1 name: couchnode-columnar-${{ inputs.version }}-sdist path: | - ./sdist/*.tgz \ No newline at end of file + ./sdist/*.tgz + - name: Set npm pack requirements + run: | + mkdir npmpack-reqs + cd npmpack-reqs + cp ../tsconfig.json . + cp -r ../lib . + cp ../.npmignore . + ls -alh + - uses: actions/upload-artifact@v4 + with: + retention-days: 1 + name: couchnode-columnar-${{ inputs.version }}-npmpack-reqs + path: | + ./npmpack-reqs + + linux_x86_64_prebuild: + runs-on: ubuntu-20.04 + needs: sdist + steps: + - uses: actions/download-artifact@v4 + with: + name: couchnode-columnar-${{ inputs.version }}-sdist + - uses: actions/download-artifact@v4 + with: + name: couchnode-columnar-${{ inputs.version }}-npmpack-reqs + - name: Extract sdist source + run: | + ls -alh + tar -xvzf couchbase-columnar-$COUCHNODE_COLUMNAR_VERSION.tgz + cp -r package/** . + rm -rf package + env: + COUCHNODE_COLUMNAR_VERSION: ${{ inputs.version }} + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "18.x" + - name: Confirm Node version + run: node --version + - name: Install dependencies + run: | + npm install --ignore-scripts + - name: Build binary + run: | + npm run prebuild -- --use-boringssl + - name: Reduce prebuild size + run: | + cd build/Release + ls -alh + cp couchbase_impl.node couchbase_impl.orig.node + objcopy --strip-debug --strip-unneeded couchbase_impl.node + ls -alh + cd ../.. + mv build/Release/couchbase_impl.node . + rm -rf build + mkdir -p build/Release + mv couchbase_impl.node build/Release + - name: Edit package.json + run: | + cat > packageJsonEdit.txt <> "$GITHUB_OUTPUT" + mkdir output + mv $COUCHNODE_COLUMNAR_PKG output + env: + COUCHNODE_COLUMNAR_PKG: couchbase-coulumnar-${{ inputs.version }}-linux-x64-napi.tgz + - uses: actions/upload-artifact@v4 + with: + retention-days: 1 + name: ${{ steps.create_package.outputs.package_name }} + path: | + ./output/${{ steps.create_package.outputs.package_name }} + + macos_arm64_prebuild: + runs-on: macos-14 + needs: sdist + steps: + - uses: actions/download-artifact@v4 + with: + name: couchnode-columnar-${{ inputs.version }}-sdist + - uses: actions/download-artifact@v4 + with: + name: couchnode-columnar-${{ inputs.version }}-npmpack-reqs + - name: Extract sdist source + run: | + ls -alh + tar -xvzf couchbase-columnar-$COUCHNODE_COLUMNAR_VERSION.tgz + cp -r package/** . + rm -rf package + env: + COUCHNODE_COLUMNAR_VERSION: ${{ inputs.version }} + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "18.x" + - name: Confirm Node version + run: node --version + - name: Install dependencies + run: | + npm install --ignore-scripts + - name: Build binary + run: | + npm run prebuild -- --use-boringssl + - name: Reduce prebuild size + run: | + cd build/Release + ls -alh + cp couchbase_impl.node couchbase_impl.orig.node + xcrun strip -Sx couchbase_impl.node + ls -alh + cd ../.. + mv build/Release/couchbase_impl.node . + rm -rf build + mkdir -p build/Release + mv couchbase_impl.node build/Release + - name: Edit package.json + run: | + cat > packageJsonEdit.txt <> "$GITHUB_OUTPUT" + mkdir output + mv $COUCHNODE_COLUMNAR_PKG output + env: + COUCHNODE_COLUMNAR_PKG: couchbase-coulumnar-${{ inputs.version }}-darwin-arm64-napi.tgz + - uses: actions/upload-artifact@v4 + with: + retention-days: 1 + name: ${{ steps.create_package.outputs.package_name }} + path: | + ./output/${{ steps.create_package.outputs.package_name }} + + macos_x86_64_prebuild: + runs-on: macos-13 + needs: sdist + steps: + - uses: actions/download-artifact@v4 + with: + name: couchnode-columnar-${{ inputs.version }}-sdist + - uses: actions/download-artifact@v4 + with: + name: couchnode-columnar-${{ inputs.version }}-npmpack-reqs + - name: Extract sdist source + run: | + ls -alh + tar -xvzf couchbase-columnar-$COUCHNODE_COLUMNAR_VERSION.tgz + cp -r package/** . + rm -rf package + env: + COUCHNODE_COLUMNAR_VERSION: ${{ inputs.version }} + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: "18.x" + - name: Confirm Node version + run: node --version + - name: Install dependencies + run: | + npm install --ignore-scripts + - name: Downgrade CMake + run: | + brew uninstall cmake + mkdir ~/Downloads/CMake + curl --silent --location --retry 3 "https://github.com/Kitware/CMake/releases/download/v3.28.1/cmake-3.28.1-macos-universal.dmg" --output ~/Downloads/CMake/cmake-Darwin-x86_64.dmg + yes | PAGER=cat hdiutil attach -quiet -mountpoint /Volumes/cmake-Darwin-x86_64 ~/Downloads/CMake/cmake-Darwin-x86_64.dmg + cp -R /Volumes/cmake-Darwin-x86_64/CMake.app /Applications/ + hdiutil detach /Volumes/cmake-Darwin-x86_64 + sudo "/Applications/CMake.app/Contents/bin/cmake-gui" --install=/usr/local/bin + - name: Build binary + run: | + npm run prebuild -- --use-boringssl + - name: Reduce prebuild size + run: | + cd build/Release + ls -alh + cp couchbase_impl.node couchbase_impl.orig.node + xcrun strip -Sx couchbase_impl.node + ls -alh + cd ../.. + mv build/Release/couchbase_impl.node . + rm -rf build + mkdir -p build/Release + mv couchbase_impl.node build/Release + - name: Edit package.json + run: | + cat > packageJsonEdit.txt <> "$GITHUB_OUTPUT" + mkdir output + mv $COUCHNODE_COLUMNAR_PKG output + env: + COUCHNODE_COLUMNAR_PKG: couchbase-coulumnar-${{ inputs.version }}-darwin-x64-napi.tgz + - uses: actions/upload-artifact@v4 + with: + retention-days: 1 + name: ${{ steps.create_package.outputs.package_name }} + path: | + ./output/${{ steps.create_package.outputs.package_name }} \ No newline at end of file diff --git a/.gitignore b/.gitignore index ba02ab5..02b94f2 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,7 @@ config.json /deps/couchbase-cxx-cache *.tar.gz *.pem +!/lib/nonProdCertificates/*.pem # Extra stuff /dist/ diff --git a/lib/certificates.ts b/lib/certificates.ts index ff6a3eb..c6bef8d 100644 --- a/lib/certificates.ts +++ b/lib/certificates.ts @@ -10,7 +10,7 @@ export class Certificates { */ public static getNonprodCertificates(): string[] { const basePath = path.resolve(path.dirname(__filename), '..') - const certPath = path.join(basePath, 'lib', 'nonprodCertificates') + const certPath = path.join(basePath, 'dist', 'nonprodCertificates') const certificates: string[] = [] fs.readdirSync(certPath).forEach((fileName) => { certificates.push(fs.readFileSync(path.join(certPath, fileName), 'utf-8')) diff --git a/lib/nonProdCertificates/nonprod.pem b/lib/nonProdCertificates/nonprod.pem new file mode 100644 index 0000000..2bd5744 --- /dev/null +++ b/lib/nonProdCertificates/nonprod.pem @@ -0,0 +1,19 @@ +-----BEGIN CERTIFICATE----- +MIIDFTCCAf2gAwIBAgIRANguFcFZ7eVLTF2mnPqkkhYwDQYJKoZIhvcNAQELBQAw +JDESMBAGA1UECgwJQ291Y2hiYXNlMQ4wDAYDVQQLDAVDbG91ZDAeFw0xOTEwMTgx +NDUzMzRaFw0yOTEwMTgxNTUzMzRaMCQxEjAQBgNVBAoMCUNvdWNoYmFzZTEOMAwG +A1UECwwFQ2xvdWQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDMoL2G +1yR4XKOL5KrAZbgJI11NkcooxqCSqoibr5nSM+GNARlou42XbopRhkLQlSMlmH7U +ZreI7xq2MqmCaQvP1jdS5al/GwuwAP+2kU2nz4IHzliCVV6YvYqNy0fygNpYky9/ +wjCu32n8Ae0AZuxcsAzPUtJBvIIGHum08WlLYS3gNrYkfyds6LfvZvqMk703RL5X +Ny/RXWmbbBXAXh0chsavEK7EsDLI4t4WI2Iv8+lwS7Wo7Vh6NnEmJLPAAp7udNK4 +U3nwjkL5p/yINROT7CxUE9x0IB2l2rZwZiJhgHCpee77J8QesDut+jZu38ZYY3le +PS38S81T6I6bSSgtAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE +FLlocLdzgAeibrlCmEO4OH5Buf3vMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0B +AQsFAAOCAQEAkoVX5CJ7rGx2ALfzy5C7Z+tmEmrZ6jdHjDtw4XwWNhlrsgMuuboU +Y9XMinSSm1TVfvIz4ru82MVMRxq4v1tPwPdZabbzKYclHkwSMxK5BkyEKWzF1Hoq +UcinTaT68lVzkTc0D8T+gkRzwXIqxjML2ZdruD1foHNzCgeGHzKzdsjYqrnHv17b +J+f5tqoa5CKbnyWl3HP0k7r3HHQP0GQequoqXcL3XlERX3Ne20Chck9mftNnHhKw +Dby7ylZaP97sphqOZQ/W/gza7x1JYylrLXvjfdv3Nmu7oSMKO/2cDyWwcbVGkpbk +8JOQtFENWmr9u2S0cQfwoCSYBWaK0ofivA== +-----END CERTIFICATE----- diff --git a/package.json b/package.json index cf965bc..3111c2e 100644 --- a/package.json +++ b/package.json @@ -9,14 +9,15 @@ "homepage": "http://www.couchbase.com/communities/nodejs", "keywords": [ "couchbase", + "columnar", "libcouchbase", "memcached", "nosql", "json", "document" ], - "main": "dist/couchbase.js", - "types": "dist/couchbase.d.ts", + "main": "dist/columnar.js", + "types": "dist/columnar.d.ts", "license": "Apache-2.0", "name": "couchbase-columnar", "dependencies": { @@ -64,6 +65,7 @@ "rebuild": "cmake-js rebuild && tsc", "prebuild": "node ./scripts/buildPrebuild.js", "prepare": "tsc", + "prepack": "node ./scripts/copyCertificates.js", "help-prune": "node ./scripts/prune.js", "build-docs": "typedoc", "test": "ts-mocha test/*.test.*", @@ -87,10 +89,10 @@ "README.md", "BUILDING.md", "columnar-sdk-nodejs-black-duck-manifest.yaml", - "lib/nonprodCertificates/*.pem", "scripts/*.js", "src/*.{c,h}pp", "dist/*.{t,j}s", + "dist/nonProdCertificates/*.pem", "tools/*.{py,js}", "deps/couchbase-cxx-client/CMakeLists.txt", "deps/couchbase-cxx-client/LICENSE.txt", diff --git a/scripts/copyCertificates.js b/scripts/copyCertificates.js new file mode 100644 index 0000000..341e574 --- /dev/null +++ b/scripts/copyCertificates.js @@ -0,0 +1,16 @@ +const fs = require('fs') +const path = require('path') + +CERTIFICATE_DIR = path.join(path.resolve(__dirname, '..'), 'lib', 'nonProdCertificates') +DIST_CERTIFICATE_DIR = path.join(path.resolve(__dirname, '..'), 'dist', 'nonProdCertificates') +let files = fs.readdirSync(CERTIFICATE_DIR) + +if (files.length > 0 && !fs.existsSync(DIST_CERTIFICATE_DIR)) { + fs.mkdirSync(DIST_CERTIFICATE_DIR) +} + +for (let i = 0; i < files.length; i++) { + if (fs.statSync(path.join(CERTIFICATE_DIR, files[i])).isFile()) { + fs.copyFileSync(path.join(CERTIFICATE_DIR, files[i]), path.join(DIST_CERTIFICATE_DIR, files[i])) + } +} \ No newline at end of file