Coder Social home page Coder Social logo

cake.docker's Introduction

Cake.Docker

A Cake AddIn that extends Cake with Docker command tools.

cakebuild.net NuGet

Including addin

Including addin in cake script is easy.

#addin "Cake.Docker"

Commands supported

Cake references

  • 1.3.0: Cake 4.0.0

  • 1.2.0: Cake 3.0.0

  • 1.1.0: Cake 2.0.0

  • 1.0.0: Cake 1.0.0

  • 0.10.0: Cake 0.33

  • 0.9.4: Cake 0.28

  • 0.9 references Cake 0.26 (and goes .NET Standard 2.0 only)

Important: In version 1.2.1 DockerComposeUpSettings.DetachedMode is renamed to Detach.

Important: In version 1.2.0 the .netcore 3.1 is dropped, only .net6+ versions are distributed.

Important: In version 1.1.0 the .netstandard 2.0 version is dropped and instead .netcore 3.1, .net5 and .net6 versions are distributed.

Important: Since version 0.10.0 path argument to DockerBuild is now quoted if not quoted already.

Important: Docker 17.* is supported since v0.8 and background compatibility is dropped (most notably, array arguments are converter to strings). If you wish to match older docker versions, user an older Cake.Docker version.

Important: Since version 0.8.0 the settings are generated from the latest Docker source code on github.

BREAKING Starting with 0.8.0 command's setting types that haven't been composed of all words have changed to full name. i.e. DockerBuildSettings to DockerImageBuildSettings).

Usage

To use the addin just add it to Cake call the aliases and configure any settings you want.

#addin "Cake.Docker"

...

// How to remove a container with no settings
Task("DockerRm")
	.Does(() => {
		// or more containers at once
		DockerRm("containerName1", "containerName2", ...);
	)};
	
// How to remove a container with settings
Task("DockerRmWithSettings")
	.Does(() => {
		// or more containers at once
		DockerRm(new DockerRmSettings { Force = true }, "containerName1", "containerName2", ...);
	)};

Other commands follow same convention.

All come with settings argument and support all settings except for DockerBuild which supports only major settings.

General Notes

This is an initial version and not tested thoroughly.

Contributions welcome - but ask first (create an issue).

Tested only on Windows and Ubuntu. Ensure that Docker command line tool can be located using the PATH (e.g. check that it can be found with which docker). On Linux machines, ensure that user has access to the docker daemon Unix socket or use the DOCKER_HOST environment variable to point to the daemon's TCP port. Refer to the Docker documentation for controlling access to the docker daemon Unix socket.

Follow @mihamarkic@mastodon.social

Discussion

For questions and to discuss ideas & feature requests, use the GitHub discussions on the Cake GitHub repository, under the Extension Q&A category.

Join in the discussion on the Cake repository

cake.docker's People

Contributors

blythmeister avatar dany1468 avatar daveaglick avatar deeps-vmware avatar eoehen avatar gitfool avatar mabead avatar mariuszkerl avatar mihamarkic avatar nrjohnstone-coolblue avatar pascalberger avatar pvwichen avatar rollenes avatar sikebe avatar tgharold avatar twenzel avatar wrathza 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

cake.docker's Issues

'Rm' and 'ForceRM' settings in DockerImageBuildSettings are not applied correctly

According to https://docs.docker.com/engine/reference/commandline/build/, the docker build command should be used with options like --rm=false, --force-rm=true. This is not the case as of 0.9.6 version.

For example, the following in a script:
Task("Build") .Does(() => { DockerBuild(new DockerImageBuildSettings{ Rm = true, ForceRm = false }, path: "."); });

results in a command as follows:
docker.exe build --rm .

which should instead be:
docker.exe build --rm=true --force-rm=false .

DockerPs not working in latest version

I can see #9 , is DockerPs still not working?

Simple code like:

Task("something").Does(() => DockerPs());

Will not work. It doesn't think DockerPs is an alias, where as all other Cake.Docker commands work

Recommended changes resulting from automated audit

We performed an automated audit of your Cake addin and found that it does not follow all the best practices.

We encourage you to make the following modifications:

  • The nuget package for your addin should use the cake-contrib icon. Specifically, your addin's .csproj should have a line like this: <PackageIconUrl>https://cdn.jsdelivr.net/gh/cake-contrib/graphics/png/cake-contrib-medium.png</PackageIconUrl>.

Apologies if this is already being worked on, or if there are existing open issues, this issue was created based on what is currently published for this package on NuGet.

This issue was created by a tool: Cake.AddinDiscoverer version 3.12.1

Add support for Docker export

It would be useful to support Docker export to save an image to a tar file. We are going to be using this to publish images to AWS S3.

Recommended changes resulting from automated audit

We performed an automated audit of your Cake addin and found that it does not follow all the best practices.

We encourage you to make the following modifications:

  • The nuget package for your addin should use the cake-contrib icon. Specifically, your addin's .csproj should have a line like this: <PackageIconUrl>https://cdn.jsdelivr.net/gh/cake-contrib/graphics/png/cake-contrib-medium.png</PackageIconUrl>.

Apologies if this is already being worked on, or if there are existing open issues, this issue was created based on what is currently published for this package on NuGet.

This issue was created by a tool: Cake.AddinDiscoverer version 3.12.1

Pre-command arguments are also inserted as post-command arguments

Environment:

  • Windows 10
  • Docker for Windows 18.03.1-ce
  • Cake 0.29.0
  • Cake.Docker 0.9.4

Code:

var dockerComposeUpSettings = new DockerComposeUpSettings
{
    Verbose = true
};
DockerComposeUp(dockerComposeUpSettings);

Current result:

The above code produces the following command:
"C:/Program Files/Docker/Docker/Resources/bin/docker-compose.exe" --verbose up --verbose
which is incorrect, the --verbose switch shouldn't be inserted as post-command argument.

Expected result:

"C:/Program Files/Docker/Docker/Resources/bin/docker-compose.exe" --verbose up command should be produced and executed.

This issue affects also other types of Docker Settings, not only Up.

Error using Cake 0.18.0

My build started failing today, and it appears to be caused by an assembly version mismatch introduced by Cake 0.18.0 (we're using the bootstrapper script which automatically downloads the latest build of cake).

Error: The assembly 'Cake.Docker, Version=0.7.4.0, Culture=neutral, PublicKeyToken=null' is referencing an older version of Cake.Core (0.10.1). This assembly need to reference at least Cake.Core version 0.16.0. Another option is to downgrade Cake to an earlier version.

My (temporary) workaround is to edit build.sh to download the 0.17.0 version of packages.config:

#curl -Lsfo "$TOOLS_DIR/packages.config" http://cakebuild.net/download/bootstrapper/packages
curl -Lsfo "$TOOLS_DIR/packages.config" https://raw.githubusercontent.com/cake-build/example/bf95e6e0119324183881a6b41deba4a711458b58/tools/packages.config

Would it be possible to use the Cake Contrib Icon for your NuGet Package?

Thanks again for creating this Cake Addin, we really appreciate the effort that you have put in to creating it.

We, the Cake Team, recently announced a new Cake Contrib Icon, details of which can be found here:

http://cakebuild.net/blog/2017/06/new-cake-contrib-icon

Would you consider changing the nuspec file for your NuGet Package to use this new Cake Contrib Icon? If so, the recommended URL to use is:

https://cdn.rawgit.com/cake-contrib/graphics/a5cf0f881c390650144b2243ae551d5b9f836196/png/cake-contrib-medium.png

Details of the above URL can be found in the repository here:

https://github.com/cake-contrib/graphics

Please let me know if you have any questions.

Return container id on DockerRun

Whould it be possible to return the ContainerID when using DockerRun? Docker itself seems to print it into the console. DockerCreate already does this.

Memory and memory swap options are ambiguous

For both DockerImageBuildSettings and DockerContainerRunSettings, the Memory and MemorySwap properties are unsigned longs. Setting a value for these properties (35 for example) result in the following command line options --memory 35 or --memory-swap 35. The docker documentation instructs using an integer value followed by a suffix to indicate the unit.

These properties should be changed to strings so consumers can add the correct suffix when specifying an upper memory limit.

Using DockerImageBuildSettings, I would like to be able to use something like the following:

var settings = new DockerImageBuildSettings();
settings.Memory = "3GB";

docker-compose run - unable to provide volumes

Hi @MihaMarkic , I'm trying to execute an equivalent of:

docker-compose run -v {hostPath:containerPath} {service-name} but my impression is that this is not currently supported.

Is there any way I can have this executed using Cake.Docker ?

Cake 0.26.0 support

Hi,

Cake 0.26.0 was released which finally runs on .Net Core 2.0 and doesn't need .Net Core 1.x anymore to build.

I tried to update our projects to Cake 0.26.0 where we use your plugin but I get the following error message:

Downloading NuGet.exe...
Installing Cake...
Running build script...
Analyzing build script...
Processing build script...
Installing addins...
Error: The assembly 'Cake.Docker, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null'
is referencing an older version of Cake.Core (0.22.0).
This assembly need to reference at least Cake.Core version 0.26.0.
Another option is to downgrade Cake to an earlier version.
It's not recommended, but you can explicitly opt-out of assembly verification
by configuring the Skip Verification setting to true
(i.e. command line parameter "--settings_skipverification=true",
environment variable "CAKE_SETTINGS_SKIPVERIFICATION=true",
read more about configuration at https://cakebuild.net/docs/fundamentals/configuration)

It seems to me, that Cake.Docker needs to reference the new Cake version to work properly.

DockerComposeRunSettings Entrypoint is wrong

DockerComposeRunSettings contains a property for Entrypoint which should result in something like --entrpoint my-entrypoint. However, this property is a boolean, not a string.

https://github.com/MihaMarkic/Cake.Docker/blob/master/src/Cake.Docker/Compose/Run/DockerComposeRunSettings.cs#L20

        var settings = new DockerComposeRunSettings
        {
            ProjectName = "my-compose-project",
            Rm = true,
            Files = new[] { "docker-compose.frontend.yml" },
            Entrypoint = true
        };

        var runArgs = new List<string>
        {
            "yarn",
            "build"
        };

        DockerComposeRun(settings, "my-compose-service", runArgs.ToArray());

The preceding code generates the following compose command:
"C:/Program Files/Docker/Docker/Resources/bin/docker-compose.exe" -f docker-compose.frontend.yml -p "my-compose-project" run --entrypoint --rm frontend-watch yarn build

when what I need it to be (for this specific example I need a blank string for entrypoint)
"C:/Program Files/Docker/Docker/Resources/bin/docker-compose.exe" -f docker-compose.frontend.yml -p "my-compose-project" run --entrypoint " " --rm frontend-watch yarn build

DockerPs raising exception: Error: Length cannot be less than zero.

My scenario is:

  • Windows 10 build 1607
  • Docker for Windows version 17.03.1-ce, build c6d412e
  • PowerShell version: 5.1.14393.953

I have two containers running:

PS C:\> docker ps
CONTAINER ID        IMAGE         COMMAND                  CREATED             STATUS              PORTS                                                                                NAMES
11c043148199        xxx/redis     "docker-entrypoint..."   3 days ago          Up 3 days           6379/tcp, 0.0.0.0:13000->13000/tcp                                                   dev-redis
44c9ac5e888d        xxx/consul    "docker-entrypoint..."   3 days ago          Up 3 days           8300-8302/tcp, 8400/tcp, 8301-8302/udp, 8600/tcp, 8600/udp, 0.0.0.0:8500->8500/tcp   dev-consul
PS C:\>

But when trying to run the following DockerPs() method:

#addin Cake.Docker

Task("Docker-Stop-Redis")
    .Does(() => 
    {
        var containerName = dockerSettings.Services["Redis"].ContainerName;

        var running = DockerPs();
        var container = running.SingleOrDefault(c => c.Name == containerName);
        if(container == null) return;

        var settings = new DockerStopSettings { Time = 3 };
        DockerStop(settings, containerName);
    });

It's crashing like this:

Running build script...
Analyzing build script...
Processing build script...
Installing addins...
Compiling build script...

----------------------------------------
Setup
----------------------------------------
Executing custom setup action...

========================================
Docker-Stop-Redis
========================================
Executing task: Docker-Stop-Redis
An error occurred when executing task 'Docker-Stop-Redis'.

----------------------------------------
Teardown
----------------------------------------
Executing custom teardown action...
Error: Length cannot be less than zero.
Parameter name: length

The crashes happens exactly at line var running = DockerPs();. I could verify that adding some Information() output before and after each line to know the exception location.

Lack of support of -T flag for DockerComposeExec

Environment:

  • Windows 10
  • Docker for Windows 18.03.1-ce
  • Cake 0.29.0
  • Cake.Docker 0.9.4
  • Jenkins 2.129

Scenario:

var dockerComposeExecSettings = new DockerComposeExecSettings
        {
            Detach = false,
            ProjectName = dockerProjectName,
            Files = dockerComposeFiles
        };

DockerComposeExec(dockerComposeExecSettings, "builder", "sh -c \"echo $0\"");

The problem is that the above doesn't run when executed by Jenkins, command fails with the following message:

the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'

The solution for it is to run docker-compose exec command with -T switch to disable TTY allocation (see reference) however, it doesn't seem that this flag is supported by DockerComposeExecSettings.

Workaround:

Prepend -T to the service name, i.e.:
DockerComposeExec(dockerComposeExecSettings, "-T builder", "sh -c \"echo $0\"");

Proposed solution:
Add support for that flag to DockerComposeExecSettings, also, to avoid such hacks in the future, it may be beneficial to add some extensions to add Pre and Post command arguments to settings.

Recommended changes resulting from automated audit

We performed an automated audit of your Cake addin and found that it does not follow all the best practices.

We encourage you to make the following modifications:

  • You are currently referencing Cake.Core 0.26.0. Please upgrade to 0.28.0
  • The nuget package for your addin should use the cake-contrib icon. Specifically, your addin's .csproj should have a line like this: <PackageIconUrl>https://cdn.rawgit.com/cake-contrib/graphics/a5cf0f881c390650144b2243ae551d5b9f836196/png/cake-contrib-medium.png</PackageIconUrl>.

Apologies if this is already being worked on, or if there are existing open issues, this issue was created based on what is currently published for this package on NuGet.org and in the project on github.

DockerRun doesn't return internal commandline output after upgrading to 0.9.5

We're using a docker image to run our tests. Before version 0.9.5; we would run this docker image and it would output the commandline output inside the docker towards our Cake build; for example:

Build started, please wait...
Build completed.

Test run for /app/src/somedll.dll(.NETCoreApp,Version=v2.0)
Microsoft (R) Test Execution Command Line Tool Version 15.8.0
Copyright (c) Microsoft Corporation.  All rights reserved.

Starting test execution, please wait...
Failed   SomeTest
Total tests: 4. Passed: 3. Failed: 1. Skipped: 0.

After upgrading to the 0.9.5 (or the 0.9.6); it doesn't output this information anymore. Do we miss some new setting?

I've also run cake with -verbosity=diagnostic for both the 0.9.4 and the 0.9.5/0.9.6 and looked at the executed command; which is exactly the same.

Our code:

var testFilePath = GetDockerTestPath();
var runSettings = new DockerContainerRunSettings
{
    Volume = new string[] {$"{solutionFile.GetDirectory()}:/app/src/"},
    Network = $"{DockerNetworkname()}_test"
};
DockerRun(runSettings,
          "CompanyPrivateDockerRepo/SomeTestImage:dotnet20",
          $"dotnet test {testFilePath}",
          "");

Add support to DockerRun to allow arguments without command name

I have an image that defines the following ENTRYPOINT:

ENTRYPOINT [ "dotnet", "test", "--logger", "trx;LogFileName=/var/test-results/UnitTests.trx" ]

I like to use ENTRYPOINT here so I can treat the above as the base command and be able to pass additional arguments when running a container. The DockerRun method in Cake.Docker version 0.9.6 requires passing a command name if I want the tool to pass the arguments to the run command. In the case of ENTRYPOINT this does not make sense since you cannot override it. I'd like to be able to only pass arguments to docker run instead of arguments with a command. Technically I can do this by providing something for the command argument to DockerRun, but it seems a little inaccurate.

It would be nice to have a overloads of DockerRun to meet this use case:

public static string DockerRun(this ICakeContext context, DockerContainerRunSettings settings, string image, params string[] args)

and

public static string DockerRun(this ICakeContext context, string image, params string[] args)

`Rm` setting in `DockerBuildSettings` causes build to fail

The DockerBuildSettings.Rm property accepts a string and passes that to the command line as an argument to the --rm option. As the --rm option is a flag, this causes Docker to fail with the "only accepts one argument" error. For example, the following in a script:

Task("Build")
.Does(() => {
  DockerBuild(new DockerBuildSettings { Rm = "true" }, "./build");
});

results in a command as follows:

/usr/bin/docker build --rm "true" ./build

which errors out with:

"docker build" requires exactly 1 argument(s)

DockerComposeUp and DockerComposeDown log output as errors (STDERR)

When Cake.Docker is running on TFS2017 on premise, the log output shows red entries even if they are no errors like:

--> Creating network "s_default" with the default driver
--> Creating container-x ...

--> [1BStopping container-x ...

So the build is failing, even when everything is ok, but TFS is interpreting the error output as errors.

It looks like the log are written in den STDERR by mistake instead of the STDOUT.

For the DockerContainerRun there is an ATTACH property (maybe to avoid this?), but for DockerComposeUpSettings and DockerComposeDownSettings there is no such property.

Is this issue explainable or does these settings needs an ATTACH property as well?

DockerBuild Alias quote the path

The path should be quoted.

a) Enhance method description that the path needs to be quoted
b) Auto quote if not quoted

There are other options, but one of them seems good to me

Aliases for Volumes

Do you have any plan to support the volume commands?

For now I'll use DockerCustomCommand but would be nice to have direct support.

Is that something that would be reasonable to attempt a PR on?

docker logout command

Hi,
There isn't support for the docker logout command in this addin.
Is it something that you would be willing to accept in a PR?

It should be fairly straight forward.

Add support for docker-compose port and ps

We need to retrieve easily the port of a docker-compose service without fetching Container ID before.
Also, we would like to have the docker-compose ps to fetch some information.

PS: I give you PATCH files to Apply modifications

Cake.Docker.zip

Cake.Docker 0.9.6 download error

HI,

After Cake.Docker got updated to 0.9.6 about 1 day ago, our builds started failing with the following error:

15:11:46 + ./build.sh --target=Docker-Test
15:11:46 Downloading NuGet...
15:11:48 Feeds used:
15:11:48   /root/.nuget/packages/
15:11:48   https://api.nuget.org/v3/index.json
15:11:48 
15:11:48 Restoring NuGet package Cake.0.27.1.
15:11:48 Adding package 'Cake.0.27.1' to folder '/home/jenkins/workspace/a1a37f167898663264e84a22330-5VI2F2TEXXKWCOGIZEKOZXPL66GYV4I627AHU5PTPK6GE2GOMRYA@2/content/tools'
15:11:48 Added package 'Cake.0.27.1' to folder '/home/jenkins/workspace/a1a37f167898663264e84a22330-5VI2F2TEXXKWCOGIZEKOZXPL66GYV4I627AHU5PTPK6GE2GOMRYA@2/content/tools'
15:11:51 Error downloading 'Cake.Docker.0.9.6' from 'https://api.nuget.org/v3-flatcontainer/cake.docker/0.9.6/cake.docker.0.9.6.nupkg'.
15:11:51 Value cannot be null.
15:11:51 Parameter name: keyValue
15:11:51 Error downloading 'Cake.Docker.0.9.6' from 'https://api.nuget.org/v3-flatcontainer/cake.docker/0.9.6/cake.docker.0.9.6.nupkg'.
15:11:51 Value cannot be null.
15:11:51 Parameter name: keyValue
15:11:51 Install failed. Rolling back...
15:11:51 Error: One or more errors occurred.
15:11:51 	Error downloading 'Cake.Docker.0.9.6' from 'https://api.nuget.org/v3-flatcontainer/cake.docker/0.9.6/cake.docker.0.9.6.nupkg'.

Explicitly setting Cake.Docker to 0.9.5 resolved the issue.

Thanks,
Carlos

Recommended changes resulting from automated audit

We performed an automated audit of your Cake addin and found that it does not follow all the best practices.

We encourage you to make the following modifications:

  • The nuget package for your addin should use the cake-contrib icon. Specifically, your addin's .csproj should have a line like this: <PackageIconUrl>https://cdn.jsdelivr.net/gh/cake-contrib/graphics/png/cake-contrib-medium.png</PackageIconUrl>.

Apologies if this is already being worked on, or if there are existing open issues, this issue was created based on what is currently published for this package on NuGet.

This issue was created by a tool: Cake.AddinDiscoverer version 3.12.1

Issue running it on MacOS

Hi

I'm trying to run a script with Docker tasks on MacOS. I'm getting several errors like the following:

(2555,31): error CS0012: The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'.

My script uses the following addins:

#addin "nuget:?package=Cake.DocFx&version=0.5.0"
#addin "nuget:?package=Cake.Docker&version=0.9.0"
#tool "nuget:?package=docfx.console&version=2.31.0"

My packages.config explicitely references Cake 0.26.0.

I'm running cake through a standard ./build.sh script.

Using PasswordStdin

Is there an example on how to make use of the PasswordStdin property in DockerRegistryLoginSettings.cs ?

My understanding is that docker expects input to be piped to the docker login command, but I'm not sure how to do that in the case of a cake script. Is there an example of that being used somewhere?

Recommended changes resulting from automated audit

We performed an automated audit of your Cake addin and found that it does not follow all the best practices.

We encourage you to make the following modifications:

  • The nuget package for your addin should use the cake-contrib icon. Specifically, your addin's .csproj should have a line like this: <PackageIconUrl>https://cdn.jsdelivr.net/gh/cake-contrib/graphics/png/cake-contrib-medium.png</PackageIconUrl>.

Apologies if this is already being worked on, or if there are existing open issues, this issue was created based on what is currently published for this package on NuGet.

This issue was created by a tool: Cake.AddinDiscoverer version 3.12.1

missing netstandard, Version=2.0.0.0

I'm using #addin nuget:?package=Cake.Docker&version=0.9.3
Locally everything works; but when I run this on our build server; it fails:

Running build script...
Could not load \tools\Addins\Cake.Docker.0.9.3\lib\netstandard2.0\Cake.Docker.dll (missing netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51)

I've checked, and the file is present on that location.

Pushed first docker v17 preview

Hi guys,

I've updated settings to match latest Docker (v17) ones. Pushed 0.8 to myget for now.
Can you give it a try, my Docker for Windows is currently refusing to start so I can quick test it.
Branch is docker-v17, commit is efadc7b.

Related issues: #15, #16, #13.

BIG NOTE. Since documentation format changed, I can't recognize arrays anymore, hence properties with arrays changed to strings.

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.