diff --git a/.lighthouse/pipeline-clippy.yaml b/.lighthouse/pipeline-clippy.yaml new file mode 100644 index 00000000..99affd95 --- /dev/null +++ b/.lighthouse/pipeline-clippy.yaml @@ -0,0 +1,191 @@ +apiVersion: tekton.dev/v1beta1 +kind: PipelineRun +metadata: + name: clippy +spec: + pipelineSpec: + params: + - name: image-name + description: The name for the built image + type: string + - name: path-to-image-context + description: The path to the build context + type: string + - name: path-to-dockerfile + description: The path to the Dockerfile + type: string + - name: GIT_USER_NAME + description: The username for git + type: string + default: "fluxcdbot" + - name: GIT_USER_EMAIL + description: The email for git + type: string + default: "fluxcdbot@users.noreply.github.com" + tasks: + - name: do-stuff + taskSpec: + metadata: {} + stepTemplate: + image: alpine:3.18 + name: "" + resources: + requests: + cpu: 10m + memory: 600Mi + workingDir: /workspace/source + steps: + - image: alpine:3.18 + name: do-stuff-step + script: | + #!/usr/bin/env sh + echo "hello world" + - name: report-pending + taskRef: + name: gitea-set-status + runAfter: + - fetch-repository + params: + - name: CONTEXT + value: "$(params.JOB_NAME)" + - name: REPO_FULL_NAME + value: "$(params.REPO_OWNER)/$(params.REPO_NAME)" + - name: GITEA_HOST_URL + value: code.fizz.buzz + - name: SHA + value: "$(tasks.fetch-repository.results.commit)" + - name: DESCRIPTION + value: "Build $(params.JOB_NAME) has started" + - name: STATE + value: pending + - name: TARGET_URL + value: "https://tekton.fizz.buzz/#/namespaces/$(context.pipelineRun.namespace)/pipelineruns/$(context.pipelineRun.name)" + - name: fetch-repository + taskRef: + name: git-clone + workspaces: + - name: output + workspace: git-source + params: + - name: url + value: $(params.REPO_URL) + - name: revision + value: $(params.PULL_BASE_SHA) + - name: deleteExisting + value: "true" + - name: build-image + taskRef: + name: kaniko + params: + - name: IMAGE + value: "$(params.image-name):$(tasks.fetch-repository.results.commit)" + - name: CONTEXT + value: $(params.path-to-image-context) + - name: DOCKERFILE + value: $(params.path-to-dockerfile) + - name: BUILDER_IMAGE + value: "gcr.io/kaniko-project/executor:v1.12.1" + - name: EXTRA_ARGS + value: + - --cache=true + - --cache-copy-layers + - --cache-repo=harbor.fizz.buzz/kanikocache/cache + - --use-new-run # Should result in a speed-up + - --reproducible # To remove timestamps so layer caching works. + - --snapshot-mode=redo + - --skip-unused-stages=true + - --registry-mirror=dockerhub.dockerhub.svc.cluster.local + workspaces: + - name: source + workspace: git-source + - name: dockerconfig + workspace: docker-credentials + runAfter: + - fetch-repository + - name: clippy + taskRef: + name: run-docker-image + workspaces: + - name: source + workspace: git-source + - name: cargo-cache + workspace: cargo-cache + runAfter: + - build-image + params: + - name: docker-image + value: "$(params.image-name):$(tasks.fetch-repository.results.commit)" + finally: + - name: report-success + when: + - input: "$(tasks.status)" + operator: in + values: ["Succeeded", "Completed"] + taskRef: + name: gitea-set-status + params: + - name: CONTEXT + value: "$(params.JOB_NAME)" + - name: REPO_FULL_NAME + value: "$(params.REPO_OWNER)/$(params.REPO_NAME)" + - name: GITEA_HOST_URL + value: code.fizz.buzz + - name: SHA + value: "$(tasks.fetch-repository.results.commit)" + - name: DESCRIPTION + value: "Build $(params.JOB_NAME) has succeeded" + - name: STATE + value: success + - name: TARGET_URL + value: "https://tekton.fizz.buzz/#/namespaces/$(context.pipelineRun.namespace)/pipelineruns/$(context.pipelineRun.name)" + - name: report-failure + when: + - input: "$(tasks.status)" + operator: in + values: ["Failed"] + taskRef: + name: gitea-set-status + params: + - name: CONTEXT + value: "$(params.JOB_NAME)" + - name: REPO_FULL_NAME + value: "$(params.REPO_OWNER)/$(params.REPO_NAME)" + - name: GITEA_HOST_URL + value: code.fizz.buzz + - name: SHA + value: "$(tasks.fetch-repository.results.commit)" + - name: DESCRIPTION + value: "Build $(params.JOB_NAME) has failed" + - name: STATE + value: failure + - name: TARGET_URL + value: "https://tekton.fizz.buzz/#/namespaces/$(context.pipelineRun.namespace)/pipelineruns/$(context.pipelineRun.name)" + workspaces: + - name: git-source + - name: docker-credentials + workspaces: + - name: git-source + volumeClaimTemplate: + spec: + storageClassName: "nfs-client" + accessModes: + - ReadWriteOnce + resources: + requests: + storage: 10Gi + subPath: rust-source + - name: cargo-cache + persistentVolumeClaim: + claimName: organic-cargo-cache-clippy + - name: docker-credentials + secret: + secretName: harbor-plain + serviceAccountName: build-bot + timeout: 240h0m0s + params: + - name: image-name + value: "harbor.fizz.buzz/private/organic-clippy" + - name: path-to-image-context + value: docker/organic_clippy/ + - name: path-to-dockerfile + value: docker/organic_clippy/Dockerfile diff --git a/.lighthouse/triggers.yaml b/.lighthouse/triggers.yaml index 521b20c6..b63e382b 100644 --- a/.lighthouse/triggers.yaml +++ b/.lighthouse/triggers.yaml @@ -30,3 +30,10 @@ spec: skip_branches: # We already run on every commit, so running when the semver tags get pushed is causing needless double-processing. - "^v[0-9]+\\.[0-9]+\\.[0-9]+$" + - name: clippy + source: "pipeline-clippy.yaml" + # Override https-based url from lighthouse events. + clone_uri: "git@code.fizz.buzz:talexander/organic.git" + skip_branches: + # We already run on every commit, so running when the semver tags get pushed is causing needless double-processing. + - "^v[0-9]+\\.[0-9]+\\.[0-9]+$" diff --git a/Makefile b/Makefile index 465127dc..afb961bc 100644 --- a/Makefile +++ b/Makefile @@ -37,6 +37,10 @@ clean: format: > $(MAKE) -C docker/cargo_fmt run +.PHONY: dockerclippy +dockerclippy: +> $(MAKE) -C docker/organic_clippy run + .PHONY: clippy clippy: > cargo clippy --no-deps --all-targets --all-features -- -D warnings diff --git a/docker/organic_clippy/Dockerfile b/docker/organic_clippy/Dockerfile new file mode 100644 index 00000000..a064450c --- /dev/null +++ b/docker/organic_clippy/Dockerfile @@ -0,0 +1,5 @@ +FROM rustlang/rust:nightly-alpine3.17 + +RUN apk add --no-cache musl-dev + +ENTRYPOINT ["cargo", "clippy", "--no-deps", "--all-targets", "--all-features", "--", "-D", "warnings"] diff --git a/docker/organic_clippy/Makefile b/docker/organic_clippy/Makefile new file mode 100644 index 00000000..9546365a --- /dev/null +++ b/docker/organic_clippy/Makefile @@ -0,0 +1,37 @@ +IMAGE_NAME:=organic-clippy +# REMOTE_REPO:=harbor.fizz.buzz/private + +.PHONY: all +all: build push + +.PHONY: build +build: + docker build -t $(IMAGE_NAME) -f Dockerfile . + +.PHONY: push +push: +ifdef REMOTE_REPO + docker tag $(IMAGE_NAME) $(REMOTE_REPO)/$(IMAGE_NAME) + docker push $(REMOTE_REPO)/$(IMAGE_NAME) +else + @echo "REMOTE_REPO not defined, not pushing to a remote repo." +endif + +.PHONY: clean +clean: + docker rmi $(IMAGE_NAME) +ifdef REMOTE_REPO + docker rmi $(REMOTE_REPO)/$(IMAGE_NAME) +else + @echo "REMOTE_REPO not defined, not removing from remote repo." +endif + docker volume rm cargo-cache + +# NOTE: This target will write to folders underneath the git-root +.PHONY: run +run: build + docker run --rm --init --read-only --mount type=tmpfs,destination=/tmp -v "$$(readlink -f ../../):/source" --workdir=/source --mount source=cargo-cache,target=/usr/local/cargo/registry $(IMAGE_NAME) + +.PHONY: shell +shell: build + docker run --rm -i -t --entrypoint /bin/sh --mount type=tmpfs,destination=/tmp -v "$$(readlink -f ../../):/source" --workdir=/source --mount source=cargo-cache,target=/usr/local/cargo/registry $(IMAGE_NAME) diff --git a/src/parser/latex_environment.rs b/src/parser/latex_environment.rs index 11ccde2c..6503a66a 100644 --- a/src/parser/latex_environment.rs +++ b/src/parser/latex_environment.rs @@ -43,13 +43,8 @@ where let value_start = remaining; start_of_line(remaining)?; let (remaining, _leading_whitespace) = space0(remaining)?; - let (remaining, (_opening, name, _open_close_brace, _ws, _line_ending)) = tuple(( - tag_no_case(r#"\begin{"#), - name, - tag("}"), - space0, - line_ending, - ))(remaining)?; + let (remaining, (_opening, name, _open_close_brace, _ws, _line_ending)) = + tuple((tag_no_case(r"\begin{"), name, tag("}"), space0, line_ending))(remaining)?; let latex_environment_end_specialized = latex_environment_end(name.into()); let parser_context = ContextElement::ExitMatcherNode(ExitMatcherNode { @@ -127,7 +122,7 @@ fn _latex_environment_end<'b, 'g, 'r, 's, 'c>( start_of_line(input)?; let (remaining, _leading_whitespace) = space0(input)?; let (remaining, (_begin, _name, _close_brace, _ws, _line_ending)) = tuple(( - tag_no_case(r#"\end{"#), + tag_no_case(r"\end{"), tag_no_case(current_name_lower), tag("}"), space0, diff --git a/src/parser/line_break.rs b/src/parser/line_break.rs index 1d460f3d..fef89405 100644 --- a/src/parser/line_break.rs +++ b/src/parser/line_break.rs @@ -21,7 +21,7 @@ pub(crate) fn line_break<'b, 'g, 'r, 's>( input: OrgSource<'s>, ) -> Res, LineBreak<'s>> { let (remaining, _) = pre(context, input)?; - let (remaining, _) = tag(r#"\\"#)(remaining)?; + let (remaining, _) = tag(r"\\")(remaining)?; let (remaining, _) = recognize(many0(one_of(" \t")))(remaining)?; let (remaining, _) = line_ending(remaining)?; let source = get_consumed(input, remaining); diff --git a/src/parser/subscript_and_superscript.rs b/src/parser/subscript_and_superscript.rs index 64ebc7f0..0851ea74 100644 --- a/src/parser/subscript_and_superscript.rs +++ b/src/parser/subscript_and_superscript.rs @@ -175,7 +175,7 @@ fn script_alphanum<'b, 'g, 'r, 's>( #[cfg_attr(feature = "tracing", tracing::instrument(ret, level = "debug"))] fn script_alphanum_character<'s>(input: OrgSource<'s>) -> Res, OrgSource<'s>> { recognize(verify(anychar, |c| { - c.is_alphanumeric() || r#",.\"#.contains(*c) + c.is_alphanumeric() || r",.\".contains(*c) }))(input) } @@ -183,7 +183,7 @@ fn script_alphanum_character<'s>(input: OrgSource<'s>) -> Res, Org fn end_script_alphanum_character<'s>(input: OrgSource<'s>) -> Res, OrgSource<'s>> { let (remaining, final_char) = recognize(verify(anychar, |c| c.is_alphanumeric()))(input)?; peek(tuple(( - take_while(|c| r#",.\"#.contains(c)), + take_while(|c| r",.\".contains(c)), not(script_alphanum_character), )))(remaining)?; Ok((remaining, final_char))