Giter VIP home page Giter VIP logo

ccnet / cruisecontrol.net Goto Github PK

View Code? Open in Web Editor NEW
406.0 406.0 225.0 66.55 MB

CruiseControl.NET is an Automated Continuous Integration server, implemented using the .NET Framework. Downloads at sourceforge. The documentation can be found at:

Home Page: https://ccnet.github.io/CruiseControl.NET

License: Other

XSLT 3.47% C# 75.07% C 0.19% HTML 1.15% Shell 0.02% PowerShell 0.07% CSS 1.00% JavaScript 18.30% ActionScript 0.18% Java 0.01% NSIS 0.20% Batchfile 0.03% VBScript 0.05% Visual Basic .NET 0.24% ASP.NET 0.01%

cruisecontrol.net's People

Contributors

andersbilllinden avatar askrinnik avatar csut017 avatar danielrose avatar davcamer avatar davids avatar dhommel avatar dnauck avatar dpiessens avatar exortech avatar jdehaan avatar jeremylightsmith avatar kaiwren avatar kyser avatar linquize avatar matthewvukomanovic avatar mikebroberts avatar mlippert avatar mormegil-cz avatar obones avatar pos777 avatar ravelus avatar richardtowers avatar rosspatterson avatar rubenwillems avatar savornicesei avatar skizz avatar tackley avatar thedynx avatar twi-xx 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  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

cruisecontrol.net's Issues

Use packages from NuGet

If libraries from libs/ are also on NuGet, use them from there. This should make it easier to update them.

How to build the installers?

Trying to do a new version (of a fork) but it's not clear how one would go about creating the installers. I see NSIS and nsi.template files. Looks like some things are supposed to be replaced in the template and then nsis run on it but not had any luck. Pointers appreciated :)

Most Linux file systems are case sensitive

Under Linux, most file systems are case sensitive, which means that all file references must respect case.
For instance, assembly references ultimately lead to finding a file from disk, which means using System.configuration will not work because the available file is System.Configuration.dll (notice the capital C)

There are various locations in CCNet which have this type of inconsistency, a pull request will follow.

Dynamic values are not working directly inside Task Condition Blocks

It seems that $[...] notation is not working inside Task Condition Block e.g.:

<conditions>
<compareCondition>
<value1>$[isReady]</value1>
<value2>False</value2>
<evaluation>notEqual</evaluation>
<ignoreCase>true</ignoreCase>
</compareCondition>
</conditions>
...
<selectParameter>
<name>isReady</name>
<allowedValues>
    <value name="True">True</value>
    <value name="False">False</value>
  </allowedValues>
</selectParameter>

The only way that works for me is indirect through replacement:

<dynamicValues>
    <directValue>
	<parameter>isReady</parameter>
	<property>conditions.compareCondition.value1</property>
    </directValue>
 </dynamicValues>

While the second approach is sufficient workaround for parameters, you can't do it for integration properties e.g. CCNetLabel.

Shall condition block implement IDynamicValue interface?

Support GitVersion

Hi,
CC.NET cannot succesfully build a project using git as source control and GitVersion for versioning.
GitVersion fails with the error

GitTools.WarningException: It looks like the branch being examined is a detached Head pointing to commit '3bd952f'. Without a proper branch name GitVersion cannot determine the build version.
at GitVersion.GitVersionFinder.EnsureHeadIsNotDetached(GitVersionContext context)
at GitVersion.GitVersionFinder.FindVersion(GitVersionContext context)
at GitVersion.ExecuteCore.<>c__DisplayClass6_0.b__0(IRepository repo)
at GitVersion.GitPreparer.WithRepository[TResult](Func`2 action)
at GitVersion.ExecuteCore.ExecuteGitVersion(String targetUrl, String dynamicRepositoryLocation, Authentication authentication, String targetBranch, Boolean noFetch, String workingDirectory, String commitId, Config overrideConfig, Boolean noCache)
at GitVersion.SpecifiedArgumentRunner.Run(Arguments arguments, IFileSystem fileSystem)
at GitVersion.Program.VerifyArgumentsAndRun()

This is caused by using git checkout -q -f origin\branch_name instead of git checkout -q -f ref\heads\branch_name or git checkout -b origin\branch_name (according to official documentation and this answer on StackOverflow).

Tests: Replace %TEMP% path hardcodings

There are several places in unit tests where temporary path is hardcoded, for example:

  • project/UnitTests/Core/Config/PreprocessorTest.cs FAKE_ROOT
  • project/UnitTests/Core/IntegrationResultManagerTest.cs Assert.AreEqual(Platform.IsWindows ? @"c:\temp" : @"/tmp", result.WorkingDirectory);
  • project/UnitTests/Core/ProjectTest.cs Assert.AreEqual(Platform.IsWindows ? @"c:\temp" : @"/tmp", result.WorkingDirectory);

We can use Path.GetTempPath or the env. variables (see the remarks section in the link) to get the temp path without checking the platform.

CruiseControl.Net add undesired “RetrieveBuildFile.aspx?file=” to <link> in html files

I am trying to add a *.html ExtentReport to integration tests in CruiseControl.net.

I am able to do this, but the html file is not displayed correctly in CruiseControl.Net because CruiseControl.Net adds a “RetrieveBuildFile.aspx?file=” to all the link tags.

Question: How do I get CruiseControl.Net to stop adding this text to the *.html files? If this cannot be disabled, this should probably be considered an issue.

The html report is unreadable when displayed in CruiseControl.net

Part of the source code after CruiseControl adds undesired retrievebuildfile:

I would show the code but the html tags don't seem to render correctly

What the *.html looks like when not in CCNet:
<html>
  <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>Extent Framework</title>
  <link rel="shortcut icon" href="https://cdn.rawgit.com/extent-framework/extent-github-cdn/d74480e/commons/img/logo.png">
  <link rel="stylesheet" href="https://cdn.rawgit.com/extent-framework/extent-github-cdn/6cbbfb3/spark/css/styles.css" />
  <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
  <style> </style>
  </head>

What the *.html looks like when integrated into CCNet website:

--
<!DOCTYPE html>
  <html>
  <head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <title>Extent Framework</title>
  <link rel="shortcut icon" href="RetrieveBuildFile.aspx?file=https://cdn.rawgit.com/extent-framework/extent-github-cdn/d74480e/commons/img/logo.png">
  <link rel="stylesheet" href="RetrieveBuildFile.aspx?file=https://cdn.rawgit.com/extent-framework/extent-github-cdn/6cbbfb3/spark/css/styles.css" />
  <link href="RetrieveBuildFile.aspx?file=https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
  <style> </style>
  </head>

`

No error description on build failure using msbuild

If a msbuild execution fails, it seems like I only get the list of the most recent modifications but no error text. The same if mstests fails. No information about which tests that failed. I am using msbuild 15.

Integrate with AppVeyor

Build CC.NET on AppVeyor (AV) on pull requests, commits.
Nightlies can be built after asking AV team for this feature.

CruiseControl.Net Unable to find html file when Tests fail

If all tests pass, everything is good and the *.html report will display in CruiseControl.Net (the link to the *.html file works). However, if any of the test fail, the *.html file will not get displayed in CruiseControl.Net.

How do I correct this? I am guessing this happens because when a test fails, CCNet will not concatenate the build number into the *.xml file name. The *.xml file then cannot find the associated *.html file which exists in a folder named with the build number.

The *.html file does successfully get copied to the artifact directory, the CCNet just doesn't know how to find it since the build number wasn't concatenated into the *.xml's file name.

If I manually add the 'Lbuild.x.x.xxxxx' to the end of the *.xml file name, then everything works and and the link to the *.html page works when CruiseControl.Net is display in the web browser.

Integrate with SonarCloud (SonarQube)

When the project is build in AppVeyor, code quality metrics should be pushed to SonarCloud (aka SonarQube aka SQ).
SQ has its own quality rules that, they say, overlap most of the Reshaper ones. and FxCop is no longer supported by SQ.
The only requirement is to build the project using MSBuild 14 or 15.The AppVeyor build is using a machine with Visual Studio 2015 because it needs access to AL.exe from SDK (and .NET 4.0 SDK does not install out of the box on a W10 machine).

Issue related to browser size while executing Nunit scripts via CCNET

I have integrated my Nunit automation scripts with Cruise control. Execution is working fine. I have used browser maximize code in my automation script but its not showing maximized size (1920x1080). While checking the output screenshot, it shows basic default size (1024x768). Since many functionalities are getting failed because of this browser size.

Building under Manjaro Linux

This ticket is here to discuss what I had to do to get a build working on my Manjaro Linux, on top of the changes that I already submitted as pull requests.
I am not that confident about the changes which is why I want to discuss them here first.

Initial run gives this error:

GitVersion: Process returned an error (exit code 1)

This is fixed by editing Tools\Cake\GitVersion.CommandLine.4.0.0\tools\LibGit2Sharp.dll.config and replacing the os="linux" line with this one:

<dllmap os="linux" dll="git2-15e1193" target="libgit2.so" />

I got a hint of this by looking at this message but I'm not sure this can be fixed by CCNet itself

Then, I had to modify ccnet.build at line 177 because it says mono here. However, doing this, it tries to run a binary called mono from the project folder. The exact error message is this:

'/path/to/checkout/CruiseControl.Net/project/mono' failed to start

I thus replaced mono with ${msbuild.file} just like the line above, but it failed a bit later with msbuild complaining that it was receiving multiple projects to build.
This comes form the fact that there is this line as the first argument for the execution:

<arg value="msbuild.file" if="${platform::is-unix()}"/>

Well, I believe it was intended to be ${msbuild.file} instead of just msbuild.file but in any case, it's not required at all as it gets interpreted as the name of a project to build.
After having removed that arg line, I was able to run the build.sh script to completion.

Any thoughts/opinions on this are welcome

LastBuildStatusTaskCondition only ever matches Success

IIntegrationResult.LastBuildStatus is only ever set if IntegrationRunner.GetModifications throws an exception. See

result.LastBuildStatus = lastResult.HasSourceControlError ? lastResult.LastBuildStatus : lastResult.Status;

This means that for all other cases it will have the default value Success and can't be used in for example LastBuildStatusTaskCondition to trigger a task if the last build result was Failure.

Or am I missing something here?

Fix build on linux

Fail quite expected ...

Sistem

$> dotnet --version
2.2.203
$> mono --version
Mono JIT compiler version 5.20.1.19 (tarball Mon Apr 15 10:29:30 UTC 2019)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
        TLS:           __thread
        SIGSEGV:       altstack
        Notifications: epoll
        Architecture:  amd64
        Disabled:      none
        Misc:          softdebug 
        Interpreter:   yes
        LLVM:          supported, not enabled.
        Suspend:       hybrid
        GC:            sgen (concurrent by default)
$> uname -a
Linux devrog.avornicesei.com 5.0.9-1-default #1 SMP Sun Apr 21 06:42:32 UTC 2019 (7bd8353) x86_64 x86_64 x86_64 GNU/Linux
$> dotnet --info
.NET Core SDK (reflecting any global.json):
 Version:   2.2.203
 Commit:    e5bab63eca

Runtime Environment:
 OS Name:     opensuse-tumbleweed
 OS Version:  20190426
 OS Platform: Linux
 RID:         linux-x64
 Base Path:   /usr/share/dotnet/sdk/2.2.203/

Host (useful for support):
  Version: 2.2.4
  Commit:  f95848e524

.NET Core SDKs installed:
  2.1.502 [/usr/share/dotnet/sdk]
  2.2.203 [/usr/share/dotnet/sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.All 2.1.6 [/usr/share/dotnet/shared/Microsoft.AspNetCore.All]
  Microsoft.AspNetCore.App 2.1.6 [/usr/share/dotnet/shared/Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 2.1.6 [/usr/share/dotnet/shared/Microsoft.NETCore.App]
  Microsoft.NETCore.App 2.2.4 [/usr/share/dotnet/shared/Microsoft.NETCore.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

Log

nant-build.log

XmlProjectStateManager fails to save state if service not run as administrator

At least it looks like it is hardcoded to always write ProjectState.xml to the program files directory.

persistanceFileName = Path.Combine(this.executionEnvironment.GetDefaultProgramDataFolder(ApplicationType.Server), "ProjectsState.xml");

----------
System.UnauthorizedAccessException: Access to the path 'C:\Program Files (x86)\CruiseControl.NET\server\ProjectsState.xml' is denied.
   at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
   at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at ThoughtWorks.CruiseControl.Core.Util.SystemIoFileSystem.OpenOutputStream(String fileName)
   at ThoughtWorks.CruiseControl.Core.State.XmlProjectStateManager.SaveProjectStates()
   at ThoughtWorks.CruiseControl.Core.IntegrationQueueManager.Stop(String project)
   at ThoughtWorks.CruiseControl.Core.CruiseServer.<Stop>b__1(ProjectRequest arg, Response resp)
   at ThoughtWorks.CruiseControl.Core.CruiseServer.RunProjectRequest(ProjectRequest request, Nullable`1 permission, Nullable`1 eventType, ProjectRequestAction action)
----------```

Allow for Specifying a Custom Display Name per Project in CCTray

In my CCTray, I am currently observing various builds of four of our branches, namely our trunk and three release branches. CCTray can successfully connect to the build server (by means of .NET Remoting) and retrieve the status ... which is then shown in my table in rows starting like this:

Project Server Category ...
Core Public buildsrv:28002 [buildsrv]Public ...
Core Release buildsrv:28002 [buildsrv]Release ...
Core Debug buildsrv:28002 [buildsrv]Debug ...
Modules Public buildsrv:28008 [buildsrv]Public ...
Modules Release buildsrv:28008 [buildsrv]Release ...
Modules Debug buildsrv:28008 [buildsrv]Debug ...
Modules Tests buildsrv:28008 [buildsrv]Tests ...
Core Public buildsrv:28010 [buildsrv]Public ...
Core Release buildsrv:28010 [buildsrv]Release ...
Core Debug buildsrv:28010 [buildsrv]Debug ...
Modules Public buildsrv:28011 [buildsrv]Public ...
Modules Release buildsrv:28011 [buildsrv]Release ...
Modules Debug buildsrv:28011 [buildsrv]Debug ...
Modules Tests buildsrv:28011 [buildsrv]Tests ...
Core Public buildsrv:28012 [buildsrv]Public ...
Core Release buildsrv:28012 [buildsrv]Release ...
Core Debug buildsrv:28012 [buildsrv]Debug ...
Modules Public buildsrv:28014 [buildsrv]Public ...
Modules Release buildsrv:28014 [buildsrv]Release ...
Modules Debug buildsrv:28014 [buildsrv]Debug ...
Modules Tests buildsrv:28014 [buildsrv]Tests ...
Core Public buildsrv:28032 [buildsrv]Public ...
Core Release buildsrv:28032 [buildsrv]Release ...
Core Debug buildsrv:28032 [buildsrv]Debug ...
Modules Public buildsrv:28018 [buildsrv]Public ...
Modules Release buildsrv:28018 [buildsrv]Release ...
Modules Debug buildsrv:28018 [buildsrv]Debug ...
Modules Tests buildsrv:28018 [buildsrv]Tests ...
------------- -------------- --------------- ...

Obviously, this is pretty much useless the more branches I need to observe and I can only guess based on the order of insertion which line refers to which build.

To clarify: The issue I'm having with the above list is that we have several build projects with the same name. The only way they can be distinguished in CCTray is by the port number in their server names, and those are assigned asystematically and thus nothing I would want to memorize.

This tool would be so much more useful if, in the CruiseControl.NET Tray Settings dialog box, there were some way to optionally assign a custom display name to each project that is then shown in the main window.

Is there may already some non-obvious way to do this (by directly editing any config files? Or alternatively, for setting a custom display name for each server?

Show Task Description in Tree View of CCTray's Current Status Window

In CCTray, you can right-click a build to look at its current status.

This is a really nice feature that gives you an instant overview of the current build progress ... unless it comes out like this:

cctray Screenshot

Scrolling down, this is one out of 13 (!) pages that look like that.

Obviously, those tasks are all different - it's just not visible in the tree view; the important info on which task treats which one of our modules is hidden in the "Description" field that is only shown once you click one of the tasks.

Is there an option to display the Description along with each item in the tree view, or would it be feasible to add this as an option in future versions?

Items for 1.9 release

There are 2 new project boards, so we can easily follow up what needs to be done.
Comment on this thread what items need to go on which board.

Installer does not run from unicode folder

Hi,

Steps to reproduce

Create a folder with unicode characters in its name, e.g. Descărcări
Copy CC.NET installer in it (tested with 1.8.5)
Run installer from that folder

Expected results

Installer runs and installs CC.NET

Actual results

Installer fails with the following error:
image

The fix for installer is to add unicode attribute (see here)

Update tools

Update tools from tools/ to their latest version.

Roadplan for CruiseControl.NET

Hi @RubenWillems, @obones
Based on your discussion, I would love to continue the discussion where CC.NET could go given the current state of the development tools and the advent of CI/CD.

Some questions that I have:

  1. What's the relation with ThoughtWorks ? Even the license is not a well-known OSS license but a "ThoughtWorks Open Source Software License".
  2. Can the license be changed to MIT/ Apache 2.0? I think agreement from all contributors is needed.
  3. How come the latest releases (up to 1.8.5) and release tags are missing from GitHub?
  4. There are pull requests waiting to be incorporated in the code base. It would be nice to do a new CC.NET release
  5. We could configure CC.NET to be automatically build in appveyor / travis. No need for additional infrastructure except GitHub and its OSS-friendly (aka free) ecosystem
  6. The UI is sooo static
  7. The build log is sooo hard to follow (perhaps there's an xslt template for pretty view)

I'm more familiar with Jenkins. The current project I'm working on is using svn and CC.NET but the plan is to move to Git and Bamboo as CI server.
But as a .NET developer (and a linux user) I would love to have more CI-related tools build in .NET instead of java (like Jenkins, Bamboo, SonarQube, Nexus).

Best,
Simo

Gracefully handle the absence of NSIS

There are 2 situations where NSIS does not exists on the build system:

  1. it's not a Windows machine
  2. it was not installed

If NSIS is not available we should handle it gracefully in ccnet-packaging.inc.build, targets:

packageCCTray
packageCCTools
packageCCNET

I'm thinking if not on Windows it should display something like "CruiseControl.NET windows installers can only be created on Windows". But if the script runs on Windows but nsis.executable is empty / does not exist then it should fail the build.

Original discussion on PR #301

Fix PR: Change NUnit v2 to v3

The existing PR #259 is mergeable BUT:

  • nunit references must be changed to NuGet ones
  • NUnit folder from Tools must be deleted
  • make sure tests run

This is a must for linux build

     [exec]   Core/SourceControl/Mercurial/StubFileSystemTest.cs(11,3): error CS0619: 'TestFixtureAttribute' is obsolete: 'The NUnit framework shipped with Mono is deprecated and will be removed in a future release. It was based on NUnit 2.4 which is long outdated. Please move to the NUnit NuGet package or some other form of acquiring NUnit.' [/data/Proiecte/OSS/CruiseControl.NET/CruiseControl.NET_2/project/UnitTests/UnitTests.csproj]
     [exec]   Core/Util/RegistryTest.cs(8,3): error CS0619: 'TestFixtureAttribute' is obsolete: 'The NUnit framework shipped with Mono is deprecated and will be removed in a future release. It was based on NUnit 2.4 which is long outdated. Please move to the NUnit NuGet package or some other form of acquiring NUnit.' [/data/Proiecte/OSS/CruiseControl.NET/CruiseControl.NET_2/project/UnitTests/UnitTests.csproj]

Remove all reference to obsolete IConfigurationSectionHandler

See comment on PR #306

Changing the code to follow today's standards allows to get an instance of XslFilesSectionHandler returned by GetSection and as such access any code on it that could return a list of strings as expected by users of this section.

Note that there is another location where GetSection is called, inside CruiseServerFactory.CreateLocal, along with the ServerConfigurationHandler section handler that implements IConfigurationSectionHandler. I believe the same set of changes is required there as well.

There is one last usage of IConfigurationSectionHandler, and it's in CruiseControlConfigSectionHandler. But I don't understand its usage as its Create method returns null in all cases. Maybe it should just be removed.

QueueDuplicateHandlingMode extra option to always add

Are you okay with me sending a pull request to make a slight change to the way duplicates are handled? I'm using CruiseControl.NET in a slightly different way to the convention and rather than patching each update it would be much easier if I could make a slight code change that will benefit the community that also makes sense to offer as an option.

In IntegrationQueue.cs there is a swtich that handles duplicates, and I'd like to change the switch so that there is another option:
QueueDuplicateHandlingMode.AddAdditional

This will allow people to force multiple builds as opposed to one, which in my scenario makes sense.

If you are okay with me making this change I'll create a pull request?

By adding a new handling mode the original functionality is retained but an additional option is provided so that I can use CruiseControl.NET in a more useful way.

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.