Giter Club home page Giter Club logo

keep-a-changelog's People

Contributors

boesing avatar c33s avatar dasprid avatar dependabot[bot] avatar glensc avatar heiglandreas avatar jcalonso avatar lansoweb avatar michalbundyra avatar noplanman avatar ocramius avatar ramsey avatar spawnia avatar weierophinney avatar xerkus avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

keep-a-changelog's Issues

Discover "editor" command

Hello!

Please discover the editor command in PATH (e.g. in Debian-based systems)

Debian releases have for example a symlink: /usr/bin/editor

Better error message when tagging failed, help with setting up tagging

Feature Request

Q A
New Feature yes
BC Break no

Summary

It wasn't immediately clear for me why the version:tag command failed because I didn't know the error from git. It would be helpful to point out that the error is from the git command itself and not from keep-a-changelog.
I'd suggest something like "The command git tag -s ... failed".

The problem was the signing part. I'm familiar with GPG but didn't realize that keep-a-changelog forces signing tags.
For some reason I had to execute export GPG_TTY=$(tty) for KAC to work.
Maybe that should be mentioned in the config.
Also, perhaps it's easier for some setups to be able to disable tag signing altogether? Or is that required by GitHub?

Strict mode for version:tag

Feature Request

Q A
New Feature yes
BC Break no

Summary

I'd like to have additional checks on tagging:

  • check if the (stable?) tag is on master (unless --force flag provided)
  • check if the date is set in CHANGELOG.md for the given tag
  • check if there is no any changes in the project (nothing to commit, working tree clean) (unless --force flag provided?)

Feature: bump non-stable versions

Ideally, we should be able to bump each of the following version types:

  • alpha releases
  • beta releases
  • release candidates
  • patch level releases
  • development releases

Creating an initial changelog for each of these types can likely be delegated to the functionality requested in #6; this feature would look for an existing release of the given type, and bump the version following the type identifier.

When developing this feature, keep in mind that these stability versions can often have shortened names as well:

  • alpha => a
  • beta => b
  • patch level is often either pl or p
  • development is often either devel or dev

Additionally, any such match for these should be case insensitive.

Phive installation fails

Bug Report

Q A
BC Break no
Version 2.10.1

Summary

Trying to install phly/keep-a-changlog using phive

$phive install phly/keep-a-changelog --copy 

Phive 0.14.4 - Copyright (C) 2015-2020 by Arne Blankerts, Sebastian Heuer and Contributors
Downloading https://api.github.com/rate_limit
Downloading https://github.com/phly/keep-a-changelog/releases/download/2.10.1/keep-a-changelog.phar
Downloading https://github.com/phly/keep-a-changelog/releases/download/2.10.1/keep-a-changelog.phar.asc
Downloading key 9A2577FF9A688FAF
Trying to connect to keys.openpgp.org (37.218.245.50)
Downloading https://keys.openpgp.org/pks/lookup?op=get&options=mr&search=0x9A2577FF9A688FAF
Successfully downloaded key.
[WARNING]  Parsing key data failed with error code 0: No UIDs in key found 
Trying to connect to keyserver.ubuntu.com (162.213.33.8)
Trying to connect to keyserver.ubuntu.com (162.213.33.9)
[WARNING]  Failed with error code 404: Key not found on keyserver 
[WARNING]  Failed with error code 6: DNS Problem: Did not find any IP for hostname "hkps.pool.sks-keyservers.net" 
[ERROR]    PublicKey 9A2577FF9A688FAF not found on key servers 

Current behaviour

Fails to retrieve the public key used for signing from the servers

How to reproduce

Run

$ phive install phly/keep-a-changelog

Expected behaviour

Expected to have the phar installed

PHAR version creates a buggy local config

Bug Report

Q A
BC Break no
Version 2.9.0

Summary

The issue probably is related to #81

When creating a local config with the PHAR version with keep-a-changelog config:create -l the config file starts with _HumbugBoxaa7bf30d75ed\:

$ cat .keep-a-changelog.ini
_HumbugBoxaa7bf30d75ed\[defaults]
changelog_file = CHANGELOG.md
provider = github
remote = origin

[providers]
github[class] = Phly\KeepAChangelog\Provider\GitHub
gitlab[class] = Phly\KeepAChangelog\Provider\GitLab

How to reproduce

Download the PHAR and execute keep-a-changelog config:create -l.

Expected behaviour

No humbug ๐Ÿ™‚

Validation

Have you thought about a validate command that checks the changelog?

Release command ends up silently creating wrong tag when tag was pushed to a wrong remote

Release command can push tag to a wrong remote and then proceed to create a release.
Since in that case tag will not be present in the release repository, github will silently create annotated tag.

Since release target is specified in <org>/<repo> format, it was a surprise that it used default origin remote.
Github tags page shows Verified signature status of the commit pointed by the tag with proper key id so it is very hard to notice something went wrong.

Suggested solution:

  • Convenience check if remote url matches default github/gitlab pattern for git or https urls. If it is, verify it matches specified org and repository. Fail early.
  • Proper: Use api to verify tag ref is present in release repository before api call to create a release is made. Bonus points for checks whether object obtained from tag ref is of type tag (as opposed to annotated tag, which will have object of type commit i believe)

Usage that led to the issue occurence:
I am using hub, a cli wrapper around git for interacting with github.
In the github/hub flow origin points to a fork and upstream to original repository:

[zend-tag (master)]$ git remote -v
origin	[email protected]:Xerkus/zend-tag.git (fetch)
origin	[email protected]:Xerkus/zend-tag.git (push)
upstream	[email protected]:zendframework/zend-tag.git (fetch)
upstream	[email protected]:zendframework/zend-tag.git (push)

Terminal history leading to the problem:

[zend-tag (master +)]$ git commit -m "2.7.1 readiness"
[master a9f92a0] 2.7.1 readiness
 1 file changed, 1 insertion(+), 1 deletion(-)
[zend-tag (master)]$ keep-a-changelog tag -a release-2.7.1 2.7.1
Created tag "2.7.1" for package "zend-tag" using the following notes:
Added
-----

- [#22](https://github.com/zendframework/zend-tag/pull/22) adds support for PHP 7.3.

Changed
-------

- Nothing.

Deprecated
----------

- Nothing.

Removed
-------

- Nothing.

Fixed
-----

- Nothing.
[zend-tag (master)]$ keep-a-changelog release zendframework/zend-tag 2.7.1 -a release-2.7.1
Preparing changelog for release
Pushing tag 2.7.1 to origin
Enumerating objects: 14, done.
Counting objects: 100% (14/14), done.
Delta compression using up to 8 threads
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 3.29 KiB | 3.29 MiB/s, done.
Total 11 (delta 6), reused 0 (delta 0)
remote: Resolving deltas: 100% (6/6), completed with 3 local objects.
To github.com:Xerkus/zend-tag.git
 * [new tag]         release-2.7.1 -> release-2.7.1
Creating release "zend-tag 2.7.1"        <<<<-------- github silently creates annotated tag
Created https://github.com/zendframework/zend-tag/releases/tag/release-2.7.1

Feature: read package name from composer.json

It would be nice to read the package name from composer.json if it's omitted.

Instead of doing this:

$ keep-a-changelog tag --package zendframework/<package_name> x.x.x

You would do this:

$ keep-a-changelog tag x.x.x
$ keep-a-changelog release x.x.x

Command `release` with global configuration

I have created global configuration with token. I was expected that it will be used on release, but I have to do it manually and I think the message is not clear that I can use global configuration.

What I would suggest is to have fallback to global configuration if there is no local configuration or at least change the error message to suggest maybe using global configuration if provided. Now we have:

$ keep-a-changelog release webimpress/my-package 1.0.0
No token provided, and could not find it in the config file /home/Code/my-package/.keep-a-changelog.ini
Please provide the --token option, or create the config file with the config command

Tag command produces error with only 1 version

Provide a narrative description of what you are trying to accomplish.

If the CHANGELOG has only 1 version, the tag command fails. Same behaviour with any version number (eg. 3.0.0, etc). Will investigate this issue and create a PR.

Code to reproduce the issue

$ vendor/bin/keep-a-changelog new
Created new changelog in file "/private/tmp/changelog-test/CHANGELOG.md" using initial version "0.1.0".
$ vendor/bin/keep-a-changelog entry:added "Testing"
Preparing entry for Added section
Writing "Added" entry to /private/tmp/changelog-test/CHANGELOG.md
$ git add CHANGELOG.md .gitignore composer.json
...
$ git commit -m "Test 1"
...
$ git push
...
$ vendor/bin/keep-a-changelog ready
Setting release date of most recent changelog to "2018-04-19"
$ vendor/bin/keep-a-changelog tag 0.1.0
In InvalidChangelogFormatException.php line 18:
  Changelog entry found for version 0.1.0, but it appears to be formatted incorrectly.
$ vendor/bin/keep-a-changelog bump
Bumped changelog version to 0.1.1
$ vendor/bin/keep-a-changelog ready
Setting release date of most recent changelog to "2018-04-19"
$ vendor/bin/keep-a-changelog tag 0.1.1
Created tag "0.1.1" for package "changelog-test" using the following notes:
Added
-----
...

Expected results

Tag working with the first version.

Actual results

Error produced above.

Cannot parse changelogs with version links

Code to reproduce the issue

  1. Run keep-a-changelog new
  2. Run keep-a-changelog bump:bugfix
  3. Manually edit "CHANGELOG.md" and add brackets to the version 0.1.1
  4. Add a line at the end of the file [0.1.1]: https://github.com/org/repo/compare/v0.1.0...v0.1.1
  5. Run keep-a-changelog bump:bugfix

Expected results

Next bugfix release added.

Actual results

Error about "Unable to find any changelog entries in file"

When looking at https://keepachangelog.com/en/1.0.0/ you can see that the format does accomodate for having links at the bottom.

Github error using release command

Provide a narrative description of what you are trying to accomplish.

An error occurs at the end of release command, for both new and previous projects. Changed github token permissions, even use a full access one, same error.

Code to reproduce the issue

$ vendor/bin/keep-a-changelog new
Created new changelog in file "/private/tmp/changelog-test/CHANGELOG.md" using initial version "0.1.0".
$ vendor/bin/keep-a-changelog entry:added "Testing"
Preparing entry for Added section
Writing "Added" entry to /private/tmp/changelog-test/CHANGELOG.md
$ git add CHANGELOG.md .gitignore composer.json
...
$ git commit -m "Test 1"
...
$ git push
...
$ vendor/bin/keep-a-changelog ready
Setting release date of most recent changelog to "2018-04-19"
$ vendor/bin/keep-a-changelog tag 0.1.0
In InvalidChangelogFormatException.php line 18:
  Changelog entry found for version 0.1.0, but it appears to be formatted incorrectly.
$ vendor/bin/keep-a-changelog bump
Bumped changelog version to 0.1.1
$ vendor/bin/keep-a-changelog ready
Setting release date of most recent changelog to "2018-04-19"
$ vendor/bin/keep-a-changelog tag 0.1.1
Created tag "0.1.1" for package "changelog-test" using the following notes:
Added
-----
...
$ vendor/bin/keep-a-changelog release Lansoweb/changelog-test 0.1.1
Preparing changelog for release
Pushing tag 0.1.1 to origin
Everything up-to-date
Creating release "changelog-test 0.1.1"

In GithubExceptionThrower.php line 87:

  Invalid request.
  For 'links/0/schema', nil is not an object.

release [-t|--token TOKEN] [-r|--remote REMOTE] [-a|--tagname TAGNAME] [--name NAME] [--] <package> <version>

Expected results

Release finishes without errors.

Actual results

Error above.

Gitlab Subgroups are not supported

in gitlab you can have subgroups like group/subgroup/subgroup2/project

currently the --package switch only allow the format group_or_user/project

Feature: allow all commands to operate on alternate changelog file

Currently, other than the new command, all commands assume that the file being updated is CHANGELOG.md in the current working directory.

However, a number of projects will have different changelogs per major or minor version.

As such, we need some global option available that all commands can be aware of which will be used to indicate the specific file to work with, defaulting to CHANGELOG.md.

(Doc) Beginner's guide

Feature Request

Q A
New Feature yes
BC Break no

Summary

The first time I used KAC I had to figure out how a regular flow would look like. I got used to it quite quickly but a small tutorial would have been helpful. Something like that:

Basic flow for a bugfix:

  • create a changelog: keep-a-changelog changelog:new
  • add a new patch release: keep-a-changelog bump
  • fix the bug in the code
  • log the stuff in the changelog: keep-a-changelog entry:changed -- "Fix that nasty bug"
  • when you're ready to merge/release: keep-a-changelog version:ready
  • git commit/push/merge/...
  • tag the version: keep-a-changelog version:tag 1.2.3
  • release the version: keep-a-changelog version:release 1.2.3

It'd really speed up getting used to KAC.
Thanks :)

Feature: automated versioning of command

When I was developing this package, I initially had attempted to use Ocramius/package-versions for providing the command version for the keep-a-changelog script. However, at the time, I had some issues, which I failed to document, which prevented this approach.

I'd like to have automated versioning of the command, so that I don't have to maintain it by hand. Ideally, it should be able to determine the version based on what was installed via composer, falling back to truncated sha1 commit identifier.

How to deal with [Unreleased] and preview/beta/alpha versions?

First of all: Thanks for this great tool, I wouldn't be creating issues if I didn't think this has much value and potential :) I'm currently running into some issues that might be because I'm not fully understanding the library..

keepachangelog.com mentions that you can add [Unreleased]: https://keepachangelog.com/en/1.0.0/

I'm not sure how I can create a release based on this? In my case I want to do something like:

keep-a-changelog bump:to-version 1.0.0-preview.0

I would expect it to rename the [Unreleased] section to [1.0.0-preview.0] - TDB and create a new [Unreleased] section. The reason is that I can't know if its a major/minor/patch while creating my changes. If a change becomes breaking, it will become a major of course..

When I manually put [1.0.0-preview.0] - TDB in the CHANGELOG.md file and I know try to run: keep-a-changelog ready -vvv I get:

Setting release date of most recent changelog to "2020-02-24"

In NoMatchingChangelogDiscoveredException.php line 18:

  [Phly\KeepAChangelog\Exception\NoMatchingChangelogDiscoveredException]
  Unable to find un-dated changelog entry in Sites/project-waardijk.nl/vendor/reach-digital/docker-devbox/CHANGELOG.md


Exception trace:
  at .composer/vendor/phly/keep-a-changelog/src/Exception/NoMatchingChangelogDiscoveredException.php:18
 Phly\KeepAChangelog\Exception\NoMatchingChangelogDiscoveredException::for() at .composer/vendor/phly/keep-a-changelog/src/SetDate.php:25
 Phly\KeepAChangelog\SetDate->__invoke() at .composer/vendor/phly/keep-a-changelog/src/ReadyCommand.php:53
 Phly\KeepAChangelog\ReadyCommand->execute() at .composer/vendor/symfony/console/Command/Command.php:255
 Symfony\Component\Console\Command\Command->run() at .composer/vendor/symfony/console/Application.php:982
 Symfony\Component\Console\Application->doRunCommand() at .composer/vendor/symfony/console/Application.php:255
 Symfony\Component\Console\Application->doRun() at .composer/vendor/symfony/console/Application.php:148
 Symfony\Component\Console\Application->run() at .composer/vendor/phly/keep-a-changelog/bin/keep-a-changelog:61

ready [-d|--date DATE]

Also, creating preview releases requires me to know the current version in advance, would be nice if I'd be able to create a beta/alpha/preview/blabla release without creating a new version

Uncaught TypeError get_headers() Argument #2 ($associative) must be of type bool, int given

Bug Report

Q A
Version 2.12.1.0
PHP 8.1.23

Summary

The associative argument of the get_headers() function has been changed from int to bool in PHP 8.0.

Current behaviour

PHP Fatal error:  Uncaught TypeError: get_headers(): Argument #2 ($associative) must be of type bool, int given in /redacted/phly/keep-a-changelog/src/Entry/AbstractPrependLinkListener.php:86

$headers = get_headers(
$link,
1,
stream_context_create(['http' => ['method' => 'HEAD']])
);

How to reproduce

keep-a-changelog entry:changed -i 123 -- 'Change log entry'

Condensed mode

currently new entries are added with an extra newline:

## Added
- entry 1

- entry 2

- entry 3

the forced newline looks to be a hardcoded private constant hardcoded AddEntry::APPEND_NEWLINE = true
this should be configureable

Backticked content is not added to CHANGELOG.md

I run the command:

$ keep-a-changelog entry:fixed --pr=5 "`MyNamespace\MyClass` - fixes something"

and the entry in the changelog was as follows:

### Fixed

- [#5](https://github.com/webimpress/my-package/pull/5)  - fixes something

so the whole backticked content is gone somewhere and there are two spaces now.

PHAR version requires "_HumbugBox" prefixed implementation of ProviderInterface

Bug Report

Q A
BC Break no
Version 2.9.0

Summary

It seems that the packaging to a PHAR file does some monkey business with the namespace of the project. The provider has to be an instance of _HumbugBoxaa7bf30d75ed\Phly\KeepAChangelog\Provider\ProviderInterface.

Current behaviour

When releasing a version with keep-a-changelog version:release 1.2.3 an error is raised: The provider as currently configured is incapable of performing a release.
Problem is in the config file the provider class is Phly\KeepAChangelog\Provider\GitHub whereas the PHAR wants an implementation of _HumbugBoxaa7bf30d75ed\Phly\KeepAChangelog\Provider\ProviderInterface.

How to reproduce

Download the PHAR file, create a global config with keep-a-changelog config:create -g, set the GitHub token and try to release a version. The error above is raised. When changing the provider to _HumbugBoxaa7bf30d75ed\Phly\KeepAChangelog\Provider\GitHub it works as expected.

Expected behaviour

The _HumbugBoxaa7bf30d75ed namespace shouldn't be there.

It seems every packaging creates a random string after the prefix _HumbugBox. I also tested it with version 2.8.1. The namespace is _HumbugBoxdcb0919ddeeb there.

Omit version when tagging/releasing

Feature Request

Q A
New Feature yes
BC Break no

Summary

It would be nice if the commands verison:tag and version:release didn't require the version but use the latest verison of the changelog, instead. And additionally an input question would be cool ("Version to tag/release. Default: 1.2.3").

Feature: create new changelog entry with arbitrary version

This is a feature request:

Create an arbitrarily versioned changelog entry:

$ keep-a-changelog bump:custom <version>

Creates a new changelog section for the specified version, at the top of the file. Useful in particular for new alpha, beta, rc, patch, dev, or other versions.

(GitHub provider) Better error message when API token is invalid

Feature Request

Q A
New Feature yes
BC Break no

Summary

It would be nice to get a specific error message when the call to the GitHub fails because of invalid credentials.
The used package raises a \Github\Exception\RuntimeException with the message Bad credentials and error code 401. That could be used to generate a nice error.
image

config:create doesn't to anything

Bug Report

Q A
BC Break no
Version 2.9.0

Not really a bug, but when executing keep-a-changelog config:create without -l or -g the command doesn't do anything:

$ changelog config:create
$ echo $?
0

It'd be nice to output a warning or using a default value.

Tested with PHAR and global composer installation.

Selecting remote issue (v1/v2)

Bug Report

Q A
BC Break no
Version 2.1.0

Summary

Remotes are not detected and choosing abort try to push "to abort". My remotes are correct:

origin	git://github.com/zendframework/zend-expressive-authentication-oauth2.git (fetch)
origin	git://github.com/zendframework/zend-expressive-authentication-oauth2.git (push)
webimpress	[email protected]:webimpress/zend-expressive-authentication-oauth2.git (fetch)
webimpress	[email protected]:webimpress/zend-expressive-authentication-oauth2.git (push)
zendframework	[email protected]:zendframework/zend-expressive-authentication-oauth2.git (fetch)
zendframework	[email protected]:zendframework/zend-expressive-authentication-oauth2.git (push)

On v1 I've seen option origin and zendframework, but selecting doesn't work as I was getting error "pushing to 0" or "pushing to 1" (so the option number was used instead of the value).

In v2 there is the same issue, but also remotes are not recognised.

Current behaviour

Using version 2.1:

$ keep-a-changelog version:release 1.2.0
More than one valid remote was found; which one should I use?
  [abort] Abort release
 > abort
Pushing tag 1.2.0 to abort
fatal: 'abort' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Error pushing tag to remote!
Please check the output for details.

Using the latest v1 (remotes are detected correctly):

$ keep-a-changelog release zendframework/zend-expressive-authentication-oauth2 1.2.0 --global
Preparing changelog for release
More than one valid remote was found; which one should I use?
  [0    ] origin
  [1    ] zendframework
  [abort] Abort release
 > abort
Pushing tag 1.2.0 to abort
fatal: 'abort' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Error pushing tag to remote!
Please check the output for details.

and:

$ keep-a-changelog release zendframework/zend-expressive-authentication-oauth2 1.2.0 --global
Preparing changelog for release
More than one valid remote was found; which one should I use?
  [0    ] origin
  [1    ] zendframework
  [abort] Abort release
 > 1
Pushing tag 1.2.0 to 1
fatal: '1' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
Error pushing tag to remote!
Please check the output for details.

How to reproduce

My configuration (v2):

[defaults]
changelog_file = CHANGELOG.md
provider = github

[providers]
github[class] = Phly\KeepAChangelog\Provider\GitHub
github[token] = Yes
gitlab[class] = Phly\KeepAChangelog\Provider\GitLab
gitlab[token] = Yes

Expected behaviour

  • Remotes are detected correctly.
  • I can choose desired remote.

Feature: create new changelog file

This is a feature request.

Create a new changelog file from scratch, starting with a 0.1.0 version.

$ keep-a-changelog create [--initial-version|-i] [--filename|-f]

Creates a new changelog file. By default, it will be named CHANGELOG.md, and have a 0.1.0 entry; however, you can specify an alternate file and/or initial version via the options.

Generated Merge Request link description is invalid

- [#130](https://gitlab.com/username/project/merge_requests/130) My New Entry

should be:

- [!130](https://gitlab.com/username/project/merge_requests/130) My New Entry

in gitlab issues and merge requests differ. merge requests are prefixed with ! like !130, issues are prefixed with # like on github.

for gitlab it is also relevant to link to merge requests or issues or maybe both.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.