-
Notifications
You must be signed in to change notification settings - Fork 4
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1 from PacktPublishing/init-gh-action
add gh-action code
- Loading branch information
Showing
20 changed files
with
692 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
changelog: | ||
exclude: | ||
labels: | ||
- ignore-for-release | ||
categories: | ||
- title: Breaking Changes 🛠 | ||
labels: | ||
- breaking-change | ||
- title: New Features 🎉 | ||
labels: | ||
- enhancement | ||
- title: Bug Fixes 🐛 | ||
labels: | ||
- bug-fix | ||
- title: Other Changes | ||
labels: | ||
- "*" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
name: Release new tweeter version | ||
on: | ||
release: | ||
types: [released] | ||
workflow_dispatch: | ||
inputs: | ||
TAG_NAME: | ||
description: 'Tag name that the major tag will point to' | ||
required: true | ||
|
||
permissions: | ||
contents: write | ||
|
||
env: | ||
TAG_NAME: ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} | ||
|
||
jobs: | ||
update_tag: | ||
name: Update the major tag to include the ${{ github.event.inputs.TAG_NAME || github.event.release.tag_name }} changes | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: Update the ${{ env.TAG_NAME }} tag | ||
uses: actions/[email protected] | ||
with: | ||
source-tag: ${{ env.TAG_NAME }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
name: first-workflow | ||
on: workflow_dispatch | ||
jobs: | ||
echo: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- name: echo step | ||
run: echo 'Hello World!' |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
name: release image | ||
on: | ||
push: | ||
tags: | ||
- 'image-v*' # push events for tags matching image-v for version (image-v1.0, etc) | ||
permissions: | ||
contents: read | ||
packages: write | ||
jobs: | ||
image: | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: set env | ||
run: echo "RELEASE_VERSION=${GITHUB_REF:17}" >> $GITHUB_ENV # refs/tags/image-v1.0.0 substring starting at 1.0.0 | ||
- name: setup buildx | ||
uses: docker/setup-buildx-action@v1 | ||
- name: login to GitHub container registry | ||
uses: docker/login-action@v1 | ||
with: | ||
registry: ghcr.io | ||
username: ${{ github.repository_owner }} | ||
password: ${{ secrets.GITHUB_TOKEN }} | ||
- name: build and push | ||
uses: docker/build-push-action@v2 | ||
with: | ||
push: true | ||
tags: | | ||
ghcr.io/packtpublishing/tweeter:${{ env.RELEASE_VERSION }} | ||
ghcr.io/packtpublishing/tweeter:latest |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
name: tweeter-automation | ||
on: | ||
push: | ||
tags: | ||
- 'v[0-9]+.[0-9]+.*' | ||
branches: | ||
- main | ||
pull_request: | ||
branches: | ||
- main | ||
jobs: | ||
test: | ||
permissions: | ||
contents: read | ||
strategy: | ||
matrix: | ||
go-version: [ 1.16.x, 1.17.x ] | ||
os: [ ubuntu-latest, macos-latest, windows-latest ] | ||
runs-on: ${{ matrix.os }} | ||
steps: | ||
- name: install go | ||
uses: actions/setup-go@v2 | ||
with: | ||
go-version: ${{ matrix.go-version }} | ||
- uses: actions/checkout@v2 | ||
- name: lint with golangci-lint | ||
uses: golangci/golangci-lint-action@v2 | ||
- name: run go test | ||
run: go test ./... | ||
test-action: | ||
permissions: | ||
contents: read | ||
packages: read | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: test the tweeter action in DRY_RUN | ||
id: tweeterAction | ||
env: | ||
DRY_RUN: true | ||
uses: ./ | ||
with: | ||
message: hello world! | ||
accessToken: fake | ||
accessTokenSecret: fake | ||
apiKey: fake | ||
apiKeySecret: fake | ||
- run: echo ${{ steps.tweeterAction.outputs.sentMessage }} from dry run test | ||
release: | ||
permissions: | ||
contents: write | ||
needs: test | ||
if: startsWith(github.ref, 'refs/tags/v') | ||
runs-on: ubuntu-latest | ||
steps: | ||
- uses: actions/checkout@v2 | ||
- name: Set RELEASE_VERSION ENV var | ||
run: echo "RELEASE_VERSION=${GITHUB_REF:10}" >> $GITHUB_ENV | ||
- uses: actions/setup-go@v2 | ||
with: | ||
go-version: 1.17.x | ||
- name: install gox | ||
run: go install github.com/mitchellh/[email protected] | ||
- name: build cross-platform binaries | ||
env: | ||
PLATFORMS: darwin/amd64 darwin/arm64 windows/amd64 linux/amd64 linux/arm64 | ||
VERSION_INJECT: github.com/PacktPublishing/Go-for-DevOps/chapter/9/pkg/tweeter.Version | ||
OUTPUT_PATH_FORMAT: ./bin/${{ env.RELEASE_VERSION }}/{{.OS}}/{{.Arch}}/tweeter | ||
run: | | ||
gox -osarch="${PLATFORMS}" -ldflags "-X ${VERSION_INJECT}=${RELEASE_VERSION}" -output "${OUTPUT_PATH_FORMAT}" | ||
- name: generate release notes | ||
env: | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
gh api -X POST 'repos/{owner}/{repo}/releases/generate-notes' \ | ||
-F commitish=${{ env.RELEASE_VERSION }} \ | ||
-F tag_name=${{ env.RELEASE_VERSION }} \ | ||
> tmp-release-notes.json | ||
- name: gzip the bins | ||
env: | ||
OUT_BASE: ./bin/${{ env.RELEASE_VERSION }} | ||
run: | | ||
tar -czvf "${OUT_BASE}/darwin/amd64/tweeter_darwin_amd64.tar.gz" -C "${OUT_BASE}/darwin/amd64" tweeter | ||
tar -czvf "${OUT_BASE}/darwin/arm64/tweeter_darwin_arm64.tar.gz" -C "${OUT_BASE}/darwin/arm64" tweeter | ||
tar -czvf "${OUT_BASE}/windows/amd64/tweeter_windows_amd64.tar.gz" -C "${OUT_BASE}/windows/amd64" tweeter.exe | ||
tar -czvf "${OUT_BASE}/linux/amd64/tweeter_linux_amd64.tar.gz" -C "${OUT_BASE}/linux/amd64" tweeter | ||
tar -czvf "${OUT_BASE}/linux/arm64/tweeter_linux_arm64.tar.gz" -C "${OUT_BASE}/linux/arm64" tweeter | ||
- name: create release | ||
env: | ||
OUT_BASE: ./bin/${{ env.RELEASE_VERSION }} | ||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
run: | | ||
jq -r .body tmp-release-notes.json > tmp-release-notes.md | ||
gh release create ${{ env.RELEASE_VERSION }} \ | ||
-t "$(jq -r .name tmp-release-notes.json)" \ | ||
-F tmp-release-notes.md \ | ||
"${OUT_BASE}/darwin/amd64/tweeter_darwin_amd64.tar.gz#tweeter_osx_amd64" \ | ||
"${OUT_BASE}/darwin/arm64/tweeter_darwin_arm64.tar.gz#tweeter_osx_arm64" \ | ||
"${OUT_BASE}/windows/amd64/tweeter_windows_amd64.tar.gz#tweeter_windows_amd64" \ | ||
"${OUT_BASE}/linux/amd64/tweeter_linux_amd64.tar.gz#tweeter_linux_amd64" \ | ||
"${OUT_BASE}/linux/arm64/tweeter_linux_arm64.tar.gz#tweeter_linux_arm64" |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
# Binaries for programs and plugins | ||
*.exe | ||
*.exe~ | ||
*.dll | ||
*.so | ||
*.dylib | ||
|
||
# Test binary, built with `go test -c` | ||
*.test | ||
|
||
# Output of the go coverage tool, specifically when used with LiteIDE | ||
*.out | ||
|
||
# Dependency directories (remove the comment below to include it) | ||
# vendor/ | ||
|
||
.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,26 @@ | ||
FROM golang:1.17 as builder | ||
WORKDIR /workspace | ||
|
||
# Run this with docker build --build_arg $(go env GOPROXY) to override the goproxy | ||
ARG goproxy=https://proxy.golang.org | ||
ENV GOPROXY=$goproxy | ||
|
||
# Copy the Go Modules manifests | ||
COPY go.mod go.mod | ||
COPY go.sum go.sum | ||
# Cache deps before building and copying source so that we don't need to re-download as much | ||
# and so that source changes don't invalidate our downloaded layer | ||
RUN go mod download | ||
|
||
# Copy the sources | ||
COPY ./ ./ | ||
|
||
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 \ | ||
go build -a -ldflags '-extldflags "-static"' \ | ||
-o tweeter . | ||
|
||
# Copy the action into a thin image | ||
FROM gcr.io/distroless/static:latest | ||
WORKDIR / | ||
COPY --from=builder /workspace/tweeter . | ||
ENTRYPOINT ["/tweeter"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,2 +1,58 @@ | ||
# B18275-08-Automating-Workflows-with-GitHub-Actions-Code-Files | ||
The code files for chapter 8 of B18275 have been added on a separate repository of it's own. | ||
The code files for chapter 8 of B18275 have been added on a separate repository of its own. | ||
|
||
## DevOps for Go Tweeter | ||
The tweeter command line tool will send a tweet via Twitter. | ||
|
||
## Setup | ||
You can use tweeter to send a tweet or to output the message to STDOUT. If you want to send a tweet, you will need to set up a Twitter application. | ||
|
||
### Setup With a Twitter Application | ||
To send a tweet, you will need to create or use an existing Twitter account, create a Twitter application, and generate API credentials. All of this can be done through the | ||
[Twitter Developer Portal](https://developer.twitter.com/en/portal/projects-and-apps). | ||
|
||
### Setup Without a Twitter Application | ||
Some people may not want to set up a Twitter account. If you would like to use tweeter without sending tweets, use the `--dry-run` argument. This will cause the tool to write the message to STDOUT rather than sending the message to Twitter. | ||
|
||
## Inputs | ||
|
||
- `--message` **Required** the tweet message you would like to send | ||
- `--apiKey` the API key under Consumer Keys in the [Twitter developer portal](https://developer.twitter.com/en/portal/projects-and-apps) | ||
- `--apiKeySecret` the API key secret under Consumer Keys in the [Twitter developer portal](https://developer.twitter.com/en/portal/projects-and-apps) | ||
- `--accessToken` the access token under Authentication Tokens in the [Twitter developer portal](https://developer.twitter.com/en/portal/projects-and-apps) | ||
- `--accessTokenSecret` the access token secret under Authentications Tokens in the [Twitter developer portal](https://developer.twitter.com/en/portal/projects-and-apps) | ||
- `--dryRun` will skip authentication validation and sending the message to Twitter | ||
|
||
## Test | ||
``` | ||
$ go test ./... | ||
? github.com/devopsforgo/github-actions [no test files] | ||
ok github.com/devopsforgo/github-actions/pkg/tweeter 0.002s | ||
``` | ||
|
||
## Run Help | ||
To see the command line arguments and descriptions, display the help. | ||
``` | ||
$ go run . -h | ||
Usage of /tmp/go-build3731631588/b001/exe/github-actions: | ||
--accessToken string twitter access token | ||
--accessTokenSecret string twitter access token secret | ||
--apiKey string twitter api key | ||
--apiKeySecret string twitter api key secret | ||
--dryRun if true, then a tweet will not be sent | ||
--message string message you'd like to send to twitter | ||
pflag: help requested | ||
exit status 2 | ||
``` | ||
|
||
## Run Without Sending a Tweet | ||
The `--dryRun` argument will skip validation of the authentication arguments and output the message to STDOUT. | ||
``` | ||
$ go run . --dryRun --message foo | ||
``` | ||
|
||
## Run Sending a Tweet | ||
Without `--dryRun` specified, tweeter will send the `--messsage` argument as a Tweet. | ||
``` | ||
$ go run . --message foo --apiKey 123 --apiKeySecret secret --accessToken token --accessTokenSecret secret | ||
``` |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,38 @@ | ||
name: Tweeter Action | ||
author: DevOps for Go | ||
description: Simple action to send a tweet via an GitHub Action. | ||
inputs: | ||
message: | ||
description: 'message you want to tweet' | ||
required: true | ||
apiKey: | ||
description: 'api key for Twitter api' | ||
required: true | ||
apiKeySecret: | ||
description: 'api key secret for Twitter api' | ||
required: true | ||
accessToken: | ||
description: 'access token for Twitter api' | ||
required: true | ||
accessTokenSecret: | ||
description: 'access token secret for Twitter api' | ||
required: true | ||
outputs: | ||
errorMessage: | ||
description: 'if something went wrong, the error message' | ||
sentMessage: | ||
description: 'message sent to Twitter' | ||
runs: | ||
using: docker | ||
image: Dockerfile | ||
args: | ||
- --message | ||
- "${{ inputs.message }}" | ||
- --apiKey | ||
- ${{ inputs.apiKey }} | ||
- --apiKeySecret | ||
- ${{ inputs.apiKeySecret }} | ||
- --accessToken | ||
- ${{ inputs.accessToken }} | ||
- --accessTokenSecret | ||
- ${{ inputs.accessTokenSecret }} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
module github.com/PacktPublishing/Go-for-DevOps/chapter/9 | ||
|
||
go 1.17 | ||
|
||
require ( | ||
github.com/dghubble/go-twitter v0.0.0-20210609183100-2fdbf421508e | ||
github.com/dghubble/oauth1 v0.7.0 | ||
github.com/hashicorp/go-multierror v1.1.1 | ||
github.com/pkg/errors v0.9.1 | ||
github.com/spf13/pflag v1.0.5 | ||
) | ||
|
||
require ( | ||
github.com/cenkalti/backoff v2.1.1+incompatible // indirect | ||
github.com/dghubble/sling v1.3.0 // indirect | ||
github.com/google/go-querystring v1.0.0 // indirect | ||
github.com/hashicorp/errwrap v1.0.0 // indirect | ||
) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
github.com/cenkalti/backoff v2.1.1+incompatible h1:tKJnvO2kl0zmb/jA5UKAt4VoEVw1qxKWjE/Bpp46npY= | ||
github.com/cenkalti/backoff v2.1.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= | ||
github.com/davecgh/go-spew v1.1.0 h1:ZDRjVQ15GmhC3fiQ8ni8+OwkZQO4DARzQgrnXU1Liz8= | ||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= | ||
github.com/dghubble/go-twitter v0.0.0-20210609183100-2fdbf421508e h1:o0sI/cfhAXdtAbiIVeTd4hmwtwgs4cQFwRBhmbx8AKY= | ||
github.com/dghubble/go-twitter v0.0.0-20210609183100-2fdbf421508e/go.mod h1:xfg4uS5LEzOj8PgZV7SQYRHbG7jPUnelEiaAVJxmhJE= | ||
github.com/dghubble/oauth1 v0.7.0 h1:AlpZdbRiJM4XGHIlQ8BuJ/wlpGwFEJNnB4Mc+78tA/w= | ||
github.com/dghubble/oauth1 v0.7.0/go.mod h1:8pFdfPkv/jr8mkChVbNVuJ0suiHe278BtWI4Tk1ujxk= | ||
github.com/dghubble/sling v1.3.0 h1:pZHjCJq4zJvc6qVQ5wN1jo5oNZlNE0+8T/h0XeXBUKU= | ||
github.com/dghubble/sling v1.3.0/go.mod h1:XXShWaBWKzNLhu2OxikSNFrlsvowtz4kyRuXUG7oQKY= | ||
github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= | ||
github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= | ||
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= | ||
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= | ||
github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= | ||
github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= | ||
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= | ||
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= | ||
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= | ||
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= | ||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= | ||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= | ||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= | ||
github.com/stretchr/testify v1.3.0 h1:TivCn/peBQ7UY8ooIcPgZFpTNSz0Q2U6UrFlUfqbe0Q= | ||
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Oops, something went wrong.