Awesome Open Source
Awesome Open Source

EOL

Times have changed since I started this work. I no longer have the resources to adequately maintain this project. Additionally, there now also exist several other options, including SAM, around which lively communities have formed. With v3, all CloudFormation API changes have been migrated to go-formation and all AWS API SDK calls moved to AWS v2. This likely marks the end of my active development on Sparta.

If this project has been helpful to you and you're interested in becoming a shepherd, please open an issue. Thanks all for your feedback, support, and recommendations over the years.

Keep on serverlessing!

  • Matt December 5th, 2021

Sparta v3

This is v3 of Sparta which is not backward compatible with v1 or v2 versions.

Sparta

Build Status

GoDoc

Go Report Card

Visit gosparta.io for complete documentation.

Version Info

This is the breaking v2 version of Sparta. The previous version is available at at the /v1 branch.

Overview

Sparta takes a set of golang functions and automatically provisions them in AWS Lambda as a logical unit.

AWS Lambda functions are defined using the standard AWS Lambda signatures:

  • func()
  • func() error
  • func(TIn) error
  • func() (TOut, error)
  • func(context.Context) error
  • func(context.Context, TIn) error
  • func(context.Context) (TOut, error)
  • func(context.Context, TIn) (TOut, error)

The TIn and TOut parameters represent encoding/json un/marshallable types.

For instance:

// Standard AWS λ function
func helloWorld(ctx context.Context) (string, error) {
  ...
}

where

  • ctx : The request context that includes both the AWS Context as well as Sparta specific values

Consumers define a set of lambda functions and provide them to Sparta to create a self-documenting, self-deploying AWS Lambda binary:

  lambdaFn, _ := sparta.NewAWSLambda("Hello World",
    helloWorld,
    sparta.IAMRoleDefinition{})

  var lambdaFunctions []*sparta.LambdaAWSInfo
  lambdaFunctions = append(lambdaFunctions, lambdaFn)

  err := sparta.Main("HelloWorldStack",
    "My Hello World stack",
    lambdaFunctions,
    nil,
    nil)

Visit gosparta.io for complete documentation.

Contributing

Sparta contributions are most welcome. Please consult the latest issues for open issues.

Building

Locally building or testing Sparta itself is typically only needed to make package changes. Sparta is more often used as a required import of another application. Building is done via mage.

To get started building and verifying local changes:

  1. go get -u -d github.com/magefile/mage
  2. In the .../mweagle/Sparta directory, run mage -l to list the current targets:
\$ mage -l
Targets:
  build                         the application
  ciBuild                       is the task to build in the context of CI pipeline
  clean                         the working directory
  compareAgainstMasterBranch    is a convenience function to show the comparisons of the current pushed branch against the master branch
  describe                      runs the `TestDescribe` test to generate a describe HTML output file at graph.html
  docsBuild                     builds the public documentation site in the /docs folder
  docsCommit                    builds and commits the current documentation with an autogenerated comment
  docsEdit                      starts a Hugo server and hot reloads the documentation at http://localhost:1313
  docsInstallRequirements       installs the required Hugo version
  ensureAllPreconditions        ensures that the source passes *ALL* static `ensure*` precondition steps
  ensureCIBuildEnvironment      is the command that sets up the CI environment to run the build.
  ensureCleanTree               ensures that the git tree is clean
  ensureFormatted               ensures that the source code is formatted with goimports
  ensureGoFmt                   ensures that the source is `gofmt -s` is empty
  ensureLint                    ensures that the source is `golint`ed
  ensureMarkdownSpelling        ensures that all *.MD files are checked for common spelling mistakes
  ensurePrealloc                ensures that slices that could be preallocated are enforced
  ensureSpelling                ensures that there are no misspellings in the source
  ensureStaticChecks            ensures that the source code passes static code checks
  ensureVet                     ensures that the source has been `go vet`ted
  fetchCloudFormationSchema     we have the latest CloudFormation schema as part of generating constants.
  generateAutomaticCode         is the handler that runs the codegen part of things
  generateBuildInfo             creates the automatic buildinfo.go file so that we can stamp the SHA into the binaries we build...
  generateConstants             runs the set of commands that update the embedded CONSTANTS for both local and AWS Lambda execution
  logCodeMetrics                ensures that the source code is formatted with goimports
  publish                       the latest source
  test                          runs the Sparta tests
  testCover                     runs the test and opens up the resulting report
  unitTest                      only runs the unit tests

Confirm tests are passing on HEAD by first running mage -v test.

As you periodically make local changes, run mage -v test to confirm backward compatibility.

Tests

When possible, please include a test case that verifies the local change and ensures compatibility.

Contributors

Thanks to all Sparta contributors (alphabetical):

Alternatives To Sparta
Select To Compare


Alternative Project Comparisons
Related Awesome Lists
Top Programming Languages
Top Projects

Get A Weekly Email With Trending Projects For These Topics
No Spam. Unsubscribe easily at any time.
Javascript (1,094,037
Golang (164,214
Amazon Web Services (38,681
Lambda Functions (13,970
Microservices (12,159
Serverless (10,009
Aws Lambda (3,478