Skip to content

Commit

Permalink
prebuild workflow updates (#2)
Browse files Browse the repository at this point in the history
  • Loading branch information
thejcfactor authored Jul 23, 2024
1 parent 212c9c6 commit 296bea6
Show file tree
Hide file tree
Showing 9 changed files with 417 additions and 47 deletions.
247 changes: 246 additions & 1 deletion .github/workflows/prebuilds.yml
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,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));"
Expand All @@ -87,4 +90,246 @@ jobs:
retention-days: 1
name: couchnode-columnar-${{ inputs.version }}-sdist
path: |
./sdist/*.tgz
./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 <<EOF
let pkgJson = JSON.parse(fs.readFileSync('package.json'))
const idx = pkgJson.files.indexOf('scripts/*.js')
pkgJson.files.splice(idx, 0, 'build/**/*')
fs.writeFileSync('package.json', JSON.stringify(pkgJson, null, 2))
EOF
node -e "$(tr '\n' ';' < packageJsonEdit.txt)"
- name: Create package
id: create_package
run: |
ls -alh
npm run prepare
npm pack
ls -alh
rm -rf node_modules
PKG_NAME=$(find . -name '*.tgz' | cut -c 3-)
mv $PKG_NAME $COUCHNODE_COLUMNAR_PKG
echo "package_name=${COUCHNODE_COLUMNAR_PKG}" >> "$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 <<EOF
let pkgJson = JSON.parse(fs.readFileSync('package.json'))
const idx = pkgJson.files.indexOf('scripts/*.js')
pkgJson.files.splice(idx, 0, 'build/**/*')
fs.writeFileSync('package.json', JSON.stringify(pkgJson, null, 2))
EOF
node -e "$(tr '\n' ';' < packageJsonEdit.txt)"
- name: Create package
id: create_package
run: |
ls -alh
npm run prepare
npm pack
ls -alh
rm -rf node_modules
PKG_NAME=$(find . -name '*.tgz' | cut -c 3-)
mv $PKG_NAME $COUCHNODE_COLUMNAR_PKG
echo "package_name=${COUCHNODE_COLUMNAR_PKG}" >> "$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 <<EOF
let pkgJson = JSON.parse(fs.readFileSync('package.json'))
const idx = pkgJson.files.indexOf('scripts/*.js')
pkgJson.files.splice(idx, 0, 'build/**/*')
fs.writeFileSync('package.json', JSON.stringify(pkgJson, null, 2))
EOF
node -e "$(tr '\n' ';' < packageJsonEdit.txt)"
- name: Create package
id: create_package
run: |
ls -alh
npm run prepare
npm pack
ls -alh
rm -rf node_modules
PKG_NAME=$(find . -name '*.tgz' | cut -c 3-)
mv $PKG_NAME $COUCHNODE_COLUMNAR_PKG
echo "package_name=${COUCHNODE_COLUMNAR_PKG}" >> "$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 }}
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ config.json
/deps/couchbase-cxx-cache
*.tar.gz
*.pem
!/lib/nonProdCertificates/*.pem

# Extra stuff
/dist/
59 changes: 59 additions & 0 deletions examples/query.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
const columnar = require('couchbase-columnar')

async function main() {
// Update this to your cluster
const clusterConnStr = 'couchbases://--your-instance--'
const username = 'username'
const password = 'P@ssw0rd_12345!'
// User Input ends here.

const credential = new columnar.Credential(username, password)
const cluster = columnar.createInstance(clusterConnStr, credential, {
timeoutOptions: {
queryTimeout: 10000,
connectTimeout: 2000,
dispatchTimeout: 5000,
},
securityOptions: {
trustOnlyCertificates: columnar.Certificates.getNonprodCertificates(),
},
})

// Execute a streaming query with positional arguments.
let qs = 'SELECT * FROM `travel-sample`.inventory.airline LIMIT 10;'
let res = await cluster.executeQuery(qs)
for await (let row of res.rows()) {
console.log('Found row: ', row)
}
console.log('Metadata: ', res.metadata())

// Execute a streaming query with positional arguments.
qs =
'SELECT * FROM `travel-sample`.inventory.airline WHERE country=$1 LIMIT $2;'
res = await cluster.executeQuery(qs, { parameters: ['United States', 10] })
for await (let row of res.rows()) {
console.log('Found row: ', row)
}
console.log('Metadata: ', res.metadata())

// Execute a streaming query with named parameters.
qs =
'SELECT * FROM `travel-sample`.inventory.airline WHERE country=$country LIMIT $limit;'
res = await cluster.executeQuery(qs, {
parameters: { country: 'United States', limit: 10 },
})
for await (let row of res.rows()) {
console.log('Found row: ', row)
}
console.log('Metadata: ', res.metadata())
}

main()
.then(() => {
console.log('Finished. Exiting app...')
})
.catch((err) => {
console.log('ERR: ', err)
console.log('Exiting app...')
process.exit(1)
})
59 changes: 59 additions & 0 deletions examples/query.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import { Certificates, Credential, createInstance } from "couchbase-columnar";

async function main() {
// Update this to your cluster
const clusterConnStr = 'couchbases://--your-instance--'
const username = 'username'
const password = 'P@ssw0rd_12345!'
// User Input ends here.

const credential = new Credential(username, password);
const cluster = createInstance(clusterConnStr, credential, {
timeoutOptions: {
queryTimeout: 10000,
connectTimeout: 2000,
dispatchTimeout: 5000,
},
securityOptions: {
trustOnlyCertificates: Certificates.getNonprodCertificates(),
},
});

// Execute a streaming query with positional arguments.
let qs = "SELECT * FROM `travel-sample`.inventory.airline LIMIT 10;";
let res = await cluster.executeQuery(qs);
for await (let row of res.rows()) {
console.log("Found row: ", row);
}
console.log("Metadata: ", res.metadata());

// Execute a streaming query with positional arguments.
qs =
"SELECT * FROM `travel-sample`.inventory.airline WHERE country=$1 LIMIT $2;";
res = await cluster.executeQuery(qs, { parameters: ["United States", 10] });
for await (let row of res.rows()) {
console.log("Found row: ", row);
}
console.log("Metadata: ", res.metadata());

// Execute a streaming query with named parameters.
qs =
"SELECT * FROM `travel-sample`.inventory.airline WHERE country=$country LIMIT $limit;";
res = await cluster.executeQuery(qs, {
parameters: { country: "United States", limit: 10 },
});
for await (let row of res.rows()) {
console.log("Found row: ", row);
}
console.log("Metadata: ", res.metadata());
}

main()
.then(() => {
console.log("Finished. Exiting app...");
})
.catch((err) => {
console.log("ERR: ", err);
console.log("Exiting app...");
process.exit(1);
});
2 changes: 1 addition & 1 deletion lib/certificates.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'))
Expand Down
Loading

0 comments on commit 296bea6

Please sign in to comment.