Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add migrate:unlock command, truncate on forceFreeMigrationsLock #3822

Merged
merged 5 commits into from
Apr 23, 2020

Conversation

zachelrath
Copy link
Contributor

Changes

  • Adds new migrate:unlock command to CLI which invokes knex.migrations.forceFreeMigrationsLock(), to provide for a CLI-based way of forcibly resetting the knex_migrations_lock table in the event that it gets into a bad state.
  • Adjusts the behavior of forceFreeMigrationsLock to truncate the knex_migrations_lock table to ensure that there is only 1 row in the event that multiple rows have been inserted into that table, in which case migrations will fail

.then((exist) => exist && this._freeLock());
.then((exist) => {
if (exist) {
await getTable(this.knex, lockTableName, this.config.schemaName).del();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this.config.schemaName and lockTableName usage is not consistent.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kibertoad Can you explain what you mean by not consistent? lockTableName is used in multiple locations in the outer function, which is why i assigned it to a const.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yeah, this is fair. still for symmetry sake would be nice to do const lockSchemaName = as well.

.then((exist) => exist && this._freeLock());
.then((exist) => {
if (exist) {
await getTable(this.knex, lockTableName, this.config.schemaName).del();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you rewrite whole chain to be async/await?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sure, I could do that.

test('migrate:unlock restores lock table to one row with is_locked=0', (temp) => {
const db = new sqlite3.Database(`${temp}/db`);
// Seed multiple rows into the lock table
return new Promise((resolve, reject) =>
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you please use async/await instead of a promise chain?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yep, can do that, was just trying to maintain consistency with other tests in this file

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is legacy set of tests, I really need to add comment pointing into non-obsolete tests as a reference.

})
)
.then(() => {
return assertExec(
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Would be awesome if you could use new style of executing script and asserting results - see https://github.com/knex/knex/blob/master/test/cli/migrate.spec.js for an example

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah okay, is that the desired directory for net-new CLI tests? If so I will move my test over into that file.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

yes, we use testlab-cli instead of plain jake now.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sounds good! The new format is much cleaner and more familiar, so I'm all for switching over.

const rootDir = getRootDir();
const dbPath = path.resolve(rootDir, 'db');

it('should restore lock table to one row with is_locked=0', async () => {
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can you also add test for the case when there was no lock in the first place?

});
expect(rows.length).to.equal(1);
expect(rows[0].is_locked).to.equal(0);
db.close();
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

db instantiation and closing probably could be moved to before and after blocks


it('should restore lock table to one row with is_locked=0', async () => {

const db = await new sqlite3.Database(dbPath);
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

probably it can also be in-memory db for simplicity as it probably makes no difference in this scenario

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@kibertoad Can you explain what you mean by "in-memory db" or point me to an example? Is that an internal-only Knex dialect that's only available in test contexts? I haven't an example of that in any other knex tests i've looked at.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

from one of the knex tests:

    beforeEach(() => {
      connection = new sqlite3.Database(':memory:');
    });

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I tried going down the in-memory path but it ended up complicating the test a lot more, as I had to create and tear-down a temporary Knexfile and in order to have the CLI command write to the correct in-memory DB --- I couldn't get this to work from the CLI:

execCommand(`node ${KNEX} migrate:unlock --client=sqlite3 --connection=:memory:`);

Just using the test sqlite DB as the PR currently has in place right now works just fine and seems to be the least-complex option.

Would you mind if we just retained the current approach?

@@ -58,7 +58,6 @@ function invoke(env) {
env.modulePath = env.modulePath || env.knexpath || process.env.KNEX_PATH;

const filetypes = ['js', 'coffee', 'ts', 'eg', 'ls'];
let pending = null;
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

it wasn't used for anything?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yeah pending was assigned but was never used

@kibertoad
Copy link
Collaborator

@zachelrath Thanks a lot! Could you also update documentation at https://github.com/knex/documentation?

zachelrath added a commit to zachelrath/documentation that referenced this pull request Apr 23, 2020
@zachelrath
Copy link
Contributor Author

@kibertoad Docs PR: knex/documentation#266

kibertoad pushed a commit to knex/documentation that referenced this pull request Apr 23, 2020
Corresponding knex PR: knex/knex#3822

Co-authored-by: Zach McElrath <[email protected]>
@kibertoad
Copy link
Collaborator

Thanks a lot!

@kibertoad kibertoad merged commit b626702 into knex:master Apr 23, 2020
@kibertoad
Copy link
Collaborator

Released in [email protected]

rluvaton added a commit that referenced this pull request Mar 2, 2024
* Build documentation for 0.17.0 (#198)

* Add documentation for migrate:down (#197)

* add missing function to sidebar (#199)

* Add notes around usage with typescript

* Generate assets

* Fix documentation for migration extension (#204)

* Improve dev workflow (#201)

* Mark generated files as binary so they don't clobber the diff

* Tweak build scripts

- Replace child-process-promise with execa which already handles SIGINT propagation & PATHEXT normalization
- Read CHANGELOG from node_modules/knex so that it works well with npm/yarn link and nodemon can pickup changes
- Tweak nodemon to auto restart when CHANGELOG changes
- Remove misleading log that rs will restart nodemon which doesn't work with spawn

* fix typo (#206)

* add intersect method (#173)

* Document transaction execution promise (#205)

* Generate documentatino for 0.18.0 (#207)

* Fix typo (#209)

Remove unnecessary parentheses

* CLI: documentation on migration:make --stub option (#208)

* Update dependencies (#210)

* Build documentation for 0.18.3 (#211)

* Add docs for seed:run --specific (#213)

* Build documentation for 0.18.4 (#215)

* Update docs for aggregation queries to include information about #3354 (#221)

Closes #219

* Document "skipLocked()" and "noWait()" (#186)

* Remove bluebird-specific methods from documentation (#222)

* Add documentation for transaction .isCompleted() (#223)

* Add extends queryBuilder documentation - related to #3334 (#218)

* Build documentation for 0.19.1 (#224)

* fix(syntax error): small issue with docs displaying invalid JS code. (#225)

* correct and clarify how to alias an identifier (#226)

* noted that aliasing uses a suffix, not a prefix
* added an example

* Fix small type (#229)

* CLI Migrations List CMD Documentation (#231)

* Support specifying schema for enums (#232)

* Release documentation for 0.19.3

* update docs as per #3416 (#233)

* Docs for disableValidateMigrationsList (#237)

* fix docs for knex.migrate.up & knex.migrate.down (#238)

* Edit table names in example to be plural (#236)

Change table names to be plural to match the style in the rest of the documentation.

* fix: repair hitchhikers guide to the galaxy update docs (#230)

* Fix broken travis badge and links after relocation of project (#240)

* replace deprecated oracle package with oracledb (#239)

* Release documentation for 0.20.0

* Documentation for #3497 (#242)

* Release documentation for 0.20.1

* Update to Babel 7, bump a couple of other dependencies

* Release documentation for 0.20.4

* Release documentation for 0.20.5

* updated transactions docs with async/await examples (#247)

* "esm module interop flag" reflects knex #3571 (#251)

* Release documentation for 0.20.10

* Release documentation for 0.20.10 - follow-up

* delete Promise.return (#256)

* Adds documentation for async knex (#259)

* Add clearGroup method documentation (#261)

* Add entry for onDistinct (#257)

* Add join to sidebar (#264)

* Change notNull to notNullable for consistency (#252)

* Release documentation for 0.20.15

* Release documentation for 0.21.0

* Add documentation about liftoff and its dependencies. Resolves #3807 (#265)

* Add docs for new migrate:unlock command (#266)

Corresponding knex PR: #3822

Co-authored-by: Zach McElrath <[email protected]>

* Release documentation for 0.21.1

* remove broken link from sidebar (#269)

* pronounced /kəˈnɛks/ (#275)

* Typo fix in schema.js (#279)

* Add array of paths and sortDirsSeparately for seeds (#282)

related to #3967 and knex/documentation#220

* Release documentation for 0.21.3

* Add recursive option for seeds (#284)

Related to #3974

* Release documentation for 0.21.4

* Esm interop documentation update (#285)

* Release documentation for 0.21.5

* Typo in index.html (#291)

* add documentation for isTransaction property (#293)

closes knex/documentation#235

* docs(QueryBuilder): add method .clear(statement) (#289)

* Release documentation for 0.21.9

* Documentation for augmented table interfaces (#292)

* Initial documentation on .onConflict, .ignore, and .merge (#260)

* Release documentation for 0.21.10

* Fix spelling error (#296)

* Add documentation on "upsert" WHERE clause for PostgreSQL/Sqlite (#300)

Co-authored-by: Igor Savin <[email protected]>

* Release documentation for 0.21.13

* Add documentation for "includeTriggerModifications" (#301)

* Release documentation for 0.21.14

* Minor tweaks on the main page

* Release documentation for 0.21.15

* var -> const
http -> https
Minor tweaks

* Add setIsolationLevel docs (#302)

Co-authored-by: Igor Savin <[email protected]>

* Update TypeScript documentation (#303)

* Doc for analytic functions (#5)

Co-authored-by: Igor Savin <[email protected]>

* Document optimizer hints (#306)

* Added documentation for increments primaryKey option (#308)

Co-authored-by: Igor Savin <[email protected]>

* Added docs for new conflict merge strategies. (#307)

Co-authored-by: Matt Goodson <[email protected]>

* fix WebpackMigrationSource example (#192) (#304)

* Add example for WebpackMigrationSource with webpack 5 (#310)

* DOCS Add constraintName option to defaultTo for mssql driver (#311)

* DOCS Add constraintName option to defaultTo for mssql driver

* Update schema.js

Co-authored-by: Igor Savin <[email protected]>

* columnInfo: Fix bulleted list rendering (#312)

* include enlightenment about composite typing (#298)

* Add documentation for generateDdlCommands
update TOC

* Publish documentation for 0.95.0

* Fix migrate parameter (#313)

latestVersion becomes latest

* Docs for #3678: allow running multiple specific seed files (#316)

* Add documentation for "Add support for file open flags for sqlite3" (#320)

Signed-off-by: Boelensman1 <[email protected]>

* fixed typescript example of extending QueryBuilder (#321)

* Publish documentation for 0.95.5

* fix(docs): migration from mssql to tedious (#317)

* Fix mssql driver description

* Fix typo (#328)

* add documentation for deferrable constraint support (#330)

* Fix Sidebar element link to same section (#331)

* Publish documentation for 0.95.8

* Add documentation for partitionBy and clean up some spacings and child assigns (#333)

* Fix example for batch insert with conflict merge (#325)

* add port option to connection (#324)

* Adds a missing "the" (#318)

* Add documentation for schema nullability manipulation (#334)

* Publish documentation for 0.95.11

* feat(builder): Describe optional columnList arg to with/Recurisve [#4514] (#335)

* Add missing documentation for whereRecursive

* Adding notes about pg-native (#336)

* Add table.double to documentation (#295)

* Fix havingRaw signature (#297)

* Add dropSchema and dropSchemaIfExists doc (#4713) (#338)

* Add 'is null' support in order by documentation (#339)

* Missing comma (#340)

* Add Create table like documentation (#1373) (#341)

* Add CockroachDB (#342)

* Migrations: Fix code formatting (#343)

* View support doc (#4748) (#344)

Co-authored-by: Olivier CAVADENTI <[email protected]>

* Add storage engine index type doc #4756 (#345)

* Add docs for forNoKeyUpdate() and forKeyShare() (#346)

* skiplocked and nowait in mariadb (#348)

Nowait was added in 10.3 - https://mariadb.com/kb/en/wait-and-nowait/

skiplocked was added in 10.6 - https://mariadb.com/kb/en/select/#skip-locked

* feat: add builder method upsert (#349)

* Add partial index doc #4768 (#350)

* github url fix to github.com/knex/knex (#347)

* Publish documentation  for 0.95.12

* Add documentation fromRaw #4781 (#354)

* Add documentation whereLike/whereILike #4779 (#353)

* Add doc for Delete joins and using syntax in Postgres

* Add skipBinding option for offset and limit (#356)

* Add callback doc for create table like (#359)

* Update builder.js (#360)

* Remove dead link in sidebar (#361)

* Added a note about enumerations not being editable after creation (without knex.raw), as per #1699 (#314)

* Document custom seed sources (#364)

* Webpack 5 update (#365)

* remove -p parameter of webpack command

* React, Babel and more updates (#366)

* Add binary uuid doc (#368)

* docs: added some small additions about supporting `better-sqlite3` (#369)

Signed-off-by: blam <[email protected]>

* Add useCamelCase doc (#358)

* Add geo columns doc (#370)

* Add alter table and fixes (#371)

* fix typo in `dropView` (#372)

* Added MSSQL unique constraint documentation (#373)

* Json Support documentation (#374)

* Multiple PKs with increments doc (#375)

* Add checks documentation (#377)

* Update returning doc (#378)

* Create or replace view doc (#376)

* add docs aout smallint, integer, biginteger, tinyint, mediumint (#363)

* href Schema.index vs column.index (#355)

* Publish documentation for 1.0.1

* Fix 1.0.1 documentation

* Update SQLite driver documentation (#381)

* Add with materialized doc (#382)

* Add onConflict raw doc (#384)

* docs: add built assets

* Add alterNullable doc (#385)

* Add alterType documentation (#387)

* Publish documentation for 1.0.2

* Publish documentation for 1.0.3

* Add whereLike functions doc (#392)

* Update CNAME

* Delete CNAME

* Create CNAME

* Publish documentation for 1.0.3\4

* Update CNAME

* Wrong doc reference for table.index (#394)

* Update Migrations doc for overrides cli (#395)

* Publish documentation for 1.0.5

* Publish documentation for 1.0.6

* Publish documentation for 1.0.7

* Update esm-interop.js (#398)

* Update doc for sqlite3 restore (#399)

* Publish documentation for 2.0.0

* Delete everything

* Migrate documentation to vitepress (#400)

Co-authored-by: Benicio Cardozo <[email protected]>

* feat: add deployment workflow (#404)

* Update schema-builder.md (#405)

* Update deploy.yml (#407)

* Added recommendation to set pool.min to 0 (#409)

* Fix Algolia Search Box redirecting to a 404 page (#411)

* Update transactions.md (#416)

* restore sqlite3 as the version to install for sqlite db (#418)

* docs: document primaryKey option on uuid type (#419)

* Typo (#422)

* Fix typo (#426)

* Fix a few broken links (#430)

Propably the consequence of a change in structure

* uuidToBin and binToUuid are switched (#434)

The code examples of uuidToBin and binToUuid where in the wrong order. I switched the heading and description of both so the createTable and  select statements are still correct.
I also changed 'convert a uuid (char(16))' to 'convert a string uuid (char(36))' in uuidToBin to match the description of binToUuid and the corresponding code example.
In addition I changed the specified language of the binToUuid code example from ts to js to match the language definitions of the other code examples.

* add documentation about compileSqlOnError (#436)

* Update .returning documentation to include SQLite support (#438)

This documentation update corresponds to the changes implemented in [knex/knex pull request #5285](#5285).

* add documentation for mapBinding (#440)

* docs: explicit jsonb suppor for custom pg clients (#423)

* fix a link reference (#451)

* docs: update predicate, useConstraint options in unique() (#449)

* Updated index.md (#460)

removed word 'the' before 'any' in migrations section

* fix documentation about compileSqlOnError (#463)

* raw.md typo fix (#452)

* Fix invalid bold (#461)

There was another `*` stopping a line from going bold. I fixed that.

* fix parameter order in function example (#446)

* Updating port (#470)

* Fix typo `unqiue` (#477)

* Add documentation on comment. (#450)

* Document Better-SQLite3 nativeBinding option (#504)

* Bump knex from 2.0.0 to 2.4.0 (#485)

Bumps [knex](https://github.com/knex/knex) from 2.0.0 to 2.4.0.
- [Release notes](https://github.com/knex/knex/releases)
- [Changelog](https://github.com/knex/knex/blob/master/CHANGELOG.md)
- [Commits](2.0.0...2.4.0)

---
updated-dependencies:
- dependency-name: knex
  dependency-type: direct:development
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Update Changelog and fix deadlinks (#506)

* Bump vite from 2.9.9 to 2.9.15 (#448)

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 2.9.9 to 2.9.15.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v2.9.15/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v2.9.15/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Typo/Grammar (#491)

Documentation grammar. `An` not required in this case--even though it precedes a vowel.

* fix doc typo (#482)

* Fix spacing typos (#467)

* Fix erroneous basic config example (#443)

Fixes the example of how to use an async function to get connection details.

The current example shows you can export an async function returning an entire [`Config`](https://github.com/knex/knex/blob/2dadde4214d9ee333adccfa517089647e94d23be/types/index.d.ts#L2698) object. However, the [type definition](https://github.com/knex/knex/blob/2dadde4214d9ee333adccfa517089647e94d23be/types/index.d.ts#L2703) shows that the `connection` property can be an async function. I can confirm that TypeScript won't compile when following the current example.

* Improve documentation for extending QueryBuilder (#462)

Changes made:
1. Changed variable where `QueryBuilder` class is located at. `Knex.QueryBuilder` is a typescript interface defined in `Knex` namespace. `QueryBuilder` class is located at `knex.QueryBuilder`.
2. Changed `QueryBuilder` interface to `QueryInterface` in custom typescript definitions. To make the custom method appear at `knex()` object, we should augment `QueryInterface`, since it's the type `Knex` interface extends.

* adds documentation about how to group and order inputs to a union (#500)

* adds documentation about how to group and order inputs to a union

* provide links to query lab for example

* docs: reference to issues in changelog (#420)

* docs: reference to issues in changelog

* reference issues in last changelogs

---------

Co-authored-by: Olivier Cavadenti <[email protected]>

* Update all remaining issues links in changelog (#507)

* Fix issues links (#508)

* Fix links (#509)

Co-authored-by: Garrit Franke <[email protected]>

* Fix url esm-interop (#517)

* Document Better-SQLite3 readonly option (#505)

* Update transactions.md (#489)

* docs(pg): document QueryBuilder#updateFrom (#476)

* docs: document uuid utility function (#527)

* Update changelog for 2.5.0

(cherry picked from commit 063b380c76f6990b0c3a1470876e0781dbc98d6a)

* Fix changelog title release

* docs(pg): terminate code block in query-builder.md (#528)

* docs: provide more usage patterns for Knex configuration object (#529)

* Update changelog for 2.5.1

* Bump vite from 2.9.15 to 2.9.16 (#523)

Bumps [vite](https://github.com/vitejs/vite/tree/HEAD/packages/vite) from 2.9.15 to 2.9.16.
- [Release notes](https://github.com/vitejs/vite/releases)
- [Changelog](https://github.com/vitejs/vite/blob/v2.9.16/packages/vite/CHANGELOG.md)
- [Commits](https://github.com/vitejs/vite/commits/v2.9.16/packages/vite)

---
updated-dependencies:
- dependency-name: vite
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>

* Add note regarding timestamps() for Postgres users (#475)

* fix doc typo (#474)

* Adding ability to have a custom getNewMigrationName function. (#484)

* add stream as iterator part (#454)

* Update documentation to include except keyword (#468)

* Update schema-builder.md (#432)

* Added extending docs (#414)

* docs: add TypeScript module augmentation help (#531)

* Move website deployment to root and run only on docs changes

* run format on the docs folder

* update links

* Update CONTRIBUTING.md

Co-authored-by: Igor Savin <[email protected]>

* use npm instead of yarn

---------

Signed-off-by: Boelensman1 <[email protected]>
Signed-off-by: blam <[email protected]>
Signed-off-by: dependabot[bot] <[email protected]>
Co-authored-by: Igor Savin <[email protected]>
Co-authored-by: Lee Allen <[email protected]>
Co-authored-by: Daniel Mills <[email protected]>
Co-authored-by: Lorefnon <[email protected]>
Co-authored-by: EthanHur <[email protected]>
Co-authored-by: Matthew Kuo <[email protected]>
Co-authored-by: Daniel Norman <[email protected]>
Co-authored-by: Vamp <[email protected]>
Co-authored-by: Felix Mosheev <[email protected]>
Co-authored-by: Ricardo Maes <[email protected]>
Co-authored-by: Matthew Kuo <[email protected]>
Co-authored-by: Joe Warner <[email protected]>
Co-authored-by: julescubtree <[email protected]>
Co-authored-by: Anton Sitnikov <[email protected]>
Co-authored-by: Vithalreddy.M.B <[email protected]>
Co-authored-by: Taras Ozarko <[email protected]>
Co-authored-by: Nekrasov Ilya <[email protected]>
Co-authored-by: Nima Boscarino <[email protected]>
Co-authored-by: Micheal Winger <[email protected]>
Co-authored-by: maximelkin <[email protected]>
Co-authored-by: Oran Epelbaum <[email protected]>
Co-authored-by: Igor Savin <[email protected]>
Co-authored-by: Jan Swist <[email protected]>
Co-authored-by: Mr D <[email protected]>
Co-authored-by: Florent Vilmart <[email protected]>
Co-authored-by: Edvaldo Szymonek <[email protected]>
Co-authored-by: Jonas Gebhardt <[email protected]>
Co-authored-by: Niek <[email protected]>
Co-authored-by: Matthew Leffler <[email protected]>
Co-authored-by: Zach McElrath <[email protected]>
Co-authored-by: Zach McElrath <[email protected]>
Co-authored-by: Danial Malik <[email protected]>
Co-authored-by: Rico Kahler <[email protected]>
Co-authored-by: Eli Geller <[email protected]>
Co-authored-by: Mathieu DARTIGUES <[email protected]>
Co-authored-by: Ludovic HOCHET <[email protected]>
Co-authored-by: Tizian Adam <[email protected]>
Co-authored-by: Ivan Zhuravlev <[email protected]>
Co-authored-by: Arturs Vonda <[email protected]>
Co-authored-by: Nico Burns <[email protected]>
Co-authored-by: Jess Martin <[email protected]>
Co-authored-by: Mark Boyd <[email protected]>
Co-authored-by: Kkmatt11 <[email protected]>
Co-authored-by: Ben Lu <[email protected]>
Co-authored-by: CorvusCorrax <[email protected]>
Co-authored-by: martinmacko47 <[email protected]>
Co-authored-by: George Petrov <[email protected]>
Co-authored-by: Matt <[email protected]>
Co-authored-by: Matt Goodson <[email protected]>
Co-authored-by: Joshua Weiss <[email protected]>
Co-authored-by: Daniel Ferenc Balogh <[email protected]>
Co-authored-by: Daniel Hensby <[email protected]>
Co-authored-by: Jeremy W. Sherman <[email protected]>
Co-authored-by: Isaac Batista <[email protected]>
Co-authored-by: Jérémy Lal <[email protected]>
Co-authored-by: Benedict Tesha <[email protected]>
Co-authored-by: Wigger Boelens <[email protected]>
Co-authored-by: Jonathan <[email protected]>
Co-authored-by: Huseyin ELMAS <[email protected]>
Co-authored-by: Bruno P. Kinoshita <[email protected]>
Co-authored-by: zeotuan <[email protected]>
Co-authored-by: wolfcomp <[email protected]>
Co-authored-by: Mathias Lundell <[email protected]>
Co-authored-by: Ahacad <[email protected]>
Co-authored-by: Alan Andrade <[email protected]>
Co-authored-by: Matt Machuga <[email protected]>
Co-authored-by: Dustin Wheeler <[email protected]>
Co-authored-by: Orhan Toy <[email protected]>
Co-authored-by: Olivier Cavadenti <[email protected]>
Co-authored-by: Flleeppyy <[email protected]>
Co-authored-by: Adam Burgess <[email protected]>
Co-authored-by: Olivier CAVADENTI <[email protected]>
Co-authored-by: Dominik Krejcik <[email protected]>
Co-authored-by: Daniel Black <[email protected]>
Co-authored-by: Jiří Hofman <[email protected]>
Co-authored-by: Seth Holladay <[email protected]>
Co-authored-by: Jeremy Walker <[email protected]>
Co-authored-by: Ben Lambert <[email protected]>
Co-authored-by: Shane A. Stillwell <[email protected]>
Co-authored-by: Marat Levit <[email protected]>
Co-authored-by: Manda Putra <[email protected]>
Co-authored-by: Richard <[email protected]>
Co-authored-by: Tim Griesser <[email protected]>
Co-authored-by: Alex Pavlovich <[email protected]>
Co-authored-by: Owen Allen <[email protected]>
Co-authored-by: Sacha STAFYNIAK <[email protected]>
Co-authored-by: Benicio Cardozo <[email protected]>
Co-authored-by: Peiman Nourani <[email protected]>
Co-authored-by: Andres Kalle <[email protected]>
Co-authored-by: 찰스 <[email protected]>
Co-authored-by: Lucas Bickel <[email protected]>
Co-authored-by: Felix Wehnert <[email protected]>
Co-authored-by: Phạm Thành Trung <[email protected]>
Co-authored-by: Bruno Enten <[email protected]>
Co-authored-by: Tobias Jäger <[email protected]>
Co-authored-by: Jakob Joonas <[email protected]>
Co-authored-by: Simon Plenderleith <[email protected]>
Co-authored-by: Kelly Bourg <[email protected]>
Co-authored-by: Hasnae <[email protected]>
Co-authored-by: Woosik Kim <[email protected]>
Co-authored-by: abal <[email protected]>
Co-authored-by: Tejas Dhamecha <[email protected]>
Co-authored-by: Arthur Tabatchnic <[email protected]>
Co-authored-by: TheUntraceable <[email protected]>
Co-authored-by: Maurice Doepke <[email protected]>
Co-authored-by: Keyu Ubi <[email protected]>
Co-authored-by: Tom <[email protected]>
Co-authored-by: François de Metz <[email protected]>
Co-authored-by: Erin Dees <[email protected]>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: duckboy81 <[email protected]>
Co-authored-by: Arpit Pandey <[email protected]>
Co-authored-by: will ye <[email protected]>
Co-authored-by: Craig Blackburn <[email protected]>
Co-authored-by: aiven715 <[email protected]>
Co-authored-by: Justin Schoen <[email protected]>
Co-authored-by: Mohamed Emad <[email protected]>
Co-authored-by: Benjamin Chodoroff <[email protected]>
Co-authored-by: Garrit Franke <[email protected]>
Co-authored-by: Alpha Vylly <[email protected]>
Co-authored-by: Erin Dees <[email protected]>
Co-authored-by: Omar Abdelkader <[email protected]>
Co-authored-by: Warren Seymour <[email protected]>
Co-authored-by: André Ricardo <[email protected]>
Co-authored-by: Liran Tal <[email protected]>
Co-authored-by: Ashot Nazaryan <[email protected]>
Co-authored-by: Aleix Morgadas <[email protected]>
Co-authored-by: Salvatore Garbesi <[email protected]>
Co-authored-by: Kévin Berthommier <[email protected]>
Co-authored-by: Deirdre Sweeney <[email protected]>
Co-authored-by: StefanAvra <[email protected]>
Co-authored-by: Dominic Vonk <[email protected]>
Co-authored-by: Calvin <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants