* Build Windows Installer stage
* Run the Windows Installer build on thw windows node
* Disable Build Images, Push Images and Upload steps
* checkout scm on windows agent
* Execute MSBuild
* Use bat instead of sh
* Test stash
* Copy artifacts between nodes
* Fix typo
* Sign Windows Installer
* Fix Makefile
* Enable binaries-upload
* Set Product Version to 0.0.0
* Build installer with Release configuration
* Enable back docker image stages and slack alerts
* Restore SNOboard shortcut after resolving conflicts
* Remove empty line from build.bat
* archive old referral offer doc
* init referral manager
* add Referral Manager CLI definition
* add draft implementation steps
* use existing registration_token table for storing invitation tokens
* fix numbering
* add open question about auth
* wip pseudocode
* add user interface design
* separate token generation step from getting users step
* change button to be a referral tab on the UI
* simplify some sentences. clarified CLI referral manager interaction
* add prevent two processes running at the same time
* add cli code
* clear users when CLI exites earlier or referral manager finishes sending tokens to satellites
* use transaction for saving tokens on satellite so we can roll back if error occurs
* add auth token and GetSatelliteURLs
* add schema for satellites table
* update to only have satelite to talk to referral manager
* add definition for eligible users and owner's satellite
* fix indentation
* add saving user info during redeem pseudocode
* wip
* address reviews
* add unredeemed token in users table
* address comments
we spawned a goroutine to wait on the context's done
channel sending the error afterward, but we forgot
to ensure the context was eventually done, so the
goroutine would be leaked until then.
instead, we can just do a select on two channels to
get the error rather than spawn a goroutine which
makes it impossible to leak a goroutine.
Change-Id: I2fdba206ae6ff7a3441b00708b86b36dfeece2b5
the net package does not make it easy to know if DialContext
failed because the context was done. it's important for some
of our tests that canceled contexts are detected as such, so
we accept the small race that's arguably correct (the context
must be canceled asynchronously) to ensure we always return
the context error if available.
Change-Id: I058064d5c666e5353b74fb5bd300bf7abe537ff5