Giter Site home page Giter Site logo

xpirit-vsts-release-terraform's People

Contributors

devkyles avatar mud5150 avatar paulirwin avatar pgroene avatar raul-arrieta 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

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

xpirit-vsts-release-terraform's Issues

Additionnal arguments prevent from using terrafom fmt

Hi,

I'm starting using your Terraform plugin is VSTS, and the first step I wanted in my CICD was to validate terraform syntaxt for my folder. To do so I want to use the terraform fmt command.

But when I do configure a task tor validate format, the task always fails because the fmt command doesn't accept the -input=false -no-color arguments that are added automatically to the terraform call.

Here's a yaml snipet of the task to help you reproduce

steps:
- task: petergroenewegen.PeterGroenewegen-Xpirit-Vsts-Release-Terraform.Xpirit-Vsts-Release-Terraform.Terraform@2
  displayName: Terraform Format
  inputs:
    TemplatePath: .
    Arguments: 'fmt -check=false .'
    InstallTerraform: true
  continueOnError: true

And here's the output

2018-07-18T13:10:41.2433107Z ##[section]Starting: Terraform Format
2018-07-18T13:10:41.2653002Z ==============================================================================
2018-07-18T13:10:41.2653184Z Task         : Run Terraform
2018-07-18T13:10:41.2653309Z Description  : Run a Terraform on the build agent
2018-07-18T13:10:41.2653449Z Version      : 2.0.3
2018-07-18T13:10:41.2653566Z Author       : Peter Groenewegen - Xpirit
2018-07-18T13:10:41.2653726Z Help         : [More Information](https://pgroene.wordpress.com/2016/06/14/getting-started-with-terraform-on-windows-and-azure/)
2018-07-18T13:10:41.2653912Z ==============================================================================
2018-07-18T13:10:59.3238992Z 
2018-07-18T13:10:59.3290047Z 
2018-07-18T13:10:59.3308826Z     Directory: C:\
2018-07-18T13:10:59.3309002Z 
2018-07-18T13:10:59.3309063Z 
2018-07-18T13:10:59.3309212Z Mode                LastWriteTime         Length Name                                                                  
2018-07-18T13:10:59.3309438Z ----                -------------         ------ ----                                                                  
2018-07-18T13:10:59.3327353Z d-----        7/18/2018   1:10 PM                terraform-download                                                    
2018-07-18T13:11:00.4181041Z Terraform version:
2018-07-18T13:11:01.1324002Z Terraform v0.11.7
2018-07-18T13:11:01.1325703Z 
2018-07-18T13:11:02.3661837Z ##[command]"terraform" fmt -check=false . -input=false -no-color
2018-07-18T13:11:02.4635594Z The fmt command expects at most one argument.
2018-07-18T13:11:02.4636107Z Usage: terraform fmt [options] [DIR]
2018-07-18T13:11:02.4638924Z 
2018-07-18T13:11:02.4644368Z 	Rewrites all Terraform configuration files to a canonical format.
2018-07-18T13:11:02.4644526Z 
2018-07-18T13:11:02.4644657Z 	If DIR is not specified then the current working directory will be used.
2018-07-18T13:11:02.4644805Z 	If DIR is "-" then content will be read from STDIN.
2018-07-18T13:11:02.4644906Z 
2018-07-18T13:11:02.4645015Z Options:
2018-07-18T13:11:02.4645081Z 
2018-07-18T13:11:02.4659792Z   -list=true       List files whose formatting differs (always false if using STDIN)
2018-07-18T13:11:02.4660515Z 
2018-07-18T13:11:02.4661834Z   -write=true      Write result to source file instead of STDOUT (always false if using STDIN or -check)
2018-07-18T13:11:02.4662159Z 
2018-07-18T13:11:02.4663024Z   -diff=false      Display diffs of formatting changes
2018-07-18T13:11:02.4663315Z 
2018-07-18T13:11:02.4664150Z   -check=false     Check if the input is formatted. Exit status will be 0 if all input is properly formatted and non-zero otherwise.
2018-07-18T13:11:02.4861805Z ##[error] Terraform failed to execute. Error: 
2018-07-18T13:11:02.4885979Z End of Task Terraform
2018-07-18T13:11:02.4886095Z 
2018-07-18T13:11:02.4886150Z 
2018-07-18T13:11:02.4980310Z ##[section]Finishing: Terraform Format

Thx in advance.

Specify path for terraform executable

We are converting from terraform 0.11.x to 0.12.x. I'd like to be able to supply the path for terraform.exe and I think I could add this to the task.json and the PowerShell for the task, but I am not familiar with testing an ADO extension. If you don't have time to make the addition can you point me to something the would help me test?

State not being saved in Azure Storage blob container

When using the version 2.* of your VSTS Task from the VSTS marketplace, after running an "apply" command the Terraform state is not being stored in the specified Azure Storages Account. Attached is a screenshot of the configuration. Version 1.* I was able to get the "apply" command to store the state in the storage account. Any help or insights on this issue would be appreciated.
vsts-task-config

failed to run mklink 0138ec1e944834bd15a89b423e8cee89 databases: exec: "cmd": executable file not found in %PATH%

Hi,

I have used this extension in the past for a simple deployment where everything is in the same folder and it works will. However, I'm now trying to refactor our changes to start using modules to make our terraform setup more usable.

I've got this terraform setup: https://github.com/ossentoo/terraform-sql

When I use this configuration to deploy a sql and database by running it locally - it works as expected.

However, when I use the Terraform vsts task to try and initialise it, I get an error:

exec: "cmd": executable file not found in %PATH% ""

Here's the full debugging output from VSTS:

2019-05-15T11:24:37.4198114Z ==============================================================================
2019-05-15T11:24:37.4198243Z Task : Run Terraform
2019-05-15T11:24:37.4198296Z Description : Run a Terraform on the build agent
2019-05-15T11:24:37.4198348Z Version : 2.1.0
2019-05-15T11:24:37.4198421Z Author : Peter Groenewegen - Xpirit
2019-05-15T11:24:37.4198469Z Help : More Information
2019-05-15T11:24:37.4198518Z ==============================================================================
2019-05-15T11:24:39.4956007Z ##[debug]VstsTaskSdk 0.6.2 commit b4160c33da0010bd83279e9ffa9bbf13bcbd1ce2
2019-05-15T11:24:39.6172033Z ##[debug]Entering D:\vsts-agent_work_tasks\Terraform_31f040e5-e040-4336-878a-59a493289794\2.1.0\Terraform.ps1.
2019-05-15T11:24:39.6364389Z ##[debug]Importing from Public
2019-05-15T11:24:39.6670175Z ##[debug] Importing Ensure-AzStorageContainerExists
2019-05-15T11:24:39.6820526Z ##[debug] Importing Import-EnvVars
2019-05-15T11:24:39.7156057Z ##[debug]Env:INPUT_TEMPLATEPATH: 'D:\vsts-agent_work\r24\a\terraform-sql\subscriptions'
2019-05-15T11:24:39.7231032Z ##[debug]Env:INPUT_INSTALLTERRAFORM: 'true'
2019-05-15T11:24:39.7282980Z ##[debug] Converted to bool: True
2019-05-15T11:24:39.7328610Z ##[debug]Env:INPUT_USEAZURESUB: 'false'
2019-05-15T11:24:39.7365534Z ##[debug] Converted to bool: False
2019-05-15T11:24:39.7425368Z ##[debug]Env:INPUT_MANAGESTATE: 'true'
2019-05-15T11:24:39.7460873Z ##[debug] Converted to bool: True
2019-05-15T11:24:39.7506523Z ##[debug]Env:INPUT_SPECIFYSTORAGEACCOUNT: 'true'
2019-05-15T11:24:39.7542117Z ##[debug] Converted to bool: True
2019-05-15T11:24:39.7785810Z ##[debug]Env:INPUT_VERSION: 'latest'
2019-05-15T11:24:39.8030029Z ##[debug]GET https://releases.hashicorp.com/terraform/ with 0-byte payload
2019-05-15T11:24:39.9127362Z ##[debug]received 8427-byte response of content type text/html
2019-05-15T11:24:40.1292053Z ##[debug]GET https://releases.hashicorp.com/terraform/0.11.13/terraform_0.11.13_windows_amd64.zip with 0-byte payload
2019-05-15T11:24:40.1469299Z ##[debug]received 21163715-byte response of content type application/zip
2019-05-15T11:25:46.8126212Z Terraform version:
2019-05-15T11:25:48.5556480Z Terraform v0.11.13
2019-05-15T11:25:48.5565744Z
2019-05-15T11:25:48.6417897Z ##[debug]Env:INPUT_ARGUMENTS: 'init'
2019-05-15T11:25:48.6460010Z ##[debug]Env:INPUT_PLANPATH: 'D:\vsts-agent_work\r24\a\terraform-sql\subscriptions'
2019-05-15T11:25:48.6882219Z ##[debug]Entering Invoke-VstsTool.
2019-05-15T11:25:48.7086591Z ##[debug] FileName: 'terraform'
2019-05-15T11:25:48.7120912Z ##[debug] Arguments: 'init -input=false -no-color D:\vsts-agent_work\r24\a\terraform-sql\subscriptions'
2019-05-15T11:25:48.7181113Z ##[command]"terraform" init -input=false -no-color D:\vsts-agent_work\r24\a\terraform-sql\subscriptions
2019-05-15T11:25:48.8893071Z Initializing modules...
2019-05-15T11:25:48.8895339Z - module.xperters-dev
2019-05-15T11:25:48.8916284Z Getting source "../environments/dev/databases"
2019-05-15T11:25:48.8938721Z Error downloading modules: Error loading modules: error downloading 'file://D:/vsts-agent/_work/r24/a/terraform-sql/environments/dev/databases': failed to run mklink .terraform\modules\0138ec1e944834bd15a89b423e8cee89 D:\vsts-agent_work\r24\a\terraform-sql\environments\dev\databases: exec: "cmd": executable file not found in %PATH% ""
2019-05-15T11:25:48.9787956Z ##[debug]Exit code: 1
2019-05-15T11:25:48.9830389Z ##[debug]Leaving Invoke-VstsTool.

Note that I am running terraform init not within the root folder of the repo, but within the subscriptions folder as we will probably end up having multiple subscription configurations that we want to deploy to.

Is there something wrong with the way I am using the task, or something wrong with the task?

Parsing module source link

I'm trying to use module source link to Git repository referencing the module in the ExampleModule subdirectory.

Code example:
module "example-module" { source = "git::https://[email protected]/eg/_git/eg//ExampleModule?ref=master" }

The source link gets trunctated to "git::https://[email protected]/eg/_git/eg?ref=master" basically removing the double slash and the string after it.

Double slash is mandatory in order to specify the subdirectory of the module.
When using a single slash, the line is not truncated but terraform fails to find the folder.
Is this a parsing bug?

Issue with local-exec - az login required

Having issue with running az cli script using local-exec provisioner.
Receive next error:
ERROR: Please run 'az login' to setup account
I'm running terraform using VSTS task - https://marketplace.visualstudio.com/items?itemName=petergroenewegen.PeterGroenewegen-Xpirit-Vsts-Release-Terraform
Every other(terraform native) resources are successfully created.

Is there any possibility to run azure cli using local-exec without logging in?
As account is already specified in VSTS task - it seems obvious for me, that command should run in context of that account.

Validate against 0.12 fails

The default arguments for validate have changed in 0.12 and it no longer allows -input=false -no-color. This results in the error message

Usage: terraform validate [options] [dir]

  Validate the configuration files in a directory, referring only to the
  configuration and not accessing any remote services such as remote state,
  provider APIs, etc.

  Validate runs checks that verify whether a configuration is
  internally-consistent, regardless of any provided variables or existing
  state. It is thus primarily useful for general verification of reusable
  modules, including correctness of attribute names and value types.

  It is safe to run this command automatically, for example as a post-save
  check in a text editor or as a test step for a re-usable module in a CI
  system.

  Validation requires an initialized working directory with any referenced
  plugins and modules installed. To initialize a working directory for
  validation without accessing any configured remote backend, use:
      terraform init -backend=false

  If dir is not specified, then the current directory will be used.

  To verify configuration in the context of a particular run (a particular
  target workspace, operation variables, etc), use the terraform plan
  subcommand instead, which includes an implied validation check.

Options:

  -json        Produce output in a machine-readable JSON format, suitable for
               use in e.g. text editor integrations.

The terraform error does not propagate to the logging of the task when using the yaml pipeline

Peter, thanks a lot for the work you did to create this Terraform pipeline task. I hope you can help me. Recently I tried to implement it as a yaml task, which works just fine. However when Terraform gives an error, this error does not propagate to the logging of the task.

A example of the output (in case of an error) is:
Terraform version:
Terraform v0.12.18
"terraform" init [parameters removed for clarity]"
Initializing the backend...
Finishing: Terraform plan

Support for DevOps Environment Variables

I combine terraform and some other scripts in one DevOps Release Pipeline.
I need the same variables in Terraform and other scripts that are executed by other tasks.
So I try to use environment variables to set the Terraform input variables.
I set the environment variables in a prior task.

Example:
$ export TF_VAR_image_id=ami-abc123
https://www.terraform.io/docs/configuration/variables.html

Usually this works across tasks within one pipeline:
https://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops&tabs=yaml%2Cbatch#set-in-script

But this variable is not recognized by Terraform when executed with your DevOps task.

PlanPath is a file, not a directory

This commit is producing these results for me. Was working fine yesterday.

==============================================================================
Task         : Run Terraform
Description  : Run a Terraform on the build agent
Version      : 2.3.0
Author       : Peter Groenewegen - Xpirit
Help         : [More Information](https://pgroene.wordpress.com/2016/06/14/getting-started-with-terraform-on-windows-and-azure/)
==============================================================================

##[command]"terraform" init -backend-config="arm_subscription_id=7e1cf280-dbdc-4385-ab1e-ef119ad40d9b" -backend-config="arm_tenant_id=***" -backend-config="arm_client_id=***" -backend-config="arm_client_secret=***" -backend-config="resource_group_name=landmark-int-lp-usc-rg-terraform-01" -backend-config="storage_account_name=lmintlpusctf01" -backend-config="container_name=terraform-state-client-landmark-int-lp-01" -backend=true -get=true -get-plugins=true -input=false -no-color D:\a\r1\a\_client\tfplan
##[error] Terraform init failed to execute. Error: 
Error checking configuration: configuration path must be a directory: D:\a\r1\a\_client\tfplan

Tainting does not work

Hi,

I store my state in an azure storage container, and when I run the command terraform taint -state "statename.tfstate" -state-out "statename.tfstate" "azurerm_virtual_machine_extension.azw-dsc" the arguments -input=false -no-color are appended (from looking at the powershell source). This causes terraform to throw the error The taint command expects exactly one argument.

Is there another way I can run the taint command or disable the input=false arg for it? It doesnt look like taint supports it.

Thanks

No longer working on Ubuntu Build Agents

Hi, up until recently this was working fine on the ubuntu build agents, however it is now failing with an error saying that the task can only run on Windows build agents, and it seems to possibly add a demand for "azureps".

Have had to resort to bash script and running all the terraform stuff from there. Your module makes life a lot easier.

Correct path environment variable lost across tasks

Hi
The installation function adds the terraform install directory to the PATH environment variable but if you don't have "install terraform" ticked on each task then terraform cannot be found as the PATH process environment variable doesn't persist across tasks (I'm assuming each task is a different process or child process of the parent so any environment variables set are lost). So my presumption is that if Install is not true then the path variable needs to be set anyway.

Regards
James

"Manage state in blobstorage" is always true

When extracting this parameter in powershell, you need to use the -AsBool switch, otherwise it's pulled in as a string and always evaluates to true. This causes complaints about required parameters that aren't even visible.

adding planpath to init breaks current usages of the task

Reported by: L.R by email

Plugin version 2.3.2 is broken.

It’s not possible to deploy from an execution plan where the terraform code and execution plans are in separate folders. This used to work before.

Previously (plugin version ~2.2.1) the init command used to look like this:

"terraform" init -backend-config="arm_subscription_id=xxxxxxx" -backend-config="arm_tenant_id=" -backend-config="arm_client_id=" -backend-config="arm_client_secret=***" -backend-config="resource_group_name=.tf” -backend-config="storage_account_name=tfdata" -backend-config="container_name=tfstate " -backend-config="key=infra.terraform.tfstate" -input=false -no-color

However, in the latest version, the TFPLAN folder path is appended to the init command for some reason. This breaks the init.

"terraform" init -backend-config="arm_subscription_id= xxxxxxx " -backend-config="arm_tenant_id=" -backend-config="arm_client_id=" -backend-config="arm_client_secret=***" -backend-config="resource_group_name=.tf” -backend-config="storage_account_name=tfdata" -backend-config="container_name=tfstate " -backend-config="key= infra.terraform.tfstate" -input=false -no-color D:\a\r1\a_tfrepo\tfplan
The terraform apply command looks good but it will fail because it was initialised in the wrong folder.

"terraform" apply -auto-approve -input=false -no-color ../tfplan/someplan.tfplan

The settings are the following:

image

We have the following folder structure:

repo/terraform/*.tf

repo/tfplan/myplan.tfplan

repo/tfvars/*.tfvars

Provide a variable for turning off -input=false

I see in the code that -input=false is turned off for validate and workspace but in my case I need it removed so I can call terraform output. Rather than adding all commands that don't take input, can we just have a flag variable that allows us to turn it off?

Cannot run import: The import command expects two arguments.

We keep running into an issue where we try to import but hit this issue: "The import command expects two arguments."

This is our configuration
image

And the error looks like:

image

Been banging my head for a few days - tried to write the powershell from scratch but I believe we can use yours - just the arguments dont seem to be working?

TF_LOG = DEBUG causes task to fail from [INFO] lines being logged

Setting the environment variable TF_LOG to DEBUG is causing the task to fail (when it previously did not). Azure DevOps is saying the failing line is the first line with [INFO]. Please see the output below:

2019-08-02T13:54:07.4782972Z ##[section]Starting: Terraform init 
2019-08-02T13:54:07.4893369Z ==============================================================================
2019-08-02T13:54:07.4893495Z Task         : Run Terraform
2019-08-02T13:54:07.4893582Z Description  : Run a Terraform on the build agent
2019-08-02T13:54:07.4893653Z Version      : 2.4.0
2019-08-02T13:54:07.4893734Z Author       : Peter Groenewegen - Xpirit
2019-08-02T13:54:07.4893844Z Help         : [More Information](https://pgroene.wordpress.com/2016/06/14/getting-started-with-terraform-on-windows-and-azure/)
2019-08-02T13:54:07.4894094Z ==============================================================================
2019-08-02T13:54:36.8165732Z 
2019-08-02T13:54:36.8166228Z 
2019-08-02T13:54:36.8166359Z     Directory: C:\
2019-08-02T13:54:36.8166443Z 
2019-08-02T13:54:36.8166488Z 
2019-08-02T13:54:36.8170274Z Mode                LastWriteTime         Length Name                                                                  
2019-08-02T13:54:36.8173426Z ----                -------------         ------ ----                                                                  
2019-08-02T13:54:36.8178672Z d-----         8/2/2019   1:54 PM                terraform-download                                                    
2019-08-02T13:54:37.5277308Z Terraform version:
2019-08-02T13:54:38.3989163Z 2019/08/02 13:54:38 [INFO] Terraform version: 0.12.6  
2019-08-02T13:54:38.3990010Z 2019/08/02 13:54:38 [INFO] Go runtime version: go1.12.4
2019-08-02T13:54:38.3990408Z 2019/08/02 13:54:38 [INFO] CLI args: []string{"c:\\terraform-download\\terraform.exe", "--version"}
2019-08-02T13:54:38.3992100Z 2019/08/02 13:54:38 [DEBUG] Attempting to open CLI config file: C:\Users\VssAdministrator\AppData\Roaming\terraform.rc
2019-08-02T13:54:38.3992873Z 2019/08/02 13:54:38 [DEBUG] File doesn't exist, but doesn't need to. Ignoring.
2019-08-02T13:54:38.4004470Z 2019/08/02 13:54:38 [INFO] CLI command args: []string{"version", "--version"}
2019-08-02T13:54:38.4004741Z Terraform v0.12.6
2019-08-02T13:54:38.4007016Z 2019/08/02 13:54:38 [DEBUG] checking for provider in "."
2019-08-02T13:54:38.4008672Z 2019/08/02 13:54:38 [DEBUG] checking for provider in "c:\\terraform-download"
2019-08-02T13:54:38.4009337Z 2019/08/02 13:54:38 [INFO] Failed to read plugin lock file .terraform\plugins\windows_amd64\lock.json: open .terraform\plugins\windows_amd64\lock.json: The system cannot find the path specified.
2019-08-02T13:54:40.1228245Z ##[command]"terraform" init -input=false -no-color
2019-08-02T13:54:40.5731063Z ##[error]2019/08/02 13:54:40 [INFO] Terraform version: 0.12.6  
2019-08-02T13:54:41.8983073Z ##[section]Finishing: Terraform init 

Incorrect orther for "-input=false -no-color" arguments

Hi,

First of all, thank you for creating this task. To have the ability to install Terraform in the hosted agents is awesome!

There is an issue with the "-input=false -no-color" arguments that are being added to the terraform command. Right now, I think it is not possible to apply a terraform plan. Let check the command:

$ terraform apply -h
Usage: terraform apply [options] [DIR-OR-PLAN]
[...]

As you can see, the path to the plan to be executed should be at the end of the command line. But in the following line you are adding those arguments always at the end:

https://github.com/XpiritBV/Xpirit-Vsts-Release-Terraform/blob/master/Xpirit-Vsts-Release-Terraform/terraform.ps1#L149

When I want to execute terraform apply my.plan I add apply my.plan to the "Terraform arguments" field of the task, but what is actually being executed is terraform apply my.plan -input=false -no-color which throws an error. The proper unnatended command should be: terraform apply -input=false -no-color my.plan. You can check the error in the following log:

2018-04-17T18:19:02.6849925Z Terraform has been successfully initialized!
2018-04-17T18:19:02.6850121Z 
2018-04-17T18:19:02.6860217Z You may now begin working with Terraform. Try running "terraform plan" to see
2018-04-17T18:19:02.6862604Z any changes that are required for your infrastructure. All Terraform commands
2018-04-17T18:19:02.6866497Z should now work.
2018-04-17T18:19:02.6866705Z 
2018-04-17T18:19:02.6866978Z If you ever set or change modules or backend configuration for Terraform,
2018-04-17T18:19:02.6867431Z rerun this command to reinitialize your working directory. If you forget, other
2018-04-17T18:19:02.6875019Z commands will detect it and remind you to do so if necessary.
2018-04-17T18:19:03.0430209Z ##[command]"terraform" apply my.plan -input=false -no-color
2018-04-17T18:19:03.1192031Z Too many command line arguments. Configuration path expected.
2018-04-17T18:19:03.1336529Z ##[error] Terraform failed to execute. Error: 
2018-04-17T18:19:03.1348318Z End of Task Terraform

The only solution for this that I can think right now is to create a new field for arguments after options or to add the ability to ignore those extra arguments (being the user responsible of adding them on the command line).

What do you think?

Let me know also if I'm wrong and there is a way to do it but I missed it.

Blob storage state

Just getting started with integrating terraform into our CI workflow. Was glad to find your extension so thanks!

As I'm starting to work with this I have a few questions that could be me not understanding the process or perhaps they could be enhancements. I would be glad to put in pull requests for any of these if you agree with the concepts.

Firstly I was wondering about the decision to "manually" handle the state with azure blob storage rather than use terraform's built in mechanism for using azure blob storage.

For our projects we have the remote backend config in the repository in order to run plan locally. I expect this to conflict with the "manage state" option. I do really like that it allows you to use a service endpoint. One idea I had, since you're already using convention for the state file name, is you could potentially pass in the parameters to init to override what's in the repositories backend config with the tfs endpoint data. This would also have the benefit of the native locking that terraform provides.

Let me know what you think. Thanks!

Cannot find path

I have a build agent on a Windows VM. Running the plan command gives an error that it cannot find path C:\agent_work\1\s<myFolder><myFileName.tf>. When I go to my actual server that file is in that path. Beyond getting my source, this is my only task.

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.