all repos — nifty @ d97e25c8e6a6bffb10759d288c96b26be1504d78

A tiny (pseudo) package manager and script runner.

Added CI, improvements.
h3rald h3rald@h3rald.com
Wed, 10 Nov 2021 12:31:30 +0100
commit

d97e25c8e6a6bffb10759d288c96b26be1504d78

parent

1a5463d368295a9b441f0ac6bad18be23293161a

A .github/workflows/add-artifacts-to-current-release.yml

@@ -0,0 +1,98 @@

+name: Add artifacts to current release + +# Controls when the action will run. +on: + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + release: + name: "Build and upload artifacts" + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: + - ubuntu-latest + - macos-latest + - windows-latest + + env: + CHOOSENIM_CHOOSE_VERSION: stable + CHOOSENIM_NO_ANALYTICS: 1 + + steps: + # Cancel other actions of the same type that might be already running + - name: "Cancel similar actions in progress" + uses: styfle/cancel-workflow-action@0.6.0 + with: + access_token: ${{ github.token }} + + # Detects OS and provide Nim-friendly OS identifiers + - name: Detect current OS + id: os + run: echo "::set-output name=id::${{matrix.os == 'ubuntu-latest' && 'linux' || matrix.os == 'macos-latest' && 'macosx' || matrix.os == 'windows-latest' && 'windows'}}" + + # Checks out the repository + - uses: actions/checkout@v2 + + # Installs libraries + - name: install musl-gcc + run: sudo apt-get install -y musl-tools + if: matrix.os == 'ubuntu-latest' + + # Sets path (Linux, macOS) + - name: Update $PATH + run: echo "$HOME/.nimble/bin" >> $GITHUB_PATH + if: matrix.os == 'macos-latest' || matrix.os == 'ubuntu-latest' + + # Sets path (Windows) + - name: Update %PATH% + run: echo "${HOME}/.nimble/bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append + if: matrix.os == 'windows-latest' + + # Install the Nim compiler + - name: Install Nim + run: | + curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh + sh init.sh -y + + # Build for Linux + - name: Build (Linux) + run: nimble build -y -d:release --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc --gc:orc --opt:size nifty + if: matrix.os == 'ubuntu-latest' + + # Build for macOS/Windows + - name: Build (macOS, Windows) + run: nimble build -y -d:release --gc:orc --opt:size nifty + if: matrix.os == 'macos-latest' || matrix.os == 'windows-latest' + + # Retrieve ID and Name of the current (draft) release + - name: "Get current release" + id: current-release + uses: InsonusK/get-latest-release@v1.0.1 + with: + myToken: ${{ github.token }} + exclude_types: "release" + view_top: 1 + + # Package the resulting Linux/macOS binary + - name: Create artifact (Linux, macOS) + run: zip nifty_${{steps.current-release.outputs.tag_name}}_${{steps.os.outputs.id}}_x64.zip nifty + if: matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' + + # Package the resulting Windows binary + - name: Create artifact (Windows) + run: Compress-Archive -Path nifty.exe -DestinationPath nifty_${{steps.current-release.outputs.tag_name}}_windows_x64.zip + if: matrix.os == 'windows-latest' + + # Upload artifacts to current draft release + - name: "Upload to current release" + uses: xresloader/upload-to-github-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + file: "nifty_v*.zip" + overwrite: true + tag_name: ${{steps.current-release.outputs.tag_name}} + release_id: ${{steps.current-release.outputs.id }} + verbose: true
A .github/workflows/ci.yml

@@ -0,0 +1,44 @@

+name: CI + +# Controls when the action will run. +on: + # Triggers the workflow on push or pull request events but only for the master branch + push: + branches: [master] + tags-ignore: ["**"] + pull_request: + branches: [master] + tags-ignore: ["**"] + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +# A workflow run is made up of one or more jobs that can run sequentially or in parallel +jobs: + # This workflow contains a single job called "ci" + ci: + # The type of runner that the job will run on + runs-on: ubuntu-latest + env: + CHOOSENIM_CHOOSE_VERSION: stable + CHOOSENIM_NO_ANALYTICS: 1 + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + + - name: install musl-gcc + run: sudo apt-get install -y musl-tools + + - name: Update $PATH + run: echo "$HOME/.nimble/bin" >> $GITHUB_PATH + + - name: Install Nim + run: | + curl https://nim-lang.org/choosenim/init.sh -sSf > init.sh + sh init.sh -y + + - name: Build + run: | + nimble build -y -d:release --gcc.exe:musl-gcc --gcc.linkerexe:musl-gcc
M README.mdREADME.md

@@ -1,8 +1,7 @@

-[![Nimble](https://raw.githubusercontent.com/yglukhov/nimble-tag/master/nimble.png)](https://github.com/h3rald/nifty) +[![Nimble](https://raw.githubusercontent.com/yglukhov/nimble-tag/master/nimble.png)](https://nimble.directory/pkg/nifty) -![nim](https://img.shields.io/badge/nim-powered-yellow.svg?link=https://nim-lang-org) -[![Release](https://img.shields.io/github/release/h3rald/nifty.svg)](https://github.com/h3rald/nifty) -[![License](https://img.shields.io/badge/license-MIT-blue.svg)](https://raw.githubusercontent.com/h3rald/nifty/master/LICENSE) +[![Release](https://img.shields.io/github/release/h3rald/nifty.svg)](https://github.com/h3rald/nifty/releases/latest) +[![License](https://img.shields.io/github/license/h3rald/nifty.svg)](https://raw.githubusercontent.com/h3rald/nifty/master/LICENSE) # Nifty
M src/nifty.nim.cfgsrc/nifty.nim.cfg

@@ -1,12 +1,15 @@

-# https://blog.filippo.io/easy-windows-and-linux-cross-compilers-for-macos/ - - -# https://gist.github.com/Drakulix/9881160 -amd64.windows.gcc.path = "/usr/local/bin" -amd64.windows.gcc.exe = "x86_64-w64-mingw32-gcc" -amd64.windows.gcc.linkerexe = "x86_64-w64-mingw32-gcc" - -# http://crossgcc.rts-software.org/doku.php?id=compiling_for_linux -amd64.linux.gcc.path = "/usr/local/bin" -amd64.linux.gcc.exe = "x86_64-linux-musl-gcc" -amd64.linux.gcc.linkerexe = "x86_64-linux-musl-gcc" +# https://blog.filippo.io/easy-windows-and-linux-cross-compilers-for-macos/ + + +# https://gist.github.com/Drakulix/9881160 +amd64.windows.gcc.path = "/usr/local/bin" +amd64.windows.gcc.exe = "x86_64-w64-mingw32-gcc" +amd64.windows.gcc.linkerexe = "x86_64-w64-mingw32-gcc" + +# http://crossgcc.rts-software.org/doku.php?id=compiling_for_linux +amd64.linux.gcc.path = "/usr/local/bin" +amd64.linux.gcc.exe = "x86_64-linux-musl-gcc" +amd64.linux.gcc.linkerexe = "x86_64-linux-musl-gcc" + +--gc = "orc" +--opt = "size"
M src/niftypkg/minimline.nimsrc/niftypkg/minimline.nim

@@ -1,8 +1,9 @@

import critbits, - terminal + terminal, + std/exitprocs -system.addQuitProc(resetAttributes) +addExitProc(resetAttributes) when defined(windows): proc getchr*(): cint {.header: "<conio.h>", importc: "_getch".}
M src/niftypkg/niftylogger.nimsrc/niftypkg/niftylogger.nim

@@ -1,71 +1,72 @@

-import - logging, - strutils, - terminal - -system.addQuitProc(resetAttributes) - -type - NiftyLogger* = ref object of Logger - -proc logPrefix*(level: Level): tuple[msg: string, color: ForegroundColor] = - case level: - of lvlDebug: - return ("---", fgMagenta) - of lvlInfo: - return ("(i)", fgCyan) - of lvlNotice: - return (" ", fgWhite) - of lvlWarn: - return ("(!)", fgYellow) - of lvlError: - return ("(!)", fgRed) - of lvlFatal: - return ("(x)", fgRed) - else: - return (" ", fgWhite) - -method log*(logger: NiftyLogger; level: Level; args: varargs[string, `$`]) = - var f = stdout - if level >= getLogFilter() and level >= logger.levelThreshold: - if level >= lvlWarn: - f = stderr - let ln = substituteLog(logger.fmtStr, level, args) - let prefix = level.logPrefix() - f.setForegroundColor(prefix.color) - f.write(prefix.msg) - f.write(ln) - resetAttributes() - f.write("\n") - if level in {lvlError, lvlFatal}: flushFile(f) - -proc newNiftyLogger*(levelThreshold = lvlAll; fmtStr = " "): NiftyLogger = - new result - result.fmtStr = fmtStr - result.levelThreshold = levelThreshold - -proc getLogLevel*(): string = - return LevelNames[getLogFilter()].toLowerAscii - -proc setLogLevel*(val: var string): string {.discardable.} = - var lvl: Level - case val: - of "debug": - lvl = lvlDebug - of "info": - lvl = lvlInfo - of "notice": - lvl = lvlNotice - of "warn": - lvl = lvlWarn - of "error": - lvl = lvlError - of "fatal": - lvl = lvlFatal - of "none": - lvl = lvlNone - else: - val = "warn" - lvl = lvlWarn - setLogFilter(lvl) - return val +import + logging, + strutils, + terminal, + std/exitprocs + +addExitProc(resetAttributes) + +type + NiftyLogger* = ref object of Logger + +proc logPrefix*(level: Level): tuple[msg: string, color: ForegroundColor] = + case level: + of lvlDebug: + return ("---", fgMagenta) + of lvlInfo: + return ("(i)", fgCyan) + of lvlNotice: + return (" ", fgWhite) + of lvlWarn: + return ("(!)", fgYellow) + of lvlError: + return ("(!)", fgRed) + of lvlFatal: + return ("(x)", fgRed) + else: + return (" ", fgWhite) + +method log*(logger: NiftyLogger; level: Level; args: varargs[string, `$`]) = + var f = stdout + if level >= getLogFilter() and level >= logger.levelThreshold: + if level >= lvlWarn: + f = stderr + let ln = substituteLog(logger.fmtStr, level, args) + let prefix = level.logPrefix() + f.setForegroundColor(prefix.color) + f.write(prefix.msg) + f.write(ln) + resetAttributes() + f.write("\n") + if level in {lvlError, lvlFatal}: flushFile(f) + +proc newNiftyLogger*(levelThreshold = lvlAll; fmtStr = " "): NiftyLogger = + new result + result.fmtStr = fmtStr + result.levelThreshold = levelThreshold + +proc getLogLevel*(): string = + return LevelNames[getLogFilter()].toLowerAscii + +proc setLogLevel*(val: var string): string {.discardable.} = + var lvl: Level + case val: + of "debug": + lvl = lvlDebug + of "info": + lvl = lvlInfo + of "notice": + lvl = lvlNotice + of "warn": + lvl = lvlWarn + of "error": + lvl = lvlError + of "fatal": + lvl = lvlFatal + of "none": + lvl = lvlNone + else: + val = "warn" + lvl = lvlWarn + setLogFilter(lvl) + return val