diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 1efb8cd..3bc2aa5 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,34 +16,35 @@ jobs: name: Test for node-${{ matrix.node-version }} on ${{ matrix.os }} runs-on: ${{ matrix.os }} - steps: - - name: Checkout - uses: actions/checkout@v4 - with: - submodules: true - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v4 - with: - cache: yarn - node-version: ${{ matrix.node-version }} + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true - - name: Install dependencies - run: yarn install --frozen-lockfile + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + cache: yarn + node-version: ${{ matrix.node-version }} - - name: Run tests - if: matrix.node-version < 20 - run: yarn test + - name: Install dependencies + run: yarn install --frozen-lockfile - - name: Run tests with coverage - if: matrix.node-version >= 20 - run: yarn test-coverage + - name: Run tests + run: yarn test test-alpine: - name: Test on Alpine Linux + strategy: + matrix: + node-version: [18, 20] + + name: Test for node-${{ matrix.node-version }} on Alpine Linux runs-on: ubuntu-latest + container: - image: node:18-alpine + image: node:${{ matrix.node-version }}-alpine steps: - name: Install build deps @@ -79,7 +80,7 @@ jobs: envs: 'YARN_GPG npm_config_debug npm_config_build_from_source' prepare: | pkg install -y gmake python3 yarn-node${{ matrix.node-version }} - run: | yarn install --frozen-lockfile + run: | yarn test sync: sshfs diff --git a/.github/workflows/dummy-release.yml b/.github/workflows/dummy-release.yml new file mode 100644 index 0000000..b7b37b8 --- /dev/null +++ b/.github/workflows/dummy-release.yml @@ -0,0 +1,166 @@ +name: Release + +on: [push] + +jobs: + build: + strategy: + matrix: + os: [ubuntu-20.04, macos-11, macos-m1, windows-2019] + + name: Build on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Use Node.js 20 + uses: actions/setup-node@v4 + with: + cache: yarn + node-version: 20 + + - name: Install dependencies + run: yarn install --frozen-lockfile --ignore-scripts + + - name: Prebuild + run: yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + path: prebuilds/**/*.node + + build-alpine: + name: Build on Alpine Linux + runs-on: ubuntu-latest + + container: + image: node:20-alpine + + steps: + - name: Install build deps + run: apk add make g++ python3 git + + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Install dependencies + run: yarn install --frozen-lockfile --ignore-scripts + + - name: Prebuild + run: yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + path: prebuilds/**/*.node + + build-arm: + strategy: + matrix: + include: + - arch: aarch64 + distro: ubuntu20.04 + - arch: aarch64 + distro: alpine_latest + + name: Build on arm64 + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Prebuild + uses: uraimo/run-on-arch-action@v2 + with: + arch: ${{ matrix.arch }} + distro: ${{ matrix.distro }} + setup: mkdir -p "${PWD}/artifacts" + dockerRunArgs: --volume "${PWD}:/repo" + install: | + case "${{ matrix.distro }}" in + ubuntu*|jessie|stretch|buster) + apt update -yq + apt install -yq curl make g++ python + curl -fsSL https://deb.nodesource.com/setup_20.x | bash - + apt install -yq nodejs + ;; + alpine*) + apk add --update make g++ python3 + apk add --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.17/main/ nodejs~=20 npm~=20 + ;; + esac + npm install --global yarn + run: | + cd /repo + yarn install --frozen-lockfile --ignore-scripts + yarn build + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + path: prebuilds/**/*.node + + build-freebsd: + name: Build on FreeBSD + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Package artifacts + uses: vmactions/freebsd-vm@v1 + with: + envs: "npm_config_build_from_source" + prepare: | + pkg install -y gmake python3 yarn-node20 + run: | + yarn install --frozen-lockfile --ignore-scripts + yarn build + sync: sshfs + + - name: Upload artifacts + uses: actions/upload-artifact@v3 + with: + path: prebuilds/**/*.node + + publish: + name: Publish package + runs-on: ubuntu-20.04 + needs: [build, build-alpine, build-arm, build-freebsd] + + container: + image: node:20-alpine + + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + submodules: true + + - name: Download artifacts + id: download-artifact + uses: actions/download-artifact@v3 + + - name: Rename prebuild artifacts directory + run: mv artifact/ prebuilds/ + + - name: Display structure of downloaded files + run: ls -R + + - name: Inspect package + run: | + yarn pack + tar --list --verbose --file argon2-*.tgz diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ae5d6eb..ffb74f0 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -9,7 +9,7 @@ jobs: strategy: matrix: os: [ubuntu-20.04, macos-11, macos-m1, windows-2019] -x + name: Build on ${{ matrix.os }} runs-on: ${{ matrix.os }} @@ -20,15 +20,13 @@ x submodules: true - name: Use Node.js 20 - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: cache: yarn node-version: 20 - - run: corepack enable yarn - - name: Install dependencies - run: yarn install --frozen-lockfile + run: yarn install --frozen-lockfile --ignore-scripts - name: Prebuild run: yarn build @@ -41,6 +39,7 @@ x build-alpine: name: Build on Alpine Linux runs-on: ubuntu-latest + container: image: node:20-alpine @@ -54,7 +53,7 @@ x submodules: true - name: Install dependencies - run: yarn install --frozen-lockfile + run: yarn install --frozen-lockfile --ignore-scripts - name: Prebuild run: yarn build @@ -65,8 +64,6 @@ x path: prebuilds/**/*.node build-arm: - name: Build on arm64 - runs-on: ubuntu-latest strategy: matrix: include: @@ -75,6 +72,9 @@ x - arch: aarch64 distro: alpine_latest + name: Build on arm64 + runs-on: ubuntu-latest + steps: - name: Checkout uses: actions/checkout@v4 @@ -95,17 +95,16 @@ x apt install -yq curl make g++ python curl -fsSL https://deb.nodesource.com/setup_20.x | bash - apt install -yq nodejs - npm install --global yarn ;; alpine*) apk add --update make g++ python3 apk add --no-cache --repository https://dl-cdn.alpinelinux.org/alpine/v3.17/main/ nodejs~=20 npm~=20 - npm install --global yarn ;; esac + corepack enable yarn run: | cd /repo - yarn install --frozen-lockfile + yarn install --frozen-lockfile --ignore-scripts yarn build - name: Upload artifacts @@ -129,8 +128,8 @@ x envs: "npm_config_build_from_source" prepare: | pkg install -y gmake python3 yarn-node20 + yarn install --frozen-lockfile --ignore-scripts run: | - yarn install --frozen-lockfile yarn build sync: sshfs @@ -144,22 +143,25 @@ x runs-on: ubuntu-20.04 needs: [build, build-alpine, build-arm, build-freebsd] + container: + image: node:20-alpine + steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: submodules: true - - - name: Use Node.js 20 - uses: actions/setup-node@v3 - with: - cache: yarn - node-version: 20 - registry-url: https://registry.npmjs.org/ + + - name: Display structure of downloaded files + run: ls -R - name: Download artifacts + id: download-artifact uses: actions/download-artifact@v3 + - name: Rename prebuild artifacts directory + run: mv artifact/ prebuilds/ + - name: Publish to NPM run: yarn publish if: ${{ !env.ACT }} diff --git a/package.json b/package.json index df2a505..2fbb42f 100644 --- a/package.json +++ b/package.json @@ -43,13 +43,8 @@ "prebuilds/**/*" ], "binary": { - "module_name": "argon2", - "module_path": "./lib/binding/napi-v{napi_build_version}", - "remote_path": "v{version}", - "package_name": "{module_name}-v{version}-napi-v{napi_build_version}-{platform}-{arch}-{libc}.tar.gz", - "host": "https://github.com/ranisalt/node-argon2/releases/download/", "napi_versions": [ - 3 + 8 ] }, "scripts": {