Table of contents : inside front cover Shipping Go Copyright dedication contents front matter preface acknowledgments about this book Who should read this book? How this book is organized: A roadmap About the code liveBook discussion forum about the author about the cover illustration Part 1. Startup 1 Delivering value 1.1 Simple concepts 1.2 Small pieces 1.2.1 Continuous 1.2.2 Process 1.2.3 Quality 1.2.4 Delivery 1.3 Building your product 1.3.1 Initial setup 1.3.2 Basic validation 1.3.3 Zero-cost deployment 1.3.4 Code confidence 1.3.5 Integrations 1.3.6 Portability 1.3.7 Adaptability 1.3.8 User acceptance 1.3.9 Scaled product 1.3.10 End to end 1.4 Feedback loop Summary 2 Introducing continuous integration 2.1 Where to start? 2.2 A greenfield project 2.3 The assembly line 2.4 Warehouses 2.5 Material Summary 3 Introducing continuous testing 3.1 What to test 3.2 Writing unit tests 3.3 Refactor, refactor, refactor 3.4 Testing pyramid 3.5 System testing 3.6 Adding it to the pipeline 3.7 Code coverage Summary 4 Introducing continuous deployment 4.1 Delivery 4.2 Developers as operators 4.3 Setting up a deployment account 4.4 As you like it 4.5 Function as a Service (FaaS) 4.6 Platform as a Service Summary Part 2. Scaling 5 Code quality enforcement 5.1 Reviewing code 5.1.1 Keep it small 5.1.2 Keep an open mind 5.1.3 Keep it moving 5.1.4 Keep it interesting 5.1.5 Keep it the same 5.2 Constraints on development 5.3 Standardizing our code through format and lint checks 5.4 Static code analysis 5.5 Code documentation 5.6 Git hooks 5.7 Flow Summary 6 Testing frameworks, mocking, and dependencies 6.1 Dependency inversion principle 6.2 Defining an interface 6.3 Dependency injection 6.4 Testing stubs 6.5 Mocking 6.5.1 Setting up our test suite 6.5.2 Using our mocks in test 6.6 Fake 6.7 Just the base of the pyramid Summary 7 Containerized deployment 7.1 What is a container? 7.2 What is a Buildpack? 7.3 Let’s build a container 7.4 Adding a container build to your pipeline 7.5 Deploying to a container runtime 7.6 Writing your own image 7.7 Local environment organization 7.8 Containers, containers everywhere Summary Part 3. Going public 8 Configuration management and stable releases 8.1 Configuration 8.2 Advanced configuration 8.2.1 Environmental variables 8.2.2 File 8.2.3 Flag 8.3 Hiding features 8.3.1 Updating the port 8.3.2 External client 8.4 Semantic versioning 8.5 Change log 8.6 Accountability and handling failure Summary 9 Integration testing 9.1 Phasing out the old 9.2 Behavior-driven design 9.3 Writing BDD tests in Go 9.4 Adding a database 9.5 Releasing Summary 10 Advanced deployment 10.1 Not quite IaaS 10.2 Your first cluster 10.3 Building blocks 10.4 Scaling and health status 10.5 Automatically deploying 10.6 Deploying Redis using Helm 10.7 Updating deployment configuration Summary 11 The loop 11.1 Startup 11.2 Acceleration 11.3 Cruising 11.4 Elements of development 11.4.1 Process 11.4.2 Testing 11.4.3 Delivering 11.5 The OODA loop 11.6 Conclusion Summary Appendix A. Using Kotlin A.1 Frameworks A.2 Coding A.3 Maven A.4 Testing A.5 Linting and the initial pipeline A.6 Containerizing Appendix B. Using Python B.1 Poetry B.2 Coding B.3 Testing B.4 Nox B.5 Defining the container B.6 Creating the pipeline Appendix C. Using JavaScript C.1 Node Package Manager C.2 Coding C.3 Testing C.4 Linting C.5 Defining the container C.6 Building the pipeline Appendix D. Using Terraform D.1 Building the image D.2 Deploying the image D.3 Creating the pipeline index inside back cover