Implementation of Google’s One Version Rule for JS monorepos

Overview

Release license: MIT Contributor Covenant Maintainer

@wayfair/one-version

One Version to rule them all, One Version to find them,

One Version to bring them all, and in the darkness bind them.1

Opinionated Monorepo Dependency Management CLI

🚨 Enforcement: Require all workspaces in a monorepo to conform to the One-Version rule.

📦 Supports multiple package managers: Support for yarn and pnpm workspaces.

💥 Coordinated upgrades: Coming Soon!


Table Of Contents

One-Version Rule

This package implements a version of Google's One-Version Rule:

For every dependency in [a] repository, there must be only one version of that dependency to choose.2

Please refer to the implementation notes for our specific evaluation criteria.

There is some overlap between this tool and experimental yarn constraints, without requiring use of a particular package manager.

Getting Started

Install @wayfair/one-version at the workspace root using yarn:

yarn add --dev -w @wayfair/one-version

Or pnpm:

pnpm add -save-dev -w @wayfair/one-version

Add the following section to your package.json:

{
  "scripts": {
    "one-version:check": "one-version check -p ${yarn | pnpm}"
  }
}

The -p flag is not required if using pnpm.

Run yarn one-version:check or pnpm run one-version:check.

If the repo is compliant, the tool will print this message:

✨ One Version Rule Success - found no version conflicts!

If the repo is not compliant, you will see a version of this message:

🚫 One Version Rule Failure - found multiple versions of the following dependencies:

prettier
  2.1.2
    dev: @wayfair/app-a, @wayfair/app-b
  ^2.3.2
    dev: @wayfair/app-c
  2.2.1
    dev: @wayfair/lib-a

Configuration

The behavior of @wayfair/one-version can be configured by a one-version.config.json at the root of the repository.

The only configuration this currently supports is an object of dependency overrides. This may be useful while performing major upgrades.

"overrides": {
  dependency: {
    versionSpecifier: [workspaceA, workspaceB]
  }
}

For example, the below config will allow app-A and lib-L to specify react@^16.9, even if the rest of the repo specifies react@^17.

{
  "overrides": {
    "react": {
      "^16.9": ["app-A", "lib-L"]
    }
  }
}

Contributing

Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated 💜 . For contributing guidelines, please see CONTRIBUTING.md

License

Distributed under the MIT License. See LICENSE for more information.


1: J.R.R. Tolkien, 1954. Mostly.

2: Software Engineering At Google - Winters, Manshreck and Wright, 2020, p. 341

Comments
  • Refactor Workspace Utils

    Refactor Workspace Utils

    Description

    Note: this is incomplete, want to get thoughts before I clean up and add tests.

    Currently we split the check APIs which abstract workspace extraction. This makes it mildly difficult to add checks (see https://github.com/wayfair/one-version/issues/24) without extracting workspaces twice or duplicating across check APIs.

    I think we can just bifurcate the workspace extraction across package managers, have that return a uniform object. Then operate checks directly on that.

    Type of Change

    • [ ] Bug Fix
    • [ ] New Feature
    • [ ] Breaking Change
    • [x] Refactor
    • [ ] Documentation
    • [ ] Other (please describe)
    opened by wvanrensselaer 2
  • Improve Release Process

    Improve Release Process

    Why

    The release process is currently manual and triggered by creating a GH release tag, which kicks off an action to publish the npm package. Before this occurs, someone must update the version in package.json and update the changelog.

    What

    • Document the release process

    Automate as much of process as we can, including potentially:

    • Write a script that prompts user with semver version bump & automatically copies [Unreleased] section of changelog into a new section that matches the updated version
    • Checking the merged pr for changes to the pjson version, and automating kicking off the release & tagging process from the main pipeline instead of manual release action
    stale 
    opened by finn-orsini 2
  • Add set command

    Add set command

    Why

    Updating all the manifest's in a monorepo is really time consuming and annoying, we should make it faster

    What

    Add a set/update option to the one version rule script that will update all the pjson's (and lockfile if necessary) in the repo

    Possible implementation

    When update is selected, require any number of --dep and --version flags, i.e.

    • pnpm run one-version update --dep react --version ^16
    • pnpm run one-version update --dep react --version ^18 --dep react-dom --version ^18

    I initially thought we should have a fix command, but I think it would be difficult to determine what needs changing to "fix" something (i.e. if someone introduced an upgraded dependency, is the fix to downgrade it to match the rest of the repo, or to upgrade the rest of the repo?).

    An update/set command could serve both purposes, since it would allow for easy mass-upgrades and "fixing" of single issues as well.

    We could also make the script interactive, and prompt users for dependencies and versions 🤔

    enhancement stale 
    opened by finn-orsini 2
  • Add lockfile check to pnpm check behavior

    Add lockfile check to pnpm check behavior

    Current Behavior

    The rule currently only evaluates version specifiers across a workspace. This is sufficient for yarn workspaces, but is not for pnpm, as described here.

    pnpm workspaces do not have a flat lockfile, so the following is possible:

    apps/workspace-a:
      specifiers:
         '@wayfair/ui': ^8
      dependencies:
        '@wayfair/ui': 8.0.0_66b146768d72279e63e637aae37792af
    
    apps/workspace-b:
      specifiers:
         '@wayfair/ui': ^8
      dependencies:
        '@wayfair/ui': 8.0.1_b88fe22cf250f8fb4b578ded3c75a78e
    

    The rule currently passes in the above scenario.

    Expected Behavior

    The check should fail in the above scenario, by checking the lockfile as well as the manifest specifiers.

    bug in-progress stale 
    opened by finn-orsini 2
  • v1 Tracking Issue

    v1 Tracking Issue

    Before releasing v1, complete the following:

    • [ ] https://github.com/wayfair-incubator/one-version/issues/7
    • [ ] https://github.com/wayfair-incubator/one-version/issues/6
    • [ ] https://github.com/wayfair-incubator/one-version/issues/5
    • [x] https://github.com/wayfair-incubator/one-version/issues/9
    stale 
    opened by finn-orsini 2
  • chore: upgrade to yarn 3

    chore: upgrade to yarn 3

    Description

    Updates the package manager from Yarn 1 to Yarn 3

    Type of Change

    • [ ] Bug Fix
    • [ ] New Feature
    • [ ] Breaking Change
    • [ ] Refactor
    • [ ] Documentation
    • [x] Other (maintenance)
    opened by erj826 1
  • 🧹 Add Renovate

    🧹 Add Renovate

    Description

    👋 This repository is not currently configured for Renovate. This issue proposes the steps necessary to add Renovate to this project!

    💡 Not familiar with Renovate, or are confused about what advantages it holds over GitHub's Dependabot? Learn more here!

    Steps to Add

    1. Review the guide for Adding Renovate to Existing Projects.
    2. Assign yourself to this issue to signal to others that you intend to work on it. If you ultimately decide not to pursue this, please remember to un-assign yourself so that others may participate!
    3. The renovate[bot] account has already auto-filed a Configure Renovate PR against this repository, feel free to reference the proposed changes in your own Pull Request. If you are contributing to this project as a Hacktoberfest participant, you must file your own PR in order to get credit for your contribution!
    4. You may find that the CI build for this project is failing for unrelated reasons. If you are not already a contributor to this project and don't feel comfortable attempting to fix the build, that's okay! There's plenty of other ways you can contribute to Wayfair's open source projects :) Feel free to consult the list of our other participating repositories here!
    5. In order to catch potential JSON syntax errors or other mis-configurations, please add Renovate linting to this project's existing GitHub Workflow CI pipeline, or create a new one (eg. .github/workflows/lint.yml). See here for an example.
    6. If this repository is currently configured to use GitHub's Dependabot, you must also deprecate support for Dependabot in order to avoid conflicts with Renovate. This is typically as simple as removing the .github/dependabot.yml file. See here for an example.

    Checklist

    • [ ] I have read the Adding Renovate to Existing Projects guide.
    • [ ] I have assigned this issue to myself avoid duplicating efforts with other potential contributors.
    • [ ] I have verified this repository does not already have Renovate configured (or proposed in an open PR by another contributor).
    • [ ] If the renovate[bot] account has already auto-filed a Configure Renovate PR in this repository, I confirm that I will create a separate PR under my own GitHub account, using the initial PR as inspiration.
    • [ ] I confirm that I have added Renovate linting to this project's existing CI pipeline, or have created a new linting workflow if one doesn't already exist.
    • [ ] If this repository is currently configured to use GitHub's Dependabot, my PR will also deprecate support for Dependabot in order to avoid conflicts with Renovate.
    hacktoberfest good-first-issue add-renovate claimed 
    opened by GaryPWhite 1
  • Bump actions/stale from 5 to 6

    Bump actions/stale from 5 to 6

    Bumps actions/stale from 5 to 6.

    Release notes

    Sourced from actions/stale's releases.

    v6.0.0

    :warning: Breaking change :warning:

    Issues/PRs default close-issue-reason is now not_planned(#789)

    V5.2.0

    Features: New option include-only-assigned enables users to process only issues/PRs that are already assigned. If there is no assignees and this option is set, issue will not be processed per: issue/596

    Fixes: Fix date comparison edge case PR/816

    Dependency Updates: PR/812

    Fix issue when days-before-close is more than days-before-stale

    fixes a bug introduced in #717

    fixed in #775

    v5.1.0

    [5.1.0]

    Don't process stale issues right after they're marked stale Add close-issue-reason option #764#772 Various dependabot/dependency updates

    Changelog

    Sourced from actions/stale's changelog.

    Changelog

    [6.0.0]

    :warning: Breaking change :warning:

    Issues/PRs default close-issue-reason is now not_planned(#789)

    [5.1.0]

    Don't process stale issues right after they're marked stale [Add close-issue-reason option]#764#772 Various dependabot/dependency updates

    4.1.0 (2021-07-14)

    Features

    4.0.0 (2021-07-14)

    Features

    Bug Fixes

    • dry-run: forbid mutations in dry-run (#500) (f1017f3), closes #499
    • logs: coloured logs (#465) (5fbbfba)
    • operations: fail fast the current batch to respect the operations limit (#474) (5f6f311), closes #466
    • label comparison: make label comparison case insensitive #517, closes #516
    • filtering comments by actor could have strange behavior: "stale" comments are now detected based on if the message is the stale message not who made the comment(#519), fixes #441, #509, #518

    Breaking Changes

    • The options skip-stale-issue-message and skip-stale-pr-message were removed. Instead, setting the options stale-issue-message and stale-pr-message will be enough to let the stale workflow add a comment. If the options are unset, a comment will not be added which was the equivalent of setting skip-stale-issue-message to true.
    • The operations-per-run option will be more effective. After migrating, you could face a failed-fast process workflow if you let the default value (30) or set it to a small number. In that case, you will see a warning at the end of the logs (if enabled) indicating that the workflow was stopped sooner to avoid consuming too much API calls. In most cases, you can just increase this limit to make sure to process everything in a single run.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 1
  • Remove unnecessary files from published package

    Remove unnecessary files from published package

    What

    Add an .npmignore or files config to remove extraneous files from the published package

    Why

    To have the published package be as small as possible

    opened by finn-orsini 1
  • [wip] feat: support -f flag

    [wip] feat: support -f flag

    todo: write tests

    Description

    Add a -f --file option to the one-version check command where we can pass an arbitrary (local) file path to check for one-version compatibility.

    Also bumps the repo to use yarn 3.

    Resolves https://github.com/wayfair/one-version/issues/31

    Type of Change

    • [ ] Bug Fix
    • [x] New Feature
    • [ ] Breaking Change
    • [ ] Refactor
    • [ ] Documentation
    • [ ] Other (please describe)
    opened by erj826 0
  • chore(deps): update actions/stale action to v7

    chore(deps): update actions/stale action to v7

    Mend Renovate

    This PR contains the following updates:

    | Package | Type | Update | Change | |---|---|---|---| | actions/stale | action | major | v6 -> v7 |


    Release Notes

    actions/stale

    v7

    Compare Source


    Configuration

    📅 Schedule: Branch creation - "before 3am every weekday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • feat: -f flag

    feat: -f flag

    Description

    Add a -f --file option to the one-version check command where we can pass an arbitrary (local) file path to check for one-version compatibility.

    Resolves https://github.com/wayfair/one-version/issues/31

    Type of Change

    • [ ] Bug Fix
    • [x] New Feature
    • [ ] Breaking Change
    • [ ] Refactor
    • [ ] Documentation
    • [ ] Other (please describe)
    opened by erj826 0
  • Refactor check algorithm

    Refactor check algorithm

    Description

    Refactors one version check. Simplifies check logic by creating a map of unique ids -> dependencies, doing the check logic on ids, and only getting dep info again to display. The check is now simpler and operates on simpler data structures. A bit of complexity moved into display logic, but I would prefer it there anyway.

    Type of Change

    • [ ] Bug Fix
    • [ ] New Feature
    • [ ] Breaking Change
    • [X] Refactor
    • [ ] Documentation
    • [ ] Other (please describe)
    opened by finn-orsini 0
  • [Feat] pass a path to check dependency compatibility

    [Feat] pass a path to check dependency compatibility

    Problem Statement

    Before moving an existing application into a monorepo there's no automated way to check if the dependencies in the application will align with the existing dependency versions in the monorepo or if they'll cause the one-version check to fail.

    Proposed Solution

    Add a -f --file option to the one-version check command where we can pass an arbitrary (local) file path to check for one-version compatibility.

    For example:

    yarn one-version check -f /path/to/my/other/repo/package.json
    

    This would allow us to preview the output as if we had already moved the new package.json into the monorepo.

    Alternatives Considered

    Manually move a package.json into the monorepo and run yarn one-version check to see which versions do not match.

    Additional Context

    No response

    opened by erj826 0
  • fix(deps): update dependency chalk to v5

    fix(deps): update dependency chalk to v5

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | chalk | ^4 -> ^5.0.0 | age | adoption | passing | confidence |


    Release Notes

    chalk/chalk

    v5.2.0

    Compare Source

    v5.1.2

    Compare Source

    v5.1.1

    Compare Source

    • Improved the names of exports introduced in 5.1.0 (#​567) 6e0df05
      • We of course preserved the old names.

    v5.1.0

    Compare Source

    v5.0.1

    Compare Source

    • Add main field to package.json for backwards compatibility with some developer tools 85f7e96

    v5.0.0

    Compare Source

    Breaking
    • This package is now pure ESM. Please read this.
      • If you use TypeScript, you need to use TypeScript 4.7 or later. Why.
      • If you use a bundler, make sure it supports ESM and that you have correctly configured it for ESM.
      • The Chalk issue tracker is not a support channel for your favorite build/bundler tool.
      • It's totally fine to stay on Chalk v4. It's been stable for years.
    • Require Node.js 12.20 fa16f4e
    • Move some properties off the default export to individual named exports:
      • chalk.InstanceChalk
      • chalk.supportsColorsupportsColor
      • chalk.stderrchalkStderr
      • chalk.stderr.supportsColorsupportsColorStderr
    • Remove .keyword(), .hsl(), .hsv(), .hwb(), and .ansi() coloring methods (#​433) 4cf2e40
      • These were not commonly used and added a lot of bloat to Chalk. You can achieve the same by using the color-convert package.
    • The tagged template literal support moved into a separate package: chalk-template (#​524) c987c61
    -import chalk from 'chalk';
    +import chalkTemplate from 'chalk-template';
    
    -chalk`2 + 3 = {bold ${2 + 3}}`;
    +chalkTemplate`2 + 3 = {bold ${2 + 3}}`;
    
    Improvements

    Configuration

    📅 Schedule: Branch creation - "before 3am every weekday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

    Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • chore(deps): update dependency markdownlint-cli to ^0.33.0

    chore(deps): update dependency markdownlint-cli to ^0.33.0

    Mend Renovate

    This PR contains the following updates:

    | Package | Change | Age | Adoption | Passing | Confidence | |---|---|---|---|---|---| | markdownlint-cli | ^0.31.1 -> ^0.33.0 | age | adoption | passing | confidence |


    Release Notes

    igorshubovych/markdownlint-cli

    v0.33.0: 0.33.0

    Compare Source

    • Update markdownlint dependency to 0.27.0
      • Improve MD011/MD013/MD022/MD031/MD032/MD033/MD034/MD040/MD043/MD051/MD053
      • Generate/separate documentation
      • Improve documentation
    • Publish Docker container images for both linux/amd64 and linux/arm64
    • Support JSONC and YAML inside markdownlint-configure-file comments
    • Update all dependencies via Dependabot

    v0.32.2: 0.32.2

    Compare Source

    • Update markdownlint dependency to 0.26.2
      • Improve MD037/MD051/MD053
    • Update all dependencies via Dependabot

    v0.32.1: 0.32.1

    Compare Source

    • Update markdownlint dependency to 0.26.1
      • Improve MD051
    • Update all dependencies via Dependabot

    v0.32.0: 0.32.0

    Compare Source

    • Update markdownlint dependency to 0.26.0
      • Add MD051/link-fragments: Link fragments should be valid
      • Add MD052/reference-links-images: Reference links and images should use a label that is defined
      • Add MD053/link-image-reference-definitions: Link and image reference definitions should be needed (auto-fixable)
      • Improve MD010/MD031/MD035/MD039/MD042/MD044/MD049/MD050
      • Add markdownlint-disable-line inline comment
      • Support ~ paths in configuration files
      • Improve performance
    • Add .markdownlint.jsonc to list of supported configuration files
    • Remove support for end-of-life Node version 12
    • Update all dependencies via Dependabot

    Configuration

    📅 Schedule: Branch creation - "before 3am every weekday" (UTC), Automerge - At any time (no schedule defined).

    🚦 Automerge: Enabled.

    Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.

    🔕 Ignore: Close this PR and you won't be reminded about this update again.


    • [ ] If you want to rebase/retry this PR, check this box

    This PR has been generated by Mend Renovate. View repository job log here.

    opened by renovate[bot] 0
  • Dependency Dashboard

    Dependency Dashboard

    This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.

    Open

    These updates have all been created already. Click a checkbox below to force a retry/rebase of any.

    Detected dependencies

    github-actions
    .github/workflows/pr-checks.yml
    • actions/checkout v3
    • actions/setup-node v3
    • actions/checkout v3
    • actions/setup-node v3
    • actions/checkout v3
    • actions/setup-node v3
    • actions/checkout v3
    • actions/setup-node v3
    .github/workflows/release.yml
    • actions/checkout v3
    • actions/setup-node v3
    • JS-DevTools/npm-publish v1
    .github/workflows/renovate_linting.yml
    • actions/checkout v3
    • suzuki-shunsuke/github-action-renovate-config-validator v0.1.2
    .github/workflows/stale.yml
    • actions/stale v7
    npm
    package.json
    • chalk ^4
    • commander ^9.1
    • eslint ^8.14.0
    • jest ^29.0.0
    • markdownlint-cli ^0.31.1
    • prettier ^2.6.2
    • node ^14 || ^16 || ^18
    • yarn 3.3.1

    • [ ] Check this box to trigger a request for Renovate to run again on this repository
    opened by renovate[bot] 0
Releases(v0.3.0)
Owner
Wayfair Tech
Furnishing the future of technology with Wayfair.
Wayfair Tech
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
The one DAO to rule them all. A modular DAO written in Clarity for the Stacks blockchain.

ExecutorDAO The one DAO to rule them all. ExecutorDAO is designed to be completely modular and flexible, leveraging Clarity to the fullest extent. The

Marvin 31 Oct 5, 2022
Google-Drive-Directory-Index | Combining the power of Cloudflare Workers and Google Drive API will allow you to index your Google Drive files on the browser.

?? Google-Drive-Directory-Index Combining the power of Cloudflare Workers and Google Drive will allow you to index your Google Drive files on the brow

Aicirou 127 Jan 2, 2023
This textlint rule found representations not suitable for English papers

This textlint rule found representations not suitable for English papers

SATO Yusuke 4 Mar 1, 2022
This project will be using various AI and Rule Engine algorithm to detect various attack against a company!

?? Introduction This project will be using various AI and Rule Engine algorithm to detect various attack against a website! ?? Mission After starting

Harish S.G 4 Apr 29, 2022
Yet another linter rule to detect compatibility of CSS features.

stylelint-browser-compat Yet another linter rule to detect compatibility of CSS features. This plugin checks if the CSS you're using is supported by t

Masahiro Miyashiro (3846masa) 16 Dec 15, 2022
Validate your Markdown frontmatter data against a JSON schema — remark-lint rule plugin

remark-lint-frontmatter-schema Validate Markdown frontmatter YAML against an associated JSON schema with this remark-lint rule plugin. Supports: Types

Julian Cataldo 20 Dec 10, 2022
Download all Moodle files with one click. This is a Chrome extension built to save time and effort from downloading files manually one by one!

Moodle Downloader Extension Moodle downloader extension for Chrome. The extension is tested with both the TUM moodle and the official moodle demo. Not

Zhongpin Wang 8 Nov 15, 2022
The Remix version of the fakebooks app demonstrated on https://remix.run. Check out the CRA version: https://github.com/kentcdodds/fakebooks-cra

Remix Fakebooks App This is a (very) simple implementation of the fakebooks mock app demonstrated on remix.run. There is no database, but there is an

Kent C. Dodds 61 Dec 22, 2022
Firebase SDK 9 + Google Sign In + Chrome Extension Manifest Version 3 + Webpack

Firebase SDK 9 + Google Sign In + Chrome Extension Manifest Version 3 + Webpack Demo Find this Chrome Extension Setup and working demo here or on Yout

Rasika Warade 40 Dec 28, 2022
Google Chrome release and version info as JSON (self updating)

chrome-versions Self updating repository to store Google Chrome release and version info as JSON. Windows macOS Linux Android TL;DR Use a CDN to fetch

berstend̡̲̫̹̠̖͚͓̔̄̓̐̄͛̀͘ 9 Dec 15, 2022
A store locator plugin using Google Maps API version 3

jQuery Google Maps Store Locator Plugin The files you're looking for are in the dist/ directory Please see my blog for more information and examples.

Bjorn Holine 484 Dec 12, 2022
This is a simple script to upload Multiple files into google drive using google drive API and Nodejs.

Welcome to gDrive Multiple File Upload ?? This is a simple script to upload Multiple files into google drive using google drive API and Nodejs Install

Jayamal Sanuka Hettiarachchi 1 Dec 29, 2021
Google-reviews-crawler - A simple Playwright crawler that stores Google Maps Place/Business reviews to a JSON file.

google-reviews-crawler A simple Playwright crawler that stores Google Maps Place/Business reviews to a JSON file. Usage Clone the repo, install the de

￸A￸l￸e￸x D￸o￸m￸a￸k￸i￸d￸i￸s 6 Oct 26, 2022
Google Clone using NEXT JS ,SSR, Tailwind and Google API's to search data.

This is a Next.js project bootstrapped with create-next-app. Getting Started First, run the development server: npm run dev # or yarn dev Open http://

Hamnaikbalkhan 7 Sep 23, 2022
simple jquery Plugin that utilizes Google API to get data from a Place on Google Maps

jQuery Plugin to display Google Reviews of a Place on Google Maps this will get the 5 reviews, google offers you. But I need more than 5 reviews! if y

Simon Neutert 32 Dec 14, 2022
A Geiger counter for Google emitting a sound for each request that goes to Google.

Google Teller This is a (Firefox) add-on (WebExtension) that emits a sound every time you connect to a service hosted by Google. It is inspired by @be

rugk 35 Nov 5, 2022