diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS new file mode 100644 index 0000000..a8a5013 --- /dev/null +++ b/.github/CODEOWNERS @@ -0,0 +1 @@ +* @jef @andirew @davidlbowman @fuckingrobot @ioncaza @malbert69 \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..3ca2b9b --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1 @@ +github: jef diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..e4707a2 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,16 @@ +--- +name: Bug report +about: Report a bug for this project +title: 'Bug: ' +labels: 'bug' +assignees: jef + +--- + +### Description + + + +### Possible solution + + diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..545c33f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,16 @@ +--- +name: Feature request +about: Suggest a feature for this project +title: 'Enhancement: ' +labels: 'enhancement' +assignees: jef + +--- + +### Description + + + +### Possible solution + + diff --git a/.github/dependabot.yaml b/.github/dependabot.yaml new file mode 100644 index 0000000..88e9abd --- /dev/null +++ b/.github/dependabot.yaml @@ -0,0 +1,20 @@ +version: 2 +updates: + - package-ecosystem: "docker" + directory: "/" + schedule: + interval: "daily" + labels: + - "dependencies" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "daily" + labels: + - "dependencies" + - package-ecosystem: "npm" + directory: "/" + schedule: + interval: "daily" + labels: + - "dependencies" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..fc9fb16 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,15 @@ +### Description + + + + +### Testing + + + + + +### New dependencies + + + diff --git a/.github/workflows/cd.yaml b/.github/workflows/cd.yaml new file mode 100644 index 0000000..fa6dd0b --- /dev/null +++ b/.github/workflows/cd.yaml @@ -0,0 +1,38 @@ +name: cd +on: + push: + branches: + - master +jobs: + cd: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: GoogleCloudPlatform/release-please-action@v2.2.0 + id: release + with: + token: ${{ secrets.GITHUB_TOKEN }} + release-type: node + package-name: nvidia-snatcher + - name: login into github package registry + run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin + - name: build nightly docker image + if: ${{ ! steps.release.outputs.release_created }} + run: | + docker build \ + -t "ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_SHA:0:7}" \ + -t "ghcr.io/${GITHUB_REPOSITORY}:nightly" . + - name: publish nightly + if: ${{ ! steps.release.outputs.release_created }} + run: docker push "ghcr.io/${GITHUB_REPOSITORY}" + - name: build latest docker image + if: ${{ steps.release.outputs.release_created }} + run: | + docker build \ + -t "ghcr.io/${GITHUB_REPOSITORY}:${TAG_NAME}" \ + -t "ghcr.io/${GITHUB_REPOSITORY}:latest" . + env: + TAG_NAME: ${{ steps.release.outputs.tag_name }} + - name: publish latest + if: ${{ steps.release.outputs.release_created }} + run: docker push "ghcr.io/${GITHUB_REPOSITORY}" diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml new file mode 100644 index 0000000..cf5c6d7 --- /dev/null +++ b/.github/workflows/ci.yaml @@ -0,0 +1,21 @@ +name: ci +on: push +jobs: + lint: + runs-on: ubuntu-latest + strategy: + matrix: + node-version: [12.x, 14.x] + name: Lint + steps: + - uses: actions/checkout@master + - uses: actions/setup-node@v2.1.1 + with: + node-version: ${{ matrix.node-version }} + - uses: actions/cache@v2 + with: + path: ~/.npm + key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }} + restore-keys: ${{ runner.os }}-node- + - name: Pull dependencies + run: npm ci diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..40b878d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/README.md b/README.md index 9fbbce4..1f17f6d 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,53 @@ -# nvidia-snatcher -🔮 For all your Nvidia needs +# nvidia-snatcher [![cd](https://github.com/jef/nvidia-snatcher/workflows/cd/badge.svg?branch=master)](https://github.com/jef/nvidia-snatcher/actions?query=workflow%3Acd) + +## Description + +This is going to check Nvidia's website every 5 seconds to see if the 3080 is out of stock in the background. If it comes into stock, then your browser will open and direct you to a cart with the 3080 in it where you can proceed manually. + +You may get false positives from time to time, so I apologize for that. If you're getting than more often than not, I would change the `const waitForTimeout = 1000;` to a higher number. + +**Update 1:** Now includes Best Buy 3080 FE + +## Installation and running + +Not going to write a full write up here, but I'm going to assume you know Node.js. If you don't then go to Google and look up how to install for your OS. + +Here's how to get it running: + +- Save this text to a file in a folder on your Desktop. E.g. `nvidia/nvidia.js` +- Open up your favorite terminal (`cmd`, `iTerm`, `Tilix`) +- Run the below + +``` +npm i puppeteer opn nodemailer +node nvidia.js +``` + +If you want to get an email as well: + +- If you have two-factor authentication, use https://myaccount.google.com/apppasswords to get your password Google app password +- Otherwise, use your regular password + +``` +npm i puppeteer opn nodemailer +EMAIL_USERNAME="youremail@gmail.com" EMAIL_PASSWORD="secretpassword" node nvidia.js +``` + +## Further customization and hacking + +You can potentially add more `links` and change the `timeout` if you'd like. + +- `timeout` and `waitForTimeout` are in milliseconds. +- `links` are specific to find the `"out of stock"` verbiage (forced to lowercase). + +### Acknowledgements + +Thanks to the great contributors that make this project possible + +Special shout to initial developers: + +- [@andirew](https://github.com/andirew) +- [@davidlbowman](https://github.com/davidlbowman) +- [@fuckingrobot](https://github.com/fuckingrobot) +- [@ioncaza](https://github.com/IonCaza) +- [@malbert69](https://github.com/malbert69) diff --git a/package.json b/package.json new file mode 100644 index 0000000..56fd92c --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "nvidia-snatcher", + "version": "1.0.0", + "description": "🔮 For all your Nvidia needs", + "main": "src/index.js", + "scripts": { + "start": "node src/index.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/jef/nvidia-snatcher.git" + }, + "keywords": [], + "author": "jef", + "license": "MIT", + "bugs": { + "url": "https://github.com/jef/nvidia-snatcher/issues" + }, + "homepage": "https://github.com/jef/nvidia-snatcher#readme", + "dependencies": { + "nodemailer": "^6.4.11", + "opn": "^6.0.0", + "puppeteer": "^5.3.0" + } +} diff --git a/cardbot.js b/src/index.js similarity index 100% rename from cardbot.js rename to src/index.js