Content Operations

How to Automate Website Publishing with GitHub

Design a reviewable GitHub publishing workflow for approved articles, with repository rules, validation, deployment checks, ownership, and recovery steps.

18 min read
On this page

An approved article should not reach a live website merely because someone changed a file. The practical task is to define a controlled path from an approved content change in a GitHub repository to a verified website update, with clear points where people can stop the release.

This guide shows how to design that path with GitHub Actions. It covers the repository contract, trigger and branch choices, content and build validation, safe testing, ownership, release records, and recovery. The examples are illustrative: your website framework, hosting setup, directory structure, and deployment permissions determine the exact configuration.

The goal is not to automate every repository change. It is to create a bounded workflow for one article type, one repository, and one explicitly approved publishing path. A successful build proves that the site can be generated and deployed; it does not prove that the article’s claims, URL, editorial quality, or business context are correct.

Define the publication boundary before automating it

Start by deciding what the workflow is allowed to publish and what remains outside its scope. Without that boundary, a deployment trigger can turn an unfinished draft, an unrelated code change, or an accidental file move into a production event.

A useful boundary answers five questions:

  • What is the source? Identify the website repository and the content location that the workflow is allowed to read.

  • What is the unit of publication? Decide whether the first workflow handles one article file, a group of approved articles, or a broader site build.

  • What counts as approval? Define the signal that distinguishes an approved article from a draft, such as an approved pull request or a merge into a designated publishing path.

  • What is the release destination? Name the production environment or release path without assuming that every hosting setup supports previews, staged releases, or rollback.

  • What ends the first implementation? Set a stopping condition before work begins.

For a first batch, a reasonable stopping condition might be: one article format, one repository, one publishing branch, one non-critical test path, and one approved article commit. That is not a universal recommendation. It is a way to keep the first operational test small enough to inspect.

Separate the stages that people often collapse

Content approval, technical validation, deployment authorization, and post-publication review are different decisions. They may happen close together, but a single green status should not represent all of them.

A content reviewer may approve the article’s audience, claims, structure, and URL. A repository owner may verify that the files follow the site’s conventions. An automated workflow may check metadata, links, and build output. A release owner may authorize a production deployment. Someone else may confirm that the live page renders as expected.

Those responsibilities can belong to one person on a small team, but the decisions should remain visible. Combining roles for convenience is different from hiding the stages entirely.

LUUMERA fits upstream of this boundary. LUUMERA prioritizes opportunities and schedules what to create next. That can help a lean team select work before repository activity begins, but a selected opportunity is not automatically an approved publication. The team still needs to review the article, confirm its URL and business context, and authorize the repository change.

Create a compact ownership record

Write down the owners before configuring the workflow. The record can be a small document in the repository or in the team’s existing operating notes.

ResponsibilityOwnerDecision or output
Content selectionSEO or content ownerWhy this article is being considered and what searcher job it addresses
Editorial approvalNamed reviewerClaims, audience, structure, tone, and publication readiness
Repository reviewRepository owner or technical reviewerFile location, metadata, assets, URL behavior, and scope of change
Workflow maintenanceTechnical ownerValidation logic, dependencies, permissions, and failure handling
Release authorizationDesignated release ownerWhether the approved change may affect the live site
Post-release reviewContent or site ownerWhether the live output matches the approved change and what follows

On a lean team, one person may hold several rows. Record that explicitly, along with the conditions that require a second review—for example, a redirect, a product claim, a change to an existing URL, or a repository change outside the article directory.

For a broader end-to-end view of how opportunity selection, approval, publishing, and review fit together, see the SEO content workflow for lean teams. The GitHub workflow is one implementation stage inside that larger operating process.

Establish the repository contract for approved articles

Automation needs predictable inputs. A repository contract defines what an acceptable article change looks like before a workflow attempts to build or publish it.

The contract should be specific to the selected website setup. Do not copy a directory, front matter schema, or build command from another project and treat it as universal. First inspect how the target repository currently represents articles and how it generates website output.

Document the source file and metadata rules

For the first article type, record at least:

  • The expected file format, such as the Markdown variant already accepted by the site.

  • The directory or directories in which the workflow expects article files.

  • Required metadata fields, including the fields needed for title, description, publication date, author, slug, or other site-specific rendering behavior.

  • The allowed format for slugs and the relationship between a slug and the public URL.

  • Whether an article may add, modify, or reference assets, and where those assets must live.

  • Whether a change to an existing article follows the same approval path as a new article.

  • Which files are outside the publication scope and should cause a review or fail the workflow.

Some rules can be checked mechanically. Others need a human decision. A metadata field may exist but still contain a misleading title. A slug may be syntactically valid but conflict with an existing page. A link may resolve while pointing readers to the wrong destination.

Use an illustrative repository contract

The following is a hypothetical example, not a claim about the structure of any particular website:

content/articles/<slug>.md

Required metadata:
- title
- description
- slug
- publication status

Allowed article change:
- one new article file under content/articles/
- explicitly approved supporting assets

Approval signal:
- reviewer-approved pull request merged through the designated publishing path

The exact field names, directory, and approval signal must be replaced with the target repository’s rules. The purpose of the example is to show the level of precision needed. “Put the post in GitHub” is not enough for a reliable workflow; the workflow needs to know what it should find and what it should reject.

Distinguish draft signals from approval signals

A commit proves that a change exists. It does not prove that the change is approved. Decide which repository event carries approval and document it in contributor guidance.

Possible patterns include:

  • Pull-request validation: Every proposed change is checked before it can be merged. This is useful for finding errors early, but it should not be treated as production publication by itself.

  • Merge to a designated publishing branch: A merge can represent the team’s approved release input when branch protections and review rules support that interpretation.

  • Manual release after validation: The repository change can pass checks first, while a release owner explicitly starts or approves the production step.

The right choice depends on the repository, team, and hosting environment. The important distinction is between eligible for review, approved for release, and successfully deployed.

Check for accidental scope expansion

The workflow should identify changes that do not belong to the first batch. Examples include:

  • A file outside the selected article directory.

  • A deletion or rename that changes an existing public URL.

  • A new asset type that the build does not support.

  • A configuration, dependency, or deployment-file change submitted with the article.

  • A metadata change that affects multiple pages.

  • A change to a template or shared component that could alter unrelated output.

These conditions do not always mean “reject forever.” They mean the change needs a different review path or an explicit decision. A conservative workflow can stop and ask for that decision rather than guessing.

Design the GitHub Actions workflow in reviewable stages

Once the repository contract is defined, translate it into named stages. Avoid starting with a generic automation recipe. Start with the inputs, outputs, owner, and failure action for each stage.

Map the workflow from trigger to result

A conceptual sequence might look like this:

  1. Trigger: Receive the repository event that is eligible for validation or release.

  2. Source preparation: Identify the commit and obtain the repository contents required for the checks.

  3. Dependency and environment setup: Prepare the environment required by the site’s build process.

  4. Scope check: Confirm that the changed files match the approved publication boundary.

  5. Content and metadata validation: Check the article’s file structure and required fields.

  6. Site build: Generate the website output using the repository’s configured process.

  7. Output inspection: Check that the expected article output exists and that the build did not produce an unexpected result.

  8. Deployment authorization: Apply the required approval or protected-environment decision before production changes.

  9. Deployment: Send the approved build or release to the configured destination.

  10. Notification and record: Preserve the commit, checks, result, owner, and follow-up action.

Not every site will use every stage in the same way. The sequence is a design model that makes hidden assumptions visible.

StageInputOwnerApproval pointOutputFailure action
TriggerRepository eventRepository ownerConfirm event is in scopeIdentified commitStop if event is not an approved signal
Scope checkChanged-file listTechnical reviewerConfirm intended filesIn-scope change recordRequest review for unrelated changes
Content checksArticle and metadataContent and workflow ownersContent approval remains humanValidation resultCorrect the file or return it for review
BuildRepository and dependenciesWorkflow ownerTechnical readinessGenerated site outputPreserve logs and investigate the build error
Deployment gateValidated outputRelease ownerExplicit production authorizationRelease decisionDo not deploy; record the reason
DeploymentApproved outputDeployment ownerEnvironment permissionLive-site update or failureFollow the documented recovery path
Post-release reviewLive page and run recordContent or site ownerConfirm expected resultReview note and follow-upCorrect, roll back, or postpone further action

Compare trigger and release choices by risk

A pull-request check, a merge-based deployment, and a manually approved release solve different problems. Compare them by the evidence they produce and the remaining work for the team, not by how little configuration they appear to require.

ApproachEvidence it providesRemaining team effortMain risk to examine
Pull-request validationWhether the proposed change passes defined checks before mergeReview and merge decision still requiredA green check may be mistaken for editorial or production approval
Merge to publishing branchA single repository event that can represent an approved release inputBranch governance and review discipline requiredAn overly broad branch may include unrelated changes
Manual release after validationA visible production authorization after checks completeMore deliberate release workManual steps can become inconsistent if they are not recorded

This comparison is deliberately non-prescriptive. The selected event, branch protection, environment approval, and permissions must be confirmed against the actual repository and hosting setup. Do not infer those settings from the existence of a workflow file.

Name inputs, outputs, and failure conditions

For each stage, document what it receives and what it is expected to produce. For example:

  • Input: Commit identifier and changed-file list. Output: A scope decision. Failure: Unapproved files are present.

  • Input: Article file. Output: Parsed metadata and validation result. Failure: Required data is missing or malformed.

  • Input: Repository at the selected commit. Output: Build output. Failure: The site cannot be generated.

  • Input: Validated build. Output: Deployment decision. Failure: No authorized production release exists.

  • Input: Deployment result. Output: Run record and post-release task. Failure: The live result cannot be confirmed.

This makes the workflow easier to review than a single opaque script. It also gives the team a place to ask whether a failure should block publication, create a warning, or require human interpretation.

Add content, technical, and deployment checks before release

The checks should be proportionate to the first implementation batch. They should catch predictable errors without pretending that automated validation can judge every editorial or business decision.

Build a pre-release checklist

A practical checklist can include the following groups:

Article presence and scope

  • Is the intended article file present at the expected location?

  • Does the changed-file list match the approved change?

  • Are any unrelated files added, deleted, renamed, or modified?

  • Does the change affect an existing URL or shared site component?

Metadata and URL behavior

  • Are the required metadata fields present and parseable?

  • Does the title and description follow the repository’s content rules?

  • Is the slug valid under the site’s documented URL convention?

  • Does the proposed URL already exist or conflict with another path?

  • Does a URL change require a separate redirect or technical review?

Content and links

  • Does the article render without malformed Markdown or unsupported syntax?

  • Do internal links use the intended paths and anchors?

  • Are references to assets valid and included in the approved change?

  • Does the rendered output preserve headings, lists, emphasis, and other required elements?

Build and output

  • Does the site build complete using the repository’s documented process?

  • Is the expected article output generated?

  • Are there warnings that require review even if the build exits successfully?

  • Did the build change output outside the intended scope?

Release readiness

  • Is editorial approval recorded?

  • Has a release owner authorized the production change?

  • Are the commit identifier and validation results retained?

  • Is the recovery path known before deployment begins?

A checklist is not a substitute for site-specific rules. The required metadata, build command, output location, and asset behavior must be confirmed in the chosen repository. Avoid inventing universal limits for link counts, article length, warnings, or publishing frequency.

Separate automated flags from human decisions

Automation can flag that a slug is duplicated. It cannot decide whether the correct action is to change the slug, consolidate two pages, preserve the existing URL, or create a redirect. That decision belongs to the relevant content and technical owners.

Automation can identify a missing description. A reviewer still needs to decide whether the proposed description accurately represents the article and its intended audience. It can detect a broken internal path, but a person may need to determine whether the link should be replaced, removed, or postponed.

Keep these decisions visible near the release gate:

  • Product claims and factual assertions require editorial review.

  • New URLs and changes to existing URLs require content and technical review.

  • Redirects require an explicit implementation decision.

  • Changes outside the approved article scope require a broader review.

  • A green build does not authorize publication by itself.

For a more detailed method for reconciling internal-link findings with page inventories and editorial decisions, see how to audit internal links across your website. The same principle applies here: treat automated output as evidence to inspect, not as an instruction to make every suggested change.

Retain evidence for every run

A useful run record does not need to be elaborate. It should allow another team member to understand what happened without reconstructing the entire event from memory.

Record:

  • Article identifier and proposed URL.

  • Commit identifier and repository path.

  • Approval reference and reviewer.

  • Changed-file scope result.

  • Content and metadata validation result.

  • Build result and relevant warnings.

  • Deployment authorization and release owner.

  • Deployment result and environment.

  • Post-release check, unresolved issue, and next action.

The exact storage location depends on the team’s existing process. The requirement is traceability: a successful deployment should be connected to the approved content and the checks that preceded it.

Test the workflow without making a live change

Do not enable production deployment as the first test. The initial run should reveal whether the repository contract, checks, build process, permissions, and team responsibilities match reality.

Choose a deliberately bounded test change

Use one article type and a change that the team can inspect fully. A preview or non-live environment may be appropriate if the hosting setup supports one, but do not assume that it does. If no preview path exists, the team can still test validation and build stages without authorizing the final deployment stage.

Before running the test, write down the expected result:

  • Which event should start the workflow?

  • Which files should it detect?

  • Which checks should pass?

  • Which output should be generated?

  • Which stage should require human approval?

  • What evidence should appear in the run record?

Then compare the observed run with that expectation. A test is not complete merely because the workflow finishes without an obvious error.

Test deliberate failure cases

A controlled failure is useful because it shows whether the workflow stops in the right place and gives the team enough information to respond. Test cases may include:

  • Missing required metadata.

  • Invalid metadata syntax.

  • An incorrect or duplicate path.

  • A malformed content file.

  • A missing or unsupported asset.

  • A build error.

  • A changed file outside the approved article directory.

  • A deployment authorization that has not been granted.

  • A live result that does not match the expected output.

The precise test syntax depends on the repository and selected validation tools. Do not add a tool solely because it is common elsewhere. First establish what the site already uses, what it can reliably check, and what evidence the team needs.

Define a pass and a stopping rule

The test passes when the team can explain each stage, observe the expected result, and identify the owner of any failure. It does not pass simply because the article appears somewhere or because a build command exits successfully.

Stop rather than patch blindly when:

  • The workflow changes files outside its documented scope.

  • The trigger cannot distinguish an approved release from a draft change.

  • The build output cannot be tied to the tested commit.

  • Production permissions are broader than the intended release boundary.

  • The team cannot identify how to recover from an incorrect publication.

  • A warning affects URL behavior, content rendering, or unrelated pages and no owner has reviewed it.

After a successful non-live test, require explicit confirmation before enabling the production deployment path. Keep the first live batch small enough that the post-release result can be checked promptly.

Operate, review, and recover after publication

A publishing workflow is an operating process, not only a configuration file. It needs ownership after the deployment step and a response for the cases where the live result is wrong or incomplete.

Assign post-deployment checks

The post-release review should compare the approved change, generated output, and live page. Depending on the site, check:

  • Whether the expected page is available at the intended URL.

  • Whether the title, description, headings, links, and content render as approved.

  • Whether assets load and appear in the correct context.

  • Whether the page is connected to the intended internal-link architecture.

  • Whether the repository commit and live output correspond to the same approved change.

  • Whether an unexpected URL, template, or unrelated page changed.

These checks confirm the release result; they do not establish search performance or guarantee any organic outcome. Search and site evidence can inform later decisions, but they should not be converted into automatic instructions to create more pages.

Document recovery paths before they are needed

The response depends on what went wrong. Record the owner and next action for at least these cases:

SituationImmediate questionPossible next action
Build failsIs the failure caused by the article, repository, dependency, or environment?Correct the source or workflow, then rerun the appropriate validation
Deployment failsDid the live site remain unchanged, change partially, or report an unknown result?Confirm the environment state and follow the hosting-specific recovery process
Incorrect article contentIs the issue editorial, rendering-related, or caused by the wrong commit?Stop further releases, correct or revert the approved source, and recheck
Unexpected URL changeWas a path renamed, duplicated, or generated differently than expected?Pause publication and obtain explicit URL or redirect review
Unintended repository changeDid the commit include files outside the approved scope?Return the change for review or separate the release into bounded commits
Need to reverse the releaseIs a rollback supported and understood in this setup?Use the documented corrective commit or hosting-specific rollback path

Do not claim that rollback, atomic release, staged deployment, or deployment status reporting is available until the target hosting setup has been checked. If those capabilities are unavailable, document the corrective-commit process instead.

Keep a lightweight release record

For each publication, retain a short record with:

  • The approved article and commit.

  • The reviewer and release owner.

  • The checks that ran and their results.

  • Any warnings accepted and why.

  • The deployment outcome.

  • The post-release check.

  • Any corrective action or follow-up review.

This record supports troubleshooting and makes the workflow easier to improve. It also prevents a team from confusing a technically successful deployment with a fully reviewed content decision.

Decide what comes next instead of expanding automatically

After publication, review the evidence and the original searcher job. A new article, a related internal link, or a revision may be appropriate, but none should be automatic merely because the first deployment succeeded.

Use a bounded action label:

  • Improve: Revise an existing page when it already serves the job but needs clearer content, links, or structure.

  • Create: Add a new page only when the evidence and business context support a distinct purpose that existing URLs do not cover.

  • Consolidate: Combine overlapping pages or clarify their roles when multiple URLs serve the same job.

  • Investigate: Gather more evidence when the signal is ambiguous or the technical result is uncertain.

  • Postpone: Defer work when the expected value, ownership, or implementation path is not yet clear.

The label is a decision record, not a promise about traffic or rankings.

Use LUUMERA upstream of the GitHub release gate

A GitHub deployment workflow solves a repository and release problem. It does not decide which opportunity deserves a page, whether an article is accurate, or whether a new URL is the right answer.

LUUMERA can support the upstream content workflow. LUUMERA creates articles using SEO research, business context, and editorial style. The resulting article should still be reviewed against the team’s editorial, product, technical, and business requirements before it becomes a release candidate.

LUUMERA connects to GitHub and publishes approved articles by committing them directly to a site repository. In this workflow, that approved commit is an input to the repository contract and release controls—not permission to publish every detected opportunity or every repository change. The GitHub workflow should still validate scope, build the site, apply the required release authorization, and preserve a run record.

Make the handoff explicit

A reviewable handoff can follow this sequence:

  1. Select an SEO opportunity and define the searcher job.

  2. Decide whether the appropriate action is Improve, Create, Consolidate, Investigate, or Postpone.

  3. If creating or improving, review the article’s business context, claims, audience, URL, and internal-link role.

  4. Approve the article for the selected repository path.

  5. Commit or merge it using the repository’s documented approval signal.

  6. Run scope, content, metadata, link, build, and output checks.

  7. Apply the production release gate.

  8. Confirm the live result and record any follow-up.

The handoff keeps product-supported content work separate from deployment authorization. It also gives the team a place to stop when a generated article needs revision or when the proposed URL conflicts with an existing page.

Clarify which system controls which decision

Workflow concernLUUMERA can supportGitHub workflow controlsHuman approval remains necessary for
Opportunity selectionPrioritizing opportunities and scheduling what to create nextNot applicable unless recorded in the repository processWhether the opportunity fits the business and content plan
Article preparationCreating articles using SEO research, business context, and editorial styleReceiving the approved source changeClaims, quality, audience, and publication readiness
Repository handoffPublishing approved articles by committing them directly to a site repositoryScope, metadata, build, and deployment stagesWhether the commit is approved for the intended release
URL and page changesProviding workflow support around selected contentDetecting configured path or build conditionsNew URLs, redirects, consolidation, and technical impact
Live releaseNo assumption of unreviewed publicationApplying the configured release gate and deployment processProduction authorization and post-release confirmation

This division avoids a common category error: treating content generation, repository modification, and production deployment as one decision. They are related stages with different risks and owners.

The smallest defensible next action

Document the repository contract for one article type before writing a general publishing workflow. Include the expected file location, metadata fields, slug and URL rules, asset behavior, approved-change signal, allowed scope, and named owners.

Then test one approved article commit through a non-live workflow. Record the expected trigger, validation results, build output, failure behavior, and evidence required for release. Do not enable live deployment until the team can explain where editorial approval ends, where technical validation begins, who authorizes production, and how an incorrect publication will be corrected.

That bounded test is enough to expose the first important gaps. If it succeeds, review the run record and decide whether to improve the workflow, create the next small batch, consolidate overlapping process steps, investigate an unresolved failure, or postpone expansion. Automation should make that decision easier to review—not remove the need to make it.

LUUMERA – AI SEO AGENT

Turn SEO into a process that runs without you.

LUUMERA finds what deserves your attention and turns organic growth into a repeatable workflow — from research to published content. Start with your website.