Skip to content
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

fix: remove composite restrictions #1128

Merged
merged 3 commits into from
May 23, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
31 changes: 0 additions & 31 deletions pkg/model/workflow.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,6 @@ type Workflow struct {
Defaults Defaults `yaml:"defaults"`
}

// CompositeRestrictions is the structure to control what is allowed in composite actions
type CompositeRestrictions struct {
AllowCompositeUses bool
AllowCompositeIf bool
AllowCompositeContinueOnError bool
}

func defaultCompositeRestrictions() *CompositeRestrictions {
return &CompositeRestrictions{
AllowCompositeUses: true,
AllowCompositeIf: true,
AllowCompositeContinueOnError: false,
}
}

// On events for the workflow
func (w *Workflow) On() []string {
switch w.RawOn.Kind {
Expand Down Expand Up @@ -431,22 +416,6 @@ func (s *Step) Type() StepType {
return StepTypeUsesActionRemote
}

func (s *Step) Validate(config *CompositeRestrictions) error {
if config == nil {
config = defaultCompositeRestrictions()
}
if s.Type() != StepTypeRun && !config.AllowCompositeUses {
return fmt.Errorf("(StepID: %s): Unexpected value 'uses'", s.String())
} else if s.Type() == StepTypeRun && s.Shell == "" {
return fmt.Errorf("(StepID: %s): Required property is missing: 'shell'", s.String())
} else if !s.If.IsZero() && !config.AllowCompositeIf {
return fmt.Errorf("(StepID: %s): Property is not available: 'if'", s.String())
} else if s.ContinueOnError && !config.AllowCompositeContinueOnError {
return fmt.Errorf("(StepID: %s): Property is not available: 'continue-on-error'", s.String())
}
return nil
}

// ReadWorkflow returns a list of jobs for a given workflow file reader
func ReadWorkflow(in io.Reader) (*Workflow, error) {
w := new(Workflow)
Expand Down
7 changes: 0 additions & 7 deletions pkg/runner/action.go
Original file line number Diff line number Diff line change
Expand Up @@ -364,13 +364,6 @@ func execAsComposite(step actionStep, containerActionDir string) common.Executor
action := step.getActionModel()

return func(ctx context.Context) error {
// Disable some features of composite actions, only for feature parity with github
for _, compositeStep := range action.Runs.Steps {
if err := compositeStep.Validate(rc.Config.CompositeRestrictions); err != nil {
return err
}
}

eval := rc.NewExpressionEvaluator()

inputs := make(map[string]interface{})
Expand Down
59 changes: 29 additions & 30 deletions pkg/runner/runner.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,36 +23,35 @@ type Runner interface {

// Config contains the config for a new runner
type Config struct {
Actor string // the user that triggered the event
Workdir string // path to working directory
BindWorkdir bool // bind the workdir to the job container
EventName string // name of event to run
EventPath string // path to JSON file to use for event.json in containers
DefaultBranch string // name of the main branch for this repository
ReuseContainers bool // reuse containers to maintain state
ForcePull bool // force pulling of the image, even if already present
ForceRebuild bool // force rebuilding local docker image action
LogOutput bool // log the output from docker run
JSONLogger bool // use json or text logger
Env map[string]string // env for containers
Secrets map[string]string // list of secrets
Token string // GitHub token
InsecureSecrets bool // switch hiding output when printing to terminal
Platforms map[string]string // list of platforms
Privileged bool // use privileged mode
UsernsMode string // user namespace to use
ContainerArchitecture string // Desired OS/architecture platform for running containers
ContainerDaemonSocket string // Path to Docker daemon socket
UseGitIgnore bool // controls if paths in .gitignore should not be copied into container, default true
GitHubInstance string // GitHub instance to use, default "github.com"
ContainerCapAdd []string // list of kernel capabilities to add to the containers
ContainerCapDrop []string // list of kernel capabilities to remove from the containers
AutoRemove bool // controls if the container is automatically removed upon workflow completion
ArtifactServerPath string // the path where the artifact server stores uploads
ArtifactServerPort string // the port the artifact server binds to
CompositeRestrictions *model.CompositeRestrictions // describes which features are available in composite actions
NoSkipCheckout bool // do not skip actions/checkout
RemoteName string // remote name in local git repo config
Actor string // the user that triggered the event
Workdir string // path to working directory
BindWorkdir bool // bind the workdir to the job container
EventName string // name of event to run
EventPath string // path to JSON file to use for event.json in containers
DefaultBranch string // name of the main branch for this repository
ReuseContainers bool // reuse containers to maintain state
ForcePull bool // force pulling of the image, even if already present
ForceRebuild bool // force rebuilding local docker image action
LogOutput bool // log the output from docker run
JSONLogger bool // use json or text logger
Env map[string]string // env for containers
Secrets map[string]string // list of secrets
Token string // GitHub token
InsecureSecrets bool // switch hiding output when printing to terminal
Platforms map[string]string // list of platforms
Privileged bool // use privileged mode
UsernsMode string // user namespace to use
ContainerArchitecture string // Desired OS/architecture platform for running containers
ContainerDaemonSocket string // Path to Docker daemon socket
UseGitIgnore bool // controls if paths in .gitignore should not be copied into container, default true
GitHubInstance string // GitHub instance to use, default "github.com"
ContainerCapAdd []string // list of kernel capabilities to add to the containers
ContainerCapDrop []string // list of kernel capabilities to remove from the containers
AutoRemove bool // controls if the container is automatically removed upon workflow completion
ArtifactServerPath string // the path where the artifact server stores uploads
ArtifactServerPort string // the port the artifact server binds to
NoSkipCheckout bool // do not skip actions/checkout
RemoteName string // remote name in local git repo config
}

// Resolves the equivalent host path inside the container
Expand Down