diff --git a/.env b/.env.example similarity index 100% rename from .env rename to .env.example diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 99b47d0ab..9fc9d34de 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -1,5 +1,5 @@ name: Checks -on: [pull_request] +on: [pull_request, workflow_dispatch] jobs: validation: @@ -9,15 +9,8 @@ jobs: with: ref: ${{ github.event.pull_request.head.sha }} fetch-depth: 0 - - name: Setup node v16 - uses: actions/setup-node@v1 + - uses: oven-sh/setup-bun@v1 with: - node-version: '16' - - name: Install dependencies - uses: borales/actions-yarn@v2.0.0 - with: - cmd: install --ignore-engines --frozen-lockfile - - name: Run tests - uses: borales/actions-yarn@v2.0.0 - with: - cmd: test + bun-version: 1.0.0 + - run: bun install + - run: bun test diff --git a/.github/workflows/publish-records.yml b/.github/workflows/publish-records.yml index c8ed824e1..7a0ab3e06 100644 --- a/.github/workflows/publish-records.yml +++ b/.github/workflows/publish-records.yml @@ -12,16 +12,15 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - uses: borales/actions-yarn@v2.0.0 + - uses: oven-sh/setup-bun@v1 with: - cmd: install --ignore-engines - - name: Running tests - uses: borales/actions-yarn@v2.0.0 - with: - cmd: test + bun-version: 1.0.0 + - run: bun install + - run: bun test - name: Publishing records env: CI: 1 + NODE_ENV: production ENV: production DOMAIN_USER: ${{ secrets.DOMAIN_USER }} DOMAIN_API_KEY: ${{ secrets.DOMAIN_API_KEY }} @@ -29,6 +28,4 @@ jobs: DOMAIN_API_PORT: ${{ secrets.DOMAIN_API_PORT }} DOMAIN_DOMAIN: ${{ secrets.DOMAIN_DOMAIN }} DOMAIN_HOST_IP: ${{ secrets.DOMAIN_HOST_IP }} - uses: borales/actions-yarn@v2.0.0 - with: - cmd: publish-records + run: bun run publish-records diff --git a/.gitignore b/.gitignore index b4bfa3d64..19f9ce180 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,3 @@ node_modules/ -*.env.* +*.env.production *.log diff --git a/bun.lockb b/bun.lockb new file mode 100755 index 000000000..a21cd4a5c Binary files /dev/null and b/bun.lockb differ diff --git a/default.nix b/default.nix index b806eb6c4..bc0f66aa3 100644 --- a/default.nix +++ b/default.nix @@ -3,11 +3,10 @@ let inherit (nixpkgs) pkgs; nixPackages = with pkgs; [ - nodejs-18_x yarn docker-compose dnsutils - #certbot + bun ]; in pkgs.stdenv.mkDerivation { diff --git a/package.json b/package.json index 3c2edc963..60ab02ae0 100644 --- a/package.json +++ b/package.json @@ -3,28 +3,20 @@ "version": "1.0.0", "description": "Register *.is-a.dev domains for free", "scripts": { - "test": "ENV=test jest", "lint": "eslint utils scripts domains --ext .json,.js", - "publish-records": "node ./scripts/register-domains.js", + "publish-records": "bun run -b ./scripts/register-domains.js", "dc": "docker-compose -p is-a-dev", - "dc:start": "yarn dc up", - "dc:shell": "yarn dc run dev /bin/bash" + "dc:start": "bun run dc up", + "dc:shell": "bun run dc run dev /bin/bash" }, "repository": { "type": "git", "url": "https://github.com/is-a-dev/register" }, - "keywords": [ - "subdomain" - ], "author": "Akshay Nair ", "license": "GPL-3.0", "dependencies": { - "dotenv": "^8.2.0", "is-ip": "^5.0.1", - "jest": "^26.4.2", - "node-fetch": "^2.6.1", - "qs": "^6.9.4", "ramda": "^0.27.1" }, "devDependencies": { diff --git a/tests/domain-service.test.js b/tests/domain-service.test.js index 166712596..79ea1d1e2 100644 --- a/tests/domain-service.test.js +++ b/tests/domain-service.test.js @@ -204,18 +204,18 @@ describe('Domain service', () => { { name: 'c', type: 'MX', address: 'foobar.com', priority: 2 }, ]); - expect(addZone).toBeCalledTimes(1); + expect(addZone).toHaveBeenCalledTimes(1); expect(getRecordCalls(addZone)).toEqual([ { name: 'c', type: 'A', address: '12.131321.213' }, ]); - expect(addEmail).toBeCalledTimes(1); + expect(addEmail).toHaveBeenCalledTimes(1); expect(getRecordCalls(addEmail)).toEqual([ { domain: 'c.is-a.dev', exchanger: 'foobar.com', priority: 2 }, ]); - expect(removeZone).toBeCalledTimes(0); - expect(removeEmail).toBeCalledTimes(0); + expect(removeZone).toHaveBeenCalledTimes(0); + expect(removeEmail).toHaveBeenCalledTimes(0); }); it('should update matching host and set it', async () => { @@ -231,11 +231,11 @@ describe('Domain service', () => { { name: 'b', type: 'CNAME', address: 'googoogaga' }, ]); - expect(addZone).toBeCalledTimes(1); + expect(addZone).toHaveBeenCalledTimes(1); expect(getRecordCalls(addZone)).toEqual([ { name: 'b', type: 'CNAME', address: 'googoogaga' }, ]); - expect(removeZone).toBeCalledTimes(1); + expect(removeZone).toHaveBeenCalledTimes(1); expect(getRecordCalls(removeZone)).toEqual([ { line: 2 }, ]); @@ -256,12 +256,12 @@ describe('Domain service', () => { { name: 'b', type: 'CNAME', address: 'farboo' }, ]); - expect(addZone).toBeCalledTimes(2); + expect(addZone).toHaveBeenCalledTimes(2); expect(getRecordCalls(addZone)).toEqual([ { name: 'b', type: 'CNAME', address: 'googoogaga' }, { name: 'b', type: 'CNAME', address: 'farboo' }, ]); - expect(removeZone).toBeCalledTimes(2); + expect(removeZone).toHaveBeenCalledTimes(2); expect(getRecordCalls(removeZone)).toEqual([ { line: 2 }, { line: 3 }, @@ -300,34 +300,34 @@ describe('Domain service', () => { { name: 'a', type: 'MX', address: 'example.com', priority: 20 }, ]); - expect(addZone).toBeCalledTimes(3); + expect(addZone).toHaveBeenCalledTimes(3); expect(getRecordCalls(addZone)).toEqual([ { name: 'a', type: 'CNAME', address: 'boo' }, { name: 'b', type: 'A', address: '3' }, { name: 'd', type: 'CNAME', address: 'helo.com' }, ]); - expect(removeZone).toBeCalledTimes(1); + expect(removeZone).toHaveBeenCalledTimes(1); expect(getRecordCalls(removeZone)).toEqual([ { line: 1 }, ]); - expect(addEmail).toBeCalledTimes(1); + expect(addEmail).toHaveBeenCalledTimes(1); expect(getRecordCalls(addEmail)).toEqual([ { domain: 'a.is-a.dev', exchanger: 'example.com', priority: 20 }, ]); - expect(removeEmail).toBeCalledTimes(2); + expect(removeEmail).toHaveBeenCalledTimes(2); expect(getRecordCalls(removeEmail)).toEqual([ { domain: 'c.is-a.dev', exchanger: 'mx1.hello.com', priority: 20 }, { domain: 'b.is-a.dev', exchanger: 'foo.bar', priority: 20 }, ]); - expect(addRedir).toBeCalledTimes(3); + expect(addRedir).toHaveBeenCalledTimes(3); expect(getRecordCalls(addRedir)).toEqual([ { domain: `b.${DOMAIN_DOMAIN}`, type: 'permanent', redirect: 'https://wowow.com' }, { domain: `d.${DOMAIN_DOMAIN}`, type: 'permanent', redirect: 'https://hhh.com' }, { domain: `x.${DOMAIN_DOMAIN}`, type: 'permanent', redirect: 'https://example69.com' }, ]); - expect(removeRedir).toBeCalledTimes(2); + expect(removeRedir).toHaveBeenCalledTimes(2); expect(getRecordCalls(removeRedir)).toEqual([ { domain: `b.${DOMAIN_DOMAIN}` }, { domain: `x.${DOMAIN_DOMAIN}` }, diff --git a/tests/register.test.js b/tests/register.test.js index 88eb4694e..ef6e8247c 100644 --- a/tests/register.test.js +++ b/tests/register.test.js @@ -87,10 +87,10 @@ describe('registerDomains', () => { const domainService = mockDS({ zones: remoteHosts, redirections: remoteRedirections }); await registerDomains({ getDomains: async () => localHosts, domainService }); - expect(addZone).toBeCalledTimes(0); - expect(removeZone).toBeCalledTimes(1); - expect(addRedir).toBeCalledTimes(0); - expect(removeRedir).toBeCalledTimes(0); + expect(addZone).toHaveBeenCalledTimes(0); + expect(removeZone).toHaveBeenCalledTimes(1); + expect(addRedir).toHaveBeenCalledTimes(0); + expect(removeRedir).toHaveBeenCalledTimes(0); }); it('should add the new set hosts', async () => { @@ -111,10 +111,10 @@ describe('registerDomains', () => { const domainService = mockDS({ zones: remoteHosts, redirections: remoteRedirections }); await registerDomains({ getDomains: async () => localHosts, domainService }); - expect(addZone).toBeCalledTimes(1); - expect(removeZone).toBeCalledTimes(0); - expect(addRedir).toBeCalledTimes(2); - expect(removeRedir).toBeCalledTimes(1); + expect(addZone).toHaveBeenCalledTimes(1); + expect(removeZone).toHaveBeenCalledTimes(0); + expect(addRedir).toHaveBeenCalledTimes(2); + expect(removeRedir).toHaveBeenCalledTimes(1); }); }); diff --git a/utils/constants.js b/utils/constants.js index 022bd6646..273a2761e 100644 --- a/utils/constants.js +++ b/utils/constants.js @@ -1,10 +1,6 @@ const path = require('path'); -const { ENV = 'test', CI } = process.env; - -if (!CI) { - require('dotenv').config({ path: path.resolve(`.env.${ENV}`) }); -} +const { NODE_ENV: ENV = 'test' } = process.env; const { DOMAIN_USER, diff --git a/utils/lib/cpanel.js b/utils/lib/cpanel.js index 29743295a..5c098f281 100644 --- a/utils/lib/cpanel.js +++ b/utils/lib/cpanel.js @@ -1,6 +1,5 @@ const R = require('ramda'); -const fetch = require('node-fetch'); -const qs = require('qs'); +const qs = require('querystring'); const { DOMAIN_API_HOST, DOMAIN_API_PORT, DOMAIN_USER, DOMAIN_API_KEY, DOMAIN_DOMAIN } = require('../constants'); const CpanelClient = (options) => {