Coder Social home page Coder Social logo

deeptho / rpmbuild Goto Github PK

View Code? Open in Web Editor NEW

This project forked from grindsa/rpmbuild

0.0 0.0 0.0 205 KB

A GitHub Action to build RPMs from source code and spec file, uses rpmbuild .

Home Page: https://github.com/marketplace/actions/rpm-build

License: GNU General Public License v3.0

JavaScript 3.86% TypeScript 78.51% Dockerfile 17.63%

rpmbuild's Introduction

GitHub Action - RPM Build

This GitHub Action builds RPMs from spec file and using repository contents as source (wraps the rpmbuild utility). Integrates easily with GitHub actions to allow RPMS to be uploaded as Artifact (actions/upload-artifact) or as Release Asset (actions/upload-release-asset).

Usage

Pre-requisites

Create a workflow .yml file in your repositories .github/workflows directory. An example workflow is available below. For more information, reference the GitHub Help Documentation for Creating a workflow file.

Note: You need to have a spec file in order to build RPM.

Inputs

  • spec_file: The path to the spec file in your repo. [required]
  • additional_repos: A list of additional repositories (in JSON-array format) that you want enabled to build your rpm. [optional]

Outputs

  • rpm_dir_path: path to RPMS directory
  • source_rpm_path: path to Source RPM file
  • source_rpm_dir_path: path to SRPMS directory
  • source_rpm_name: name of Source RPM file
  • rpm_content_type: Content-type for RPM Upload

This generated RPMS and SRPMS can be used in two ways.

  1. Upload as build artifact You can use GitHub Action @actions/upload-artifact
  2. Upload as Release assest If you want to upload as release asset ,You also will need to have a release to upload your asset to, which could be created programmatically by @actions/create-release as show in the example workflow.

Example workflow - build RPM

Basic:

name: RPM Build
on: push

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2

    - name: build RPM package
      id: rpm
      uses: naveenrajm7/rpmbuild@master
      with:
        spec_file: "cello.spec"
        additional_repos: "['centos-release-scl', 'http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm']"

    - name: Upload artifact
      uses: actions/[email protected]
      with:
        name: Binary RPM
        path: ${{ steps.rpm.outputs.rpm_dir_path }}

This workflow triggered on every push , builds RPM and Source RPM using cello.spec and contents of that git ref that triggered that action. Contents are retrived through GitHub API [downloaded through archive link].
The generated RPMs or SRPMS can be uploaded as artifacts by using actions/upload-artifact. The outputs given by rpmbuild action can be used to specify path for upload action.

Above workflow will create an artifact like :

artifact_image

Use with Release:

on:
    push:
      # Sequence of patterns matched against refs/tags
      tags:
        - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
  
name: Create RPM Release

jobs:
    build:
        name: Create RPM Release
        runs-on: ubuntu-latest

        steps:

        - name: Checkout code
          uses: actions/checkout@master

        - name: Create Release
          id: create_release
          uses: actions/create-release@latest
          env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # This token is provided by Actions, you do not need to create your own token
          with:
              tag_name: ${{ github.ref }}
              release_name: Release ${{ github.ref }}
              body: |
                Changes in this Release
                - Create RPM
                - Upload Source RPM
              draft: false
              prerelease: false
            
        - name: build RPM package
          id: rpm_build
          uses: naveenrajm7/rpmbuild@master
          with:
              spec_file: "cello.spec"
            
        - name: Upload Release Asset
          id: upload-release-asset 
          uses: actions/upload-release-asset@v1
          env:
              GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          with:
              upload_url: ${{ steps.create_release.outputs.upload_url }} # This pulls from the CREATE RELEASE step above, referencing it's ID to get its outputs object, which include a `upload_url`. See this blog post for more info: https://jasonet.co/posts/new-features-of-github-actions/#passing-data-to-future-steps 
              asset_path: ${{ steps.rpm_build.outputs.source_rpm_path }}
              asset_name: ${{ steps.rpm_build.outputs.source_rpm_name }}
              asset_content_type: ${{ steps.rpm_build.outputs.rpm_content_type }}

The above release uploads SRPM like :

artifact_image

Example Repository which uses rpmbuild action https://github.com/naveenrajm7/cello

Note on distribution: If your RPMs are distribution specific like el7 or el8.

  • Use naveenrajm7/rpmbuild@master for Centos7 [el7]
  • Use naveenrajm7/rpmbuild@centos8 for Centos8 [el8]
- name: build RPM package
    id: rpm_build
    uses: naveenrajm7/rpmbuild@centos8
    with:
        spec_file: "cello.spec"

Contribute

Feel free to contribute to this project. Read CONTRIBUTING Guide for more details.

References

License

The scripts and documentation in this project are released under the GNU GPLv3

Created during the GitHub Actions Hackathon 2020 :octocat: ๐Ÿ’ป .
Made it to the winner's list (See Row no. 291!) ๐Ÿ† ๐Ÿ…

rpmbuild's People

Contributors

naveenrajm7 avatar deeptho avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.