github.com/upcmd/up@v0.8.1-0.20230108151705-ad8b797bf04f/up.yml (about)

     1  
     2  version: 1.0.0
     3  
     4  vars:
     5    ver_yq: v3.3.2
     6    release_api_ep: https://api.github.com/repos/upcmd/up/releases
     7    release_upload_ep: https://uploads.github.com/repos/upcmd/up/releases
     8  
     9    dists_for_latest:
    10      - os: darwin
    11        arch: amd64
    12      - os: darwin
    13        arch: arm64
    14      - os: linux
    15        arch: amd64
    16      - os: windows
    17        arch: amd64
    18  
    19    license_header: |
    20      // Ultimate Provisioner: UP cmd
    21      // Copyright (c) 2019 Stephen Cheng and contributors
    22  
    23      /* This Source Code Form is subject to the terms of the Mozilla Public
    24       * License, v. 2.0. If a copy of the MPL was not distributed with this
    25       * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
    26  
    27    latest_tagged_version: 0.9.1
    28  
    29    version_gofile_template: |
    30      package main
    31      var version_info = `{{.TRACEABLE_VERSION_MARKER}}`
    32  
    33    version_template: |
    34  
    35      version_info:
    36        Type: {{.releaseType}}
    37        Tag: {{.releaseTag}}
    38        Vesion: {{.releaseVersion}}
    39        SHA: {{.releaseSHA}}
    40        Source: https://github.com/upcmd/up/tree/{{.releaseSHA}}
    41        ReleaseDate: {{now|date "20060102"}}
    42        Changes: |
    43      {{.releaseNote | indent 4}}
    44  
    45    rolling_version_notes: |
    46      bleeding-edge rolling release
    47      based on {{.latest_tagged_version}} with updates
    48      full regression tested and stable
    49      {{ printf "./release/rolling/%s.md" .releaseDate |fileContent}}
    50  
    51    rolling_version_template: |
    52  
    53      version_info:
    54        Type: bleeding-edge-rolling
    55        Tag: master
    56        Vesion: rolling-{{now|date "20060102"}}
    57        SHA: {{.releaseSHA}}
    58        Source: https://github.com/upcmd/up/tree/{{.releaseSHA}}
    59        ReleaseDate: {{now|date "20060102"}}
    60        BaseOn: {{.latest_tagged_version}} with updates
    61  
    62    latest_version_notes: |
    63      latest bleeding-edge release
    64      based on {{.latest_tagged_version}} with updates
    65      full regression tested and stable
    66      {{ printf "./release/rolling/%s.md" .releaseDate |fileContent}}
    67  
    68    latest_version_template: |
    69  
    70      version_info:
    71        Type: bleeding-edge-latest
    72        Tag: master
    73        Vesion: latest
    74        SHA: {{.releaseSHA}}
    75        Source: https://github.com/upcmd/up/tree/{{.releaseSHA}}
    76        ReleaseDate: {{now|date "20060102"}}
    77        BaseOn: {{.latest_tagged_version}} with updates
    78  
    79  dvars:
    80    - name: releaseDate
    81      value: '{{now|date "20060102"}}'
    82    - name: rolling_version_notes
    83      value: '{{.rolling_version_notes}}'
    84      expand: 2
    85    - name: latest_version_notes
    86      value: '{{.latest_version_notes}}'
    87      expand: 2
    88  
    89  tasks:
    90    -
    91      name: deps
    92      desc: update key deps
    93      task:
    94        -
    95          func: shell
    96          do:
    97            - go list -m -versions github.com/upcmd/yq/v3
    98            - 'go get github.com/upcmd/yq/v3@{{.ver_yq}}'
    99    -
   100      name: facts
   101      desc: gather facts
   102      task:
   103        -
   104          func: shell
   105          do:
   106            - uname
   107          reg: result
   108  
   109        - func: cmd
   110          desc: get os  - [Darwin | Linux]
   111          dvars:
   112            - name: os
   113              value: '{{ .result.Output }}'
   114              flags:
   115                - v
   116          do:
   117            - name: print
   118              cmd: 'OS: {{.os}}'
   119            - name: return
   120              cmd:
   121                - os
   122  
   123    -
   124      name: Publish_untagged
   125      desc: publish both rolling and latest releases
   126      task:
   127        - func: call
   128          do:
   129            - Publish_rolling
   130            - Publish_latest
   131  
   132    -
   133      name: Publish_latest
   134      desc: build the latest bleeding-edge release
   135      task:
   136        -
   137          func: shell
   138          do: git rev-parse --verify HEAD
   139  
   140        -
   141          func: cmd
   142          dvars:
   143            - name: releaseSHA
   144              value: '{{ .last_result.Output }}'
   145              flags: [taskScope]
   146          do:
   147            - name: print
   148              cmd: |
   149                SHA: {{.releaseSHA}}
   150  
   151        - func: cmd
   152          desc: |
   153            get the release version info
   154          dvars:
   155            - name: TRACEABLE_VERSION_MARKER
   156              value: '{{.latest_version_template}}'
   157              expand: 2
   158              flags:
   159                - v
   160            - name: version_gofile_content
   161              value: '{{.version_gofile_template}}'
   162              expand: 2
   163              flags:
   164                - v
   165  
   166          do:
   167            - name: print
   168            - name: print
   169              desc: go version file
   170              cmd: |
   171                {{.version_gofile_content}}
   172            - name: writeFile
   173              desc: prepare the release info to be built into binary
   174              cmd:
   175                content: "{{.version_gofile_content}}"
   176                filename: version.go
   177                dir: ./app/up
   178  
   179            - namex: inspect
   180              cmd:
   181                - exec_vars
   182  
   183            - namex: pause
   184              desc: double check release note
   185  
   186            - namex: exit
   187  
   188        -
   189          func: call
   190          desc: build only the common distros
   191          vars:
   192            ver: latest
   193          dvars:
   194            - name: distlist
   195              value: |
   196                {{ range $idx, $dist := .dists_for_latest -}}
   197                {{- with $dist }}
   198                - {{ .os}}/{{.arch -}}
   199                {{end}}
   200                {{end}}
   201              flags:
   202                - toObj
   203                - keepName
   204                - v
   205          do: buildDistro
   206  
   207        - func: shell
   208          desc: enquire the latest release
   209          do:
   210            - curl -s https://api.github.com/repos/upcmd/up/releases/tags/latest
   211          reg: result
   212  
   213        - func: shell
   214          desc: delete the latest release remotely if it exists
   215          dvars:
   216            - name: release
   217              value: '{{.result.Output}}'
   218              flags:
   219                - toObj
   220            - name: releaseid
   221              value: '{{.release_object.id}}'
   222              flags:
   223                - taskScope
   224                - v
   225          if: '{{ne (printf "%s" .releaseid)  "None" }}'
   226          do:
   227            - echo "deleting release - {{.releaseid}}"
   228            - echo """curl -sX DELETE {{.release_api_ep}}/{{.releaseid}}"""
   229            - |
   230              curl -s \
   231              -X DELETE \
   232              -u ${GITHUB_USERNAME}:${GITHUB_TOKEN} \
   233              {{.release_api_ep}}/{{.releaseid}}
   234          else:
   235            - func: cmd
   236              do:
   237                - name: print
   238                  cmd: "no latest release in remote, ignore"
   239  
   240        - func: shell
   241          desc: |
   242            delete the remote tag latest
   243            create latest release tag
   244          do:
   245            - git push --delete origin latest
   246            - git tag -d latest
   247            - git tag latest
   248            - git push origin refs/tags/latest
   249          flags:
   250            - ignoreError
   251  
   252        - func: shell
   253          desc: create the latest master release
   254          dvars:
   255            - name: quick_notes
   256              value: '{{.latest_version_notes| replace "\n" "\\n"}}'
   257              expand: 2
   258              flags:
   259                - v
   260          do: |
   261            curl -s -d '
   262            {
   263              "tag_name": "latest",
   264              "target_commitish": "master",
   265              "name": "latest",
   266              "body": "{{.quick_notes}}",
   267              "draft": false,
   268              "prerelease": false
   269            }
   270            ' \
   271            -X POST \
   272            -u ${GITHUB_USERNAME}:${GITHUB_TOKEN} \
   273            -H "Content-Type: application/json" \
   274            {{.release_api_ep}}
   275          reg: result
   276  
   277        - func: block
   278          loop: dists_for_latest
   279          desc: upload binary files
   280          dvars:
   281            - name: release
   282              value: '{{.result.Output}}'
   283              flags:
   284                - toObj
   285            - name: releaseid
   286              value: '{{.release_object.id}}'
   287              flags:
   288                - v
   289          do:
   290            - func: shell
   291              desc: upload the most used distros only
   292              dvars:
   293                - name: os
   294                  value: '{{.loopitem.os}}'
   295                - name: arch
   296                  value: '{{.loopitem.arch}}'
   297              do:
   298                - echo "upload for latest release - {{.releaseid}} for {{.os}}-{{.arch}}"
   299                - |
   300                  curl -s \
   301                  -X POST \
   302                  --data-binary '@build/up_{{.os}}_{{.arch}}_latest' \
   303                  -u ${GITHUB_USERNAME}:${GITHUB_TOKEN} \
   304                  -H "Content-Type: application/json" \
   305                  {{.release_upload_ep}}/{{.releaseid}}/assets?name=up_{{.os}}_{{.arch}}_latest
   306          if: '{{ne (printf "%s" .releaseid)  "None" }}'
   307  
   308    -
   309      name: Publish_rolling
   310      desc: build the bleeding-edge rolling release
   311      task:
   312        -
   313          func: shell
   314          do: git rev-parse --verify HEAD
   315  
   316        -
   317          func: cmd
   318          dvars:
   319            - name: releaseSHA
   320              value: '{{ .last_result.Output }}'
   321              flags: [taskScope]
   322          do:
   323            - name: print
   324              cmd: |
   325                SHA: {{.releaseSHA}}
   326  
   327        - func: cmd
   328          desc: |
   329            get the release version info
   330          dvars:
   331            - name: TRACEABLE_VERSION_MARKER
   332              value: '{{.rolling_version_template}}'
   333              expand: 2
   334              flags:
   335                - v
   336            - name: version_gofile_content
   337              value: '{{.version_gofile_template}}'
   338              expand: 2
   339              flags:
   340                - v
   341  
   342          do:
   343            - name: print
   344              desc: go version file
   345              cmd: |
   346                {{.version_gofile_content}}
   347            - name: writeFile
   348              desc: prepare the release info to be built into binary
   349              cmd:
   350                content: "{{.version_gofile_content}}"
   351                filename: version.go
   352                dir: ./app/up
   353  
   354            - namex: exit
   355  
   356        -
   357          func: call
   358          desc: build only the common distros
   359          dvars:
   360            - name: ver
   361              value: 'rolling-{{now|date "20060102"}}'
   362            - name: distlist
   363              value: |
   364                {{ range $idx, $dist := .dists_for_latest -}}
   365                {{- with $dist }}
   366                - {{ .os}}/{{.arch -}}
   367                {{end}}
   368                {{end}}
   369              flags:
   370                - toObj
   371                - keepName
   372                - v
   373          do: buildDistro
   374  
   375        - func: shell
   376          desc: |
   377            delete the remote tag latest
   378            create latest release tag
   379          do:
   380            - git push --delete origin latest
   381            - git tag -d latest
   382            - git tag latest
   383            - git push origin refs/tags/latest
   384          flags:
   385            - ignoreError
   386  
   387        - func: shell
   388          desc: |
   389            create rolling release tag
   390          do:
   391            - 'git push --delete origin rolling-{{now|date "20060102"}}'
   392            - 'git tag -d rolling-{{now|date "20060102"}}'
   393            - 'git tag rolling-{{now|date "20060102"}}'
   394            - 'git push origin refs/tags/rolling-{{now|date "20060102"}}'
   395          flags:
   396            - ignoreError
   397  
   398        - func: shell
   399          desc: create the latest rolling release
   400          dvars:
   401            - name: quick_notes
   402              value: '{{.rolling_version_notes| replace "\n" "\\n"}}'
   403              expand: 2
   404          do: |
   405            curl -s -d '
   406            {
   407              "tag_name": "rolling-{{now|date "20060102"}}",
   408              "target_commitish": "master",
   409              "name": "rolling-{{now|date "20060102"}}",
   410              "body": "{{.quick_notes}}",
   411              "draft": false,
   412              "prerelease": false
   413            }
   414            ' \
   415            -X POST \
   416            -u ${GITHUB_USERNAME}:${GITHUB_TOKEN} \
   417            -H "Content-Type: application/json" \
   418            {{.release_api_ep}}
   419          reg: result
   420  
   421        - func: block
   422          loop: dists_for_latest
   423          desc: upload binary files
   424          dvars:
   425            - name: release
   426              value: '{{.result.Output}}'
   427              flags:
   428                - toObj
   429            - name: releaseid
   430              value: '{{.release_object.id}}'
   431              flags:
   432                - v
   433          do:
   434            - func: shell
   435              desc: upload the most used distros only
   436              dvars:
   437                - name: os
   438                  value: '{{.loopitem.os}}'
   439                - name: arch
   440                  value: '{{.loopitem.arch}}'
   441              do:
   442                - echo "upload for latest release - {{.releaseid}} for {{.os}}-{{.arch}}"
   443                - |
   444                  curl -s \
   445                  -X POST \
   446                  --data-binary '@build/up_{{.os}}_{{.arch}}_rolling-{{now|date "20060102"}}' \
   447                  -u ${GITHUB_USERNAME}:${GITHUB_TOKEN} \
   448                  -H "Content-Type: application/json" \
   449                  {{.release_upload_ep}}/{{.releaseid}}/assets?name=up_{{.os}}_{{.arch}}_rolling-{{now|date "20060102"}}
   450          if: '{{ne (printf "%s" .releaseid)  "None" }}'
   451  
   452    -
   453      name: build
   454      desc: build binary
   455      task:
   456        -
   457          func: shell
   458          desc: build the binary to build directory
   459          do:
   460            - rm -rf ./build
   461            - mkdir -p ./build/linux
   462            - mkdir -p ./build/mac
   463            - mkdir -p ./build/arm
   464            - GOOS=darwin GOARCH=amd64 go build -o build/mac/up app/up/*.go
   465            - GOOS=darwin GOARCH=arm64 go build -o build/m1/up app/up/*.go
   466            - GOOS=linux GOARCH=amd64 go build -o build/linux/up app/up/*.go
   467  
   468    -
   469      name: buildDistro
   470      desc: build distro
   471      task:
   472        -
   473          func: shell
   474          desc: build the binary into build directory
   475          do:
   476            - echo "build version - {{.ver}}"
   477            - rm -rf ./build
   478            - mkdir -p ./build
   479  
   480        -
   481          func: block
   482          desc: |
   483            conditionally to take common distros for latest release or all distros
   484            default to build all types of distros supported
   485            if instructed the dist=common, then only build: linux, darwin and windows
   486          if: '{{not (pathExisted "distlist") }}'
   487          do:
   488            -
   489              func: shell
   490              desc: |
   491                this gives a list of supported os/arch types
   492                eg:
   493                  android/arm64
   494                  darwin/amd64
   495                  darwin/arm64
   496                  freebsd/amd64
   497                  illumos/amd64
   498                  linux/amd64
   499                  linux/ppc64
   500                  netbsd/arm64
   501                  windows/amd64
   502                  ..... more ...
   503              do: go tool dist list
   504  
   505            -
   506              func: cmd
   507              desc: obtain the full list of different type of distros
   508              dvars:
   509                - name: void
   510                  value: '{{ .last_result.Output |splitLines |reg "distlist" }}'
   511          else:
   512            - func: cmd
   513              desc: build the supplied list of dist types
   514              do:
   515                - name: print
   516                  cmd: 'building {{.distlist}}'
   517                - name: printObj
   518                  cmd: 'distlist'
   519  
   520        - func: block
   521          desc: build the instructed distribution binary
   522          loop: distlist
   523          do:
   524            - func: shell
   525              desc: iterate and build all distros - go ahead if one platform is not supported
   526              dvars:
   527                - name: void
   528                  value: '{{.loopitem |split "/" |reg "dist"}}'
   529                  flags:
   530                    - v
   531                - name: os
   532                  value: '{{.dist._0}}'
   533                - name: arch
   534                  value: '{{.dist._1}}'
   535              do:
   536                - 'echo "build release version - {{.ver}} > [ os = {{.os}}, arch = {{.arch}} ]"'
   537                - GOOS={{.os}} GOARCH={{.arch}} go build -o build/up_{{.os}}_{{.arch}}_{{.ver}} app/up/*.go
   538              flags:
   539                - ignoreError
   540  
   541        -
   542          func: shell
   543          desc: list all built results
   544          do: ls -l build/
   545  
   546    - name: Publish
   547      desc: publish for github tagged version
   548      task:
   549        -
   550          func: shell
   551          do: git rev-parse --verify HEAD
   552  
   553        -
   554          func: cmd
   555          dvars:
   556            - name: releaseSHA
   557              value: '{{ .last_result.Output }}'
   558              flags: [taskScope]
   559          do:
   560            - name: print
   561              cmd: |
   562                SHA: {{.releaseSHA}}
   563  
   564        -
   565          func: shell
   566          desc: get the tag version. eg. 0.9.0
   567          do:
   568            - echo "sha - {{.releaseSHA}}"
   569            - git describe --exact-match --tags $(git log -n1 --pretty='%h')
   570          reg: result
   571  
   572        - func: cmd
   573          desc: get the tag/release version
   574          vars:
   575            releaseType: tagged-version
   576          dvars:
   577            - name: ver
   578              value: '{{ .result.Output }}'
   579              flags:
   580                - v
   581                - taskScope
   582            - name: releaseTag
   583              value: '{{ .ver }}'
   584            - name: releaseVersion
   585              value: '{{ .ver }}'
   586            - name: releaseNote
   587              value: '{{ printf "%s%s%s" "./release/tags/" .ver ".md" |fileContent}}'
   588              flags:
   589                - v
   590                - taskScope
   591            - name: TRACEABLE_VERSION_MARKER
   592              value: '{{.version_template}}'
   593              expand: 2
   594              flags:
   595                - v
   596            - name: version_gofile_content
   597              value: '{{.version_gofile_template}}'
   598              expand: 2
   599              flags:
   600                - v
   601  
   602          do:
   603            - name: print
   604              cmdx: |
   605                version: {{.ver}}
   606                SHA: {{.releaseSHA}}
   607            - name: print
   608              cmdx: |
   609                {{.TRACEABLE_VERSION_MARKER}}
   610            - name: print
   611              desc: go version file
   612              cmd: |
   613                {{.version_gofile_content}}
   614            - name: writeFile
   615              desc: prepare the release info to be built into binary
   616              cmd:
   617                content: "{{.version_gofile_content}}"
   618                filename: version.go
   619                dir: ./app/up
   620  
   621            - namex: inspect
   622              cmd:
   623                - exec_vars
   624  
   625            - namex: pause
   626              desc: double check release note
   627  
   628            - namex: exit
   629  
   630        - func: call
   631          do:
   632            - buildDistro
   633  
   634        - func: shell
   635          desc: get build binary file list
   636          do: ls build
   637  
   638        - func: cmd
   639          desc: get binary list as object
   640          dvars:
   641            - name: void
   642              value: '{{ .last_result.Output | splitLines |reg "distList" }}'
   643              flags:
   644                - v
   645            - name: release_note_js_string
   646              value: '{{ .releaseNote| replace "\n" "\\n"}}'
   647              flags:
   648                - v
   649                - taskScope
   650          do:
   651            - name: print
   652              cmd: 'distro list: {{.distList}}'
   653  
   654        - func: shell
   655          desc: create the tagged release
   656          do:
   657            - |
   658              curl -s -d '
   659              {
   660                "tag_name": "{{.ver}}",
   661                "target_commitish": "master",
   662                "name": "{{.ver}}",
   663                "body": "{{.release_note_js_string }}",
   664                "draft": false,
   665                "prerelease": false
   666              }
   667              ' \
   668              -X POST \
   669              -u ${GITHUB_USERNAME}:${GITHUB_TOKEN} \
   670              -H "Content-Type: application/json" \
   671              {{.release_api_ep}}
   672          reg: result
   673  
   674        - func: block
   675          desc: upload all build distro binary files
   676          loop: distList
   677          dvars:
   678            - name: release
   679              value: '{{.result.Output}}'
   680              flags:
   681                - toObj
   682            - name: releaseid
   683              value: '{{.release_object.id}}'
   684              flags:
   685                - v
   686          do:
   687            - func: shell
   688              desc: upload the most used distros only
   689              do:
   690                - echo "upload for {{.ver}} release - {{.releaseid}} with file {{.loopitem}}"
   691                - |
   692                  curl -s \
   693                  -X POST \
   694                  --data-binary '@build/{{.loopitem}}' \
   695                  -u ${GITHUB_USERNAME}:${GITHUB_TOKEN} \
   696                  -H "Content-Type: application/json" \
   697                  {{.release_upload_ep}}/{{.releaseid}}/assets?name={{.loopitem}}
   698          if: '{{ne (printf "%s" .releaseid)  "None" }}'
   699  
   700    - name: release_local
   701      desc: release it to local path
   702      task:
   703        - func: call
   704          do:
   705            - facts
   706            - build
   707  
   708        - func: cmd
   709          do:
   710            - name: print
   711              cmd: 'OS is: {{.os}}'
   712  
   713        - func: shell
   714          desc: copy the binary to path in osx
   715          do: cp -f build/mac/up /usr/local/bin/
   716          if: '{{ eq .os "Darwin" }}'
   717  
   718        - func: shell
   719          desc: copy the binary to path in linux
   720          do: cp -f build/linux/up /bin/
   721          if: '{{ eq .os "Linux" }}'
   722  
   723        - func: shell
   724          desc: |
   725            copy the binary to path in Mac with M1 Chip
   726            TODO: add if condition to use arch == arm64
   727          do: cp -f build/m1/up /bin/
   728          if: '{{ eq .os "Darwin" }}'
   729  
   730    -
   731      name: testc
   732      desc: test all the function tests
   733      task:
   734        -
   735          func: shell
   736          do:
   737            - go test ./tests/functests/casec_test.go -v
   738  
   739    -
   740      name: Log_gen
   741      desc: generate all logs for the docs in build pipeline
   742      task:
   743        -
   744          func: shell
   745          dvars:
   746            - name: hugo_doc_log_dir
   747              value: /up_project/updocs/reflogs
   748              flags:
   749                - taskScope
   750          do:
   751            - 'echo "log will be generated at {{.hugo_doc_log_dir}}"'
   752            - 'rm -rf {{.hugo_doc_log_dir}}'
   753            - 'mkdir -p {{.hugo_doc_log_dir}}'
   754            - zsh -c "cp ./build/**/up_linux* /bin/up || cp ./build/linux/up /bin/up"
   755  
   756        -
   757          func: call
   758          vars:
   759            upcmd: up
   760          do:
   761            - log_gen_main
   762  
   763    -
   764      name: Log_gen_test
   765      desc: generate all logs for the docs and test in Mac
   766      task:
   767        -
   768          func: cmd
   769          dvars:
   770            - name: hugo_doc_log_dir
   771              value: '{{env "HUGO_DOC_LOG_DIR"}}'
   772              flags: [reg]
   773          do:
   774            - name: print
   775              cmd: 'log will be generated at: {{.hugo_doc_log_dir}}'
   776  
   777        -
   778          func: shell
   779          do:
   780            - 'echo {{.hugo_doc_log_dir}}'
   781            - 'rm -rf {{.hugo_doc_log_dir}}'
   782            - 'mkdir -p {{.hugo_doc_log_dir}}'
   783  
   784        -
   785          func: call
   786          vars:
   787            upcmd: ./build/mac/up
   788          do:
   789            - release_local
   790            - log_gen_main
   791  
   792    -
   793      name: log_gen_main
   794      desc: main entry to process different type of cases
   795      task:
   796        -
   797          func: call
   798          do: log_gen_module
   799          loop:
   800            - ????
   801            - f????
   802  
   803        -
   804          func: call
   805          do: log_gen_impl
   806          loop:
   807            - c????
   808            - f????
   809  
   810    -
   811      name: log_gen_module
   812      task:
   813  
   814        -
   815          func: shell
   816          dvars:
   817            - name: moduletests_dir
   818              value: ./tests/modtests
   819              flags:
   820                - taskScope
   821          desc: |
   822            get mod tests dirs
   823            ./0001
   824            ......
   825          do:
   826            - 'cd {{.moduletests_dir}}; find . -name "{{.loopitem}}" -maxdepth 1 -mindepth 1 -type d|sort|cut -d\/ -f2'
   827          reg: cases
   828  
   829        - func: cmd
   830          desc: get the case list object
   831          dvars:
   832            - name: void
   833              value: '{{ .cases.Output | splitLines |reg "caselist" }}'
   834  
   835        - func: cmd
   836          do:
   837            - name: print
   838              cmd: 'caselist: {{.caselist}}'
   839  
   840        - func: call
   841          do: generate_each_module_logs
   842          loop: caselist
   843  
   844    -
   845      name: generate_each_module_logs
   846      desc: generate logs for each module
   847      task:
   848        -
   849          func: shell
   850          dvars:
   851            - name: casename
   852              value: '{{.loopitem}}'
   853            - name: moddir
   854              value: '{{.moduletests_dir}}/{{.loopitem}}'
   855            - name: shcmd
   856              value: '{{.upcmd}} ngo -d {{.moddir}} -i dev --configdir={{.moddir}} -w refdir'
   857              flags:
   858                - vvv
   859            - name: shoutput
   860              value: '> {{.hugo_doc_log_dir}}/m'
   861              flags:
   862                - vvv
   863          do:
   864            - 'echo """{{.shcmd}} -v {{.loopitem}} {{.shoutput}}{{.casename}}_{{.loopitem}}.log"""'
   865            - '{{.shcmd}} -v {{.loopitem}} {{.shoutput}}{{.casename}}_{{.loopitem}}.log'
   866          loop:
   867            - v
   868            - vv
   869            - vvv
   870            - vvvv
   871            - vvvvv
   872          flags:
   873            - ignoreError
   874  
   875    -
   876      name: log_gen_impl
   877      desc: run in up docker | generate logs
   878      task:
   879        -
   880          func: shell
   881          name: getcases
   882          do:
   883            - cd ./tests/functests; ls {{.loopitem}}.yml
   884          reg: cases
   885  
   886        -
   887          func: cmd
   888          dvars:
   889            - name: void
   890              value: '{{ .cases.Output | splitLines |reg "caselist" }}'
   891              flags: [vvv]
   892  
   893        -
   894          func: cmd
   895          do:
   896            - name: print
   897              cmd: 'caselist {{.caselist}}'
   898  
   899        -
   900          func: call
   901          do: process_level
   902          loop: caselist
   903  
   904    -
   905      name: process_level
   906      desc: process different verbose level
   907      task:
   908        -
   909          func: shell
   910          dvars:
   911            - name: parentLoopItem
   912              value: '{{.loopitem}}'
   913            - name: shcmd
   914              value: '{{.upcmd}} ngo task -d ./tests/functests -t {{.parentLoopItem | replace ".yml" ""}} -i dev --configdir=./tests/functests '
   915              flags:
   916                - vvv
   917            - name: shoutput
   918              value: '> {{.hugo_doc_log_dir}}/{{.parentLoopItem | replace ".yml" ""}}'
   919              flags:
   920                - vvv
   921          do:
   922            - 'echo """{{.shcmd}} -v {{.loopitem}} {{.shoutput}}_{{.loopitem}}.log"""'
   923            - '{{.shcmd}} -v {{.loopitem}} {{.shoutput}}_{{.loopitem}}.log'
   924          loop:
   925            - v
   926            - vv
   927            - vvv
   928            - vvvv
   929            - vvvvv
   930          flags:
   931            - ignoreError
   932  
   933    -
   934      name: testf
   935      desc: test the exit scenarios due to different types of validation
   936      task:
   937        -
   938          func: shell
   939          name: getcases
   940          do:
   941            - cd ./tests/functests; ls f*.yml
   942          reg: cases
   943  
   944        -
   945          func: shell
   946          desc: a real showcase of how to loop using template
   947          do:
   948            - |
   949              {{ range $idx, $file := .cases | splitLines -}}
   950              {{$casename :=  $file | replace ".yml" ""}}
   951              echo "==========failure case test {{$idx |add1}}==============="
   952              go run app/up/*.go task task -d ./tests/functests -t {{$casename}} -i dev -v vvvv
   953              {{end}}
   954  
   955    -
   956      name: testp
   957      desc: test user cases with prompt
   958      task:
   959        -
   960          func: shell
   961          name: getcases
   962          do:
   963            - cd ./tests/functests; ls p*.yml
   964          reg: cases
   965  
   966        -
   967          func: shell
   968          desc: a real showcase of how to loop using template
   969          do:
   970            - |
   971              {{ range $idx, $file := .cases | splitLines -}}
   972              {{$casename :=  $file | replace ".yml" ""}}
   973              echo "==========failure case test {{$idx |add1}}==============="
   974              go run app/up/*.go task task -d ./tests/functests -t {{$casename}} -i dev -v vvvv
   975              {{end}}
   976  
   977    -
   978      name: testm
   979      desc: test specific module
   980      task:
   981        - func: call
   982          do: release_local
   983        -
   984          func: shell
   985          dvars:
   986            - name: casename
   987              flags:
   988                - prompt
   989          do: |
   990            cd ./tests/modtests/{{.casename}}
   991            ls -lart
   992            up ngo
   993  
   994    -
   995      name: testx
   996      desc: test specific the function test
   997      task:
   998        -
   999          func: shell
  1000          do:
  1001            - go test ./tests/functests/casex_test.go -v
  1002  
  1003    -
  1004      name: testwip
  1005      desc: test wip case
  1006      task:
  1007        -
  1008          func: shell
  1009          do:
  1010            - go test ./tests/functests/wip_test.go -v
  1011  
  1012  
  1013    -
  1014      name: wiptest
  1015      desc: test wip
  1016      task:
  1017        -
  1018          func: shell
  1019          do:
  1020            - go run app/up/*.go task task -d ./tests/functests -t wip -v vvvv
  1021  
  1022    -
  1023      name: testall
  1024      desc: test all differnt type of tests
  1025      task:
  1026        -
  1027          func: call
  1028          do:
  1029            - testx
  1030            - testwip
  1031            - wiptest
  1032            - testc
  1033  
  1034    -
  1035      name: Build_upcli_docker_image
  1036      desc: build a docker image to use up CLI command
  1037      task:
  1038        - func: call
  1039          do:
  1040            - build
  1041        -
  1042          func: shell
  1043          dvars:
  1044            - name: docker_version
  1045              value: '{{now|date "20060102"}}'
  1046            - name: docker_tag
  1047              value: 'docker.pkg.github.com/upcmd/up/upcli:{{.docker_version}}'
  1048            - name: docker_latest_tag
  1049              value: 'docker.pkg.github.com/upcmd/up/upcli:latest'
  1050            - name: warn
  1051              value: please ensure the docker build follows a release so that version.go is updated properly
  1052              flags:
  1053                - prompt
  1054          do:
  1055            - 'docker build -t {{.docker_tag}} .'
  1056            - 'docker build -t {{.docker_latest_tag}} .'
  1057            - |
  1058              docker login docker.pkg.github.com -u ${GITHUB_USERNAME} --password ${GITHUB_TOKEN}
  1059              docker push {{.docker_tag}}
  1060              docker push {{.docker_latest_tag}}
  1061  
  1062    -
  1063      name: build_dev_docker_image
  1064      desc: run in linux | build a nix docker image
  1065      task:
  1066        -
  1067          func: shell
  1068          do:
  1069            - nix build
  1070            - cp  /nix/store/*-docker-image-cmgolang.tar.gz .
  1071            - rm -f result
  1072  
  1073    -
  1074      name: load_dev_docker_image
  1075      desc: run in linux | build a nix docker image
  1076      task:
  1077        -
  1078          func: shell
  1079          do:
  1080            - ls *-docker-image-cmgolang.tar.gz
  1081  
  1082        -
  1083          func: shell
  1084          do:
  1085            - 'docker load --input="{{.last_result.Output}}"'
  1086            - docker images |grep cmgolang
  1087  
  1088    -
  1089      name: Add_MPL2_License
  1090      desc: Add license notice to all golang file as a notice header
  1091      task:
  1092        -
  1093          func: shell
  1094          name: getcases
  1095          do:
  1096            - find ./ -name "*.go"
  1097          reg: cases
  1098  
  1099        -
  1100          func: cmd
  1101          dvars:
  1102            - name: void
  1103              value: '{{ .cases.Output | splitLines |reg "caselist" }}'
  1104              flags: [vvv]
  1105  
  1106        -
  1107          func: block
  1108          desc: apply the license
  1109          do:
  1110            -
  1111              func: cmd
  1112              dvars:
  1113                - name: filepath
  1114                  value: '{{.loopitem}}'
  1115                  flags:
  1116                    - taskScope
  1117              do:
  1118                - name: readFile
  1119                  cmd:
  1120                    filename: '{{.filepath}}'
  1121                    reg: content
  1122                - name: print
  1123                  cmdx: '{{.content}}'
  1124  
  1125            -
  1126              func: cmd
  1127              desc: apply the license if the license header has not been applied
  1128              dvars:
  1129                - name: licensed_code
  1130                  value: |
  1131                    {{.license_header}}
  1132                    {{.content}}
  1133              do:
  1134                - name: print
  1135                  cmd: 'processing {{.filepath}}'
  1136  
  1137                - name: writeFile
  1138                  cmd:
  1139                    content: "{{.licensed_code}}"
  1140                    filename: '{{.filepath}}'
  1141                -
  1142                  namex: exit
  1143              if: '{{ not (regexMatch "MPL/2.0" .content) }}'
  1144  
  1145          loop: caselist
  1146  
  1147  
  1148    -
  1149      name: how_many_stars
  1150      desc: get the number of star of the project
  1151      task:
  1152        - func: shell
  1153          do: |
  1154            curl --silent 'https://api.github.com/repos/upcmd/up' -H 'Accept: application/vnd.github.preview' | grep  stargazers_count
  1155          reg: result