Skip to content

Feat: Pipeline Cron Trigger #90

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 55 commits into from
Oct 3, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
7e8606e
Fix automation.
korenyoni Sep 11, 2022
8f7b874
Merge pull request #1 from korenyoni/feat/trigger-resource-separation
korenyoni Sep 12, 2022
0d8dca2
Deprecate trigger block.
korenyoni Sep 12, 2022
7923573
Rename labeler.yaml to labeler.yml
korenyoni Sep 12, 2022
78a1a9c
Fix labeler config file extension.
korenyoni Sep 12, 2022
1de7dff
Merge branch 'master' into feat/trigger-resource-separation
korenyoni Sep 12, 2022
c7c7a2d
Merge pull request #2 from korenyoni/feat/trigger-resource-separation
korenyoni Sep 12, 2022
2cf98fb
Update draft-release.yaml
korenyoni Sep 12, 2022
fee74b6
Fix changelog automation.
korenyoni Sep 12, 2022
c5cfa8f
Merge pull request #3 from korenyoni/fix/changelog
korenyoni Sep 12, 2022
e85d760
Update CHANGELOG.md for "v0.1.1"
korenyoni Sep 12, 2022
e1a681a
WIP: initial commit.
korenyoni Sep 14, 2022
0553330
WIP: initial commit.
korenyoni Sep 14, 2022
9cf96b5
Add support for cron triggers.
korenyoni Sep 21, 2022
d431bfb
Fix (most) tests.
korenyoni Sep 22, 2022
e43f410
Merge branch 'feat/trigger-resource-separation' of github.com:korenyo…
korenyoni Sep 22, 2022
7067c70
Fix TestAccCodefreshPipeline_RuntimeEnvironment.
korenyoni Sep 22, 2022
2523068
(WIP): overhaul tests and add tests for cron triggers.
korenyoni Sep 22, 2022
ebf4583
(WIP): fix cron trigger tests.
korenyoni Sep 25, 2022
e56a6a5
Fix imports.
korenyoni Sep 28, 2022
67a7bcc
Remove deprecation.
korenyoni Sep 28, 2022
81735d7
Add documentation.
korenyoni Sep 28, 2022
1366d42
Empty commit.
korenyoni Sep 28, 2022
8a53948
Merge pull request #4 from korenyoni/feat/trigger-resource-separation
korenyoni Sep 28, 2022
5a18fb9
Add tests.
korenyoni Sep 28, 2022
f2f8c75
Empty commit.
korenyoni Sep 28, 2022
bc76830
Change git integration name.
korenyoni Sep 28, 2022
358374b
Bump goreleaser.
korenyoni Sep 28, 2022
47c7a48
Add retries.
korenyoni Sep 28, 2022
54f8305
Merge pull request #5 from korenyoni/feat/testing
korenyoni Sep 28, 2022
f3aef05
Update CHANGELOG.md for "v0.1.2"
korenyoni Sep 28, 2022
dd7c9ef
Superflous change to test release.
korenyoni Sep 28, 2022
4c73783
Merge pull request #6 from korenyoni/test/test-release
korenyoni Sep 28, 2022
29ab310
Update CHANGELOG.md for "v0.1.3"
korenyoni Sep 28, 2022
d073675
Add section in README on running acceptance tests.
korenyoni Sep 28, 2022
08bc608
Merge pull request #7 from korenyoni/docs/update-readme
korenyoni Sep 28, 2022
e9d94e3
Update CHANGELOG.md for "v0.1.4"
korenyoni Sep 28, 2022
ab5b6c3
Clear CHANGELOG and fix CF pipeline.
korenyoni Sep 28, 2022
b299f7b
Clear CHANGELOG and fix CF pipeline.
korenyoni Sep 28, 2022
4b1a585
Update CHANGELOG.md for "v0.1.5"
korenyoni Oct 2, 2022
e0db70f
Update CHANGELOG.md for "v0.1.5"
korenyoni Oct 2, 2022
4c2477c
Update codefresh.yml
korenyoni Oct 2, 2022
ee620ea
Update CHANGELOG.md for "v0.1.5"
korenyoni Oct 2, 2022
e8e14ee
Update CHANGELOG.md
korenyoni Oct 3, 2022
93e7ad8
Empty commit
korenyoni Oct 3, 2022
8b8108e
Empty Commit
korenyoni Oct 3, 2022
a1f3c6e
Empty Commit
korenyoni Oct 3, 2022
4eb8e72
Empty Commit
korenyoni Oct 3, 2022
c228c39
Create CODEOWNERS
korenyoni Oct 3, 2022
29afb98
Update / add missing versions.tf files.
korenyoni Oct 3, 2022
e1108a2
Merge branch 'master' of github.com:korenyoni/terraform-provider-code…
korenyoni Oct 3, 2022
ef6dc9d
Update CODEOWNERS
korenyoni Oct 3, 2022
e346f27
Address code review.
korenyoni Oct 3, 2022
b9e354e
go fmt.
korenyoni Oct 3, 2022
c06bff6
Terraform fmt; fix examples.
korenyoni Oct 3, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @codefresh-io/devops @yaroslav-codefresh @denis-codefresh
5 changes: 5 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
## What

## Why

## Notes
20 changes: 20 additions & 0 deletions .github/labeler.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
source:
- 'client/**/*'
- 'codefresh/**/*'
- '*.go'
- '*.mod'
- '*.sum'

docs:
- README.md
- docs/**/*
- examples/**/*
- tf_modules/**/*
- CHANGELOG.md

automation:
- scripts/**/*
- .github/**/*
- codefresh.yml
- .goreleaser.yml
- GNUmakefile
35 changes: 35 additions & 0 deletions .github/release-drafter.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name-template: "v$RESOLVED_VERSION"
tag-template: "v$RESOLVED_VERSION"
categories:
- title: "🚀 Features"
labels:
- "feature"
- "enhancement"
- title: "🐛 Bug Fixes"
labels:
- "fix"
- "bugfix"
- "bug"
- title: "🧰 Maintenance"
label: "chore"
change-template: "- $TITLE @$AUTHOR (#$NUMBER)"
change-title-escapes: '\<*_&'
version-resolver:
major:
labels:
- "major"
minor:
labels:
- "minor"
- "feature"
- "enhancement"
patch:
labels:
- "patch"
- "fix"
- "bugfix"
- "bug"
default: patch
template: |
## Changes
$CHANGES
18 changes: 18 additions & 0 deletions .github/workflows/changelog-from-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: "Changelog from Release"

on:
release:
types: [published, released]

jobs:
update_changelog:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
with:
ref: master
- uses: rhysd/changelog-from-release/action@v3
with:
file: CHANGELOG.md
github_token: ${{ secrets.GITHUB_TOKEN }}
commit_summary_template: 'Update CHANGELOG.md for %s'
19 changes: 19 additions & 0 deletions .github/workflows/draft-release.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Draft Release

on:
push:
branches:
- master
pull_request:
types: [opened, reopened, synchronize]

jobs:
update_release_draft:
runs-on: ubuntu-latest
steps:
- uses: release-drafter/release-drafter@v5
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
publish: false
config-name: release-drafter.yaml
14 changes: 14 additions & 0 deletions .github/workflows/update-labels.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
name: "Pull Request Labeler"
on:
- pull_request_target

jobs:
triage:
permissions:
contents: read
pull-requests: write
runs-on: ubuntu-latest
steps:
- uses: actions/labeler@v4
with:
repo-token: "${{ secrets.GITHUB_TOKEN }}"
8 changes: 0 additions & 8 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,4 @@ signs:
- "${signature}"
- "--detach-sign"
- "${artifact}"
release:
# draft: true
changelog:
sort: asc
filters:
exclude:
- '^docs:'
- '^test:'

4 changes: 0 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1 @@
# Changelog

## [1.0.0 (Unreleased)](https://github.com/codefresh-io/terraform-provider-codefresh/tree/HEAD)

[Full Changelog](https://github.com/codefresh-io/terraform-provider-codefresh/compare/17fe7e1b0003bda492682d06ba1917cae91d6faf...HEAD)
11 changes: 8 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ terraform {
```


## [Documentations](./docs)
## [Documentation](./docs)

## [Examples](./examples)

Expand Down Expand Up @@ -77,9 +77,14 @@ export CODEFRESH_API_KEY='xyz'

## Testing the Provider

```bash
export TF_ACC="test"
export CODEFRESH_API_KEY=[YOUR API TOKEN]
go test -v ./...
```

## License

Copyright 2020 Codefresh.
Copyright 2022 Codefresh.

The Codefresh Provider is available under [MPL2.0 license](./LICENSE).

80 changes: 80 additions & 0 deletions client/hermes_trigger.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,80 @@
package client

import (
"fmt"
)

type HermesTrigger struct {
Event string `json:"event,omitempty"`
PipelineID string `json:"pipeline,omitempty"`
EventData EventData `json:"event-data,omitempty"`
}

type EventData struct {
Uri string `json:"uri"`
Type string `json:"type"`
Kind string `json:"kind"`
Account string `json:"account"`
Secret string `json:"secret"`
}

func (client *Client) GetHermesTriggerByEventAndPipeline(event string, pipeline string) (*HermesTrigger, error) {

fullPath := fmt.Sprintf("/hermes/triggers/event/%s", UriEncodeEvent(event))
opts := RequestOptions{
Path: fullPath,
Method: "GET",
}

resp, err := client.RequestAPI(&opts)
if err != nil {
return nil, err
}

var hermesTriggerList []HermesTrigger

err = DecodeResponseInto(resp, &hermesTriggerList)
if err != nil {
return nil, err
}

var hermesTrigger HermesTrigger
for _, trigger := range hermesTriggerList {
if trigger.PipelineID == pipeline {
hermesTrigger = trigger
}
}
if hermesTrigger.Event == "" {
return nil, fmt.Errorf("No trigger found for event %s and pipeline %s", event, pipeline)
}

return &hermesTrigger, nil
}

func (client *Client) CreateHermesTriggerByEventAndPipeline(event string, pipeline string) error {

fullPath := fmt.Sprintf("/hermes/triggers/%s/%s", UriEncodeEvent(event), pipeline)
opts := RequestOptions{
Path: fullPath,
Method: "POST",
}

_, err := client.RequestAPI(&opts)
return err
}

func (client *Client) DeleteHermesTriggerByEventAndPipeline(event string, pipeline string) error {
fullPath := fmt.Sprintf("/hermes/triggers/%s/%s", UriEncodeEvent(event), pipeline)
opts := RequestOptions{
Path: fullPath,
Method: "DELETE",
}

_, err := client.RequestAPI(&opts)

if err != nil {
return err
}

return nil
}
60 changes: 60 additions & 0 deletions client/hermes_trigger_event.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package client

import (
"fmt"
)

type HermesTriggerEvent struct {
Type string `json:"type,omitempty"`
Kind string `json:"kind,omitempty"`
Filter string `json:"filter,omitempty"`
Secret string `json:"secret,omitempty"`
Values map[string]string `json:"values,omitempty"`
}

func (client *Client) GetHermesTriggerEvent(event string) (*HermesTriggerEvent, error) {
fullPath := fmt.Sprintf("/hermes/triggers/%s", UriEncodeEvent(event))

opts := RequestOptions{
Path: fullPath,
Method: "GET",
}

resp, err := client.RequestAPI(&opts)
if err != nil {
return nil, err
}

var hermesTriggerEvent HermesTriggerEvent
err = DecodeResponseInto(resp, &hermesTriggerEvent)
if err != nil {
return nil, err
}

return &hermesTriggerEvent, nil
}

func (client *Client) CreateHermesTriggerEvent(event *HermesTriggerEvent) (string, error) {

body, err := EncodeToJSON(event)
if err != nil {
return "", err
}

fullPath := "/hermes/events/"
opts := RequestOptions{
Path: fullPath,
Method: "POST",
Body: body,
}

resp, err := client.RequestAPI(&opts)

var eventString string
err = DecodeResponseInto(resp, &eventString)
if err != nil {
return "", err
}

return eventString, err
}
18 changes: 9 additions & 9 deletions client/user.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,15 +264,15 @@ func (client *Client) DeleteUser(userName string) error {
Method: "DELETE",
}

// The API will return a 500 error if the user cannot be found
// In this case the DeleteUser function should not return an error.
// Return error only if the body of the return message does not contain "User does not exist"
res, err := client.RequestAPI(&opts)
if err != nil {
if !strings.Contains(string(res), "User does not exist") {
return err
}
}
// The API will return a 500 error if the user cannot be found
// In this case the DeleteUser function should not return an error.
// Return error only if the body of the return message does not contain "User does not exist"
res, err := client.RequestAPI(&opts)
if err != nil {
if !strings.Contains(string(res), "User does not exist") {
return err
}
}

return nil
}
Expand Down
16 changes: 16 additions & 0 deletions client/utils.go
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
package client

import (
"net/url"
"strings"
)

// Variable spec
type Variable struct {
Key string `json:"key"`
Expand All @@ -19,3 +24,14 @@ func FindInSlice(slice []string, val string) bool {
}
return false
}

func uriEncode(path string) string {
replacer := strings.NewReplacer("+", "%20", "%2A", "*") // match Javascript's encodeURIComponent()
return replacer.Replace(url.QueryEscape(path))
}

func UriEncodeEvent(event string) string {
// The following is odd, but it's intentional. The event is URI encoded twice because
// the Codefresh API expects it to be encoded twice.
return uriEncode(uriEncode(event))
}
17 changes: 15 additions & 2 deletions codefresh.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,22 @@ steps:
go_fmt:
title: 'Formatting'
stage: test
image: goreleaser/goreleaser:v1.6.3
image: goreleaser/goreleaser:v1.11.3
commands:
- go fmt

go_test:
title: 'Run tests'
stage: test
image: goreleaser/goreleaser:v1.11.3
environment:
- TF_ACC="test"
commands:
- go test -v ./...
retry:
maxAttempts: 3
delay: 5
exponentialFactor: 2

prepare_env_vars:
title: 'Preparing environment variables...'
Expand All @@ -40,7 +53,7 @@ steps:

release_binaries:
title: Create release in Github
image: goreleaser/goreleaser:v1.6.3
image: goreleaser/goreleaser:v1.11.3
stage: release
environment:
- GPG_FINGERPRINT=${{GPG_FINGERPRINT}}
Expand Down
Loading