github.com/aneshas/cli@v0.0.0-20180104210444-aec958fa47db/langs/dotnet.go (about)

     1  package langs
     2  
     3  import (
     4  	"os"
     5  	"os/exec"
     6  )
     7  
     8  type DotNetLangHelper struct {
     9  	BaseHelper
    10  }
    11  
    12  func (h *DotNetLangHelper) Handles(lang string) bool {
    13  	return defaultHandles(h, lang)
    14  }
    15  func (h *DotNetLangHelper) Runtime() string {
    16  	return h.LangStrings()[0]
    17  }
    18  
    19  func (lh *DotNetLangHelper) LangStrings() []string {
    20  	return []string{"dotnet"}
    21  }
    22  func (lh *DotNetLangHelper) Extensions() []string {
    23  	return []string{".cs", ".fs"}
    24  }
    25  func (lh *DotNetLangHelper) BuildFromImage() (string, error) {
    26  	return "microsoft/dotnet:1.0.1-sdk-projectjson", nil
    27  }
    28  func (lh *DotNetLangHelper) RunFromImage() (string, error) {
    29  	return "microsoft/dotnet:runtime", nil
    30  }
    31  
    32  func (lh *DotNetLangHelper) Entrypoint() (string, error) {
    33  	return "dotnet dotnet.dll", nil
    34  }
    35  
    36  func (lh *DotNetLangHelper) HasPreBuild() bool {
    37  	return true
    38  }
    39  
    40  // PreBuild for Go builds the binary so the final image can be as small as possible
    41  func (lh *DotNetLangHelper) PreBuild() error {
    42  	wd, err := os.Getwd()
    43  	if err != nil {
    44  		return err
    45  	}
    46  
    47  	cmd := exec.Command(
    48  		"docker", "run",
    49  		"--rm", "-v",
    50  		wd+":/dotnet", "-w", "/dotnet", "microsoft/dotnet:1.0.1-sdk-projectjson",
    51  		"/bin/sh", "-c", "dotnet restore && dotnet publish -c release -b /tmp -o .",
    52  	)
    53  	cmd.Stderr = os.Stderr
    54  	cmd.Stdout = os.Stdout
    55  	if err := cmd.Run(); err != nil {
    56  		return dockerBuildError(err)
    57  	}
    58  	return nil
    59  }
    60  
    61  func (lh *DotNetLangHelper) AfterBuild() error {
    62  	return nil
    63  }